从ubuntu中文论坛转载的一片超好的文章,慢慢学习中(转)
Posted on 2011-01-07 02:05 leekiang 阅读(866) 评论(0) 编辑 收藏 所属分类: LINUX,UNIX
About Shell
-----------
Q1.用户登录到Linux机器,系统会启动login子程序处理用户登录请求,如何自动设置用户环境变量?
比如 PATH,CVS_RSH等等
编辑/etc/profile 和 $HOME/.bash_profile $HOME/.bash_login $HOME/.profile
当退出登录时,shell会执行 ~/.bash_logout
Q2.如何快速执行历史命令?
fc -s [cmd] 执行编号为cmd的命令,缺省的话,执行最近1条指令
可以使用alias r='fc -s' 登记1个命令别名,减少键击次数
注:
fc - Fix Command
可以用bash内建的命令查找功能,在命令输入状态下输入C-R,则再输入命令,即可出现
与当前输入字符串匹配的命令列表
Q3.如何快速查看一个用户的id和组id?
输入id 即可查看当前用户的id和组id(包括数字和名称)
输入id [USERNAME] 即可查看 USERNAME的id和组id(包括数字和名称)
Q4.如何查看OS打开的所有文件句柄?
输入lsof,可查看所有的打开文件
输入lsof /path/of/file, 可查看/path/of/file目录中被打开的文件
Q5.如何转化不同编码的文件?
例如 readme.txt 是GB2312编码的,Console只支持utf-8的,要将readme.txt
打印处理,如果不作编码转换,必然出现乱码.
可以用iconv工具进行转化
cat readme.txt| iconv -f gb2312 -t utf-8
Q6.如何在当前的shell会话上下文中设置环境变量?
将设置指令写如一个特定的bash文件,如setup.sh
执行 . setup.sh 命令
注: . 也是bash的一个内建指令
Q7.如何使用Bash的花括号自动扩展?
假设我们要打印出从a到z的26个字母,那么通常做法是从a循环到z,逐个输出,但我们知道
Linux下这样的轮子大多数已经被人发明过了,Bash中就有这样的工具
输入 echo {a..z}
扩展应用:
a) 当我们要列出多个目录下的文件时,这能给我们帮助
ls /path/{dir1, dir2}
b) 当我们要改变多个目录的属主时
chown /path/{ex?.?*, how_ex}
Q8.如何把一个命令的输出赋值给某一个特定的变量?
使用语句
var1=$(command)
或者反引号
var1=`command`
Q9. Bash中如何用快捷键键?
输入 CTRL-W 删除左边文本,直至遇到空格 ( vim 中 dB )
输入 CTRL-K 删除从光标位置到行尾的文本 (vim 中 d$ )
输入 CTRL-Y 粘贴剪贴板中的文本至光标位置 (vim 中 p)
输入 CTRL-r或 CTRL-s, 可匹配增量匹配当前的字, 显示出候选的命令.如果有多个匹配
结果,则输入C-r向后搜索,输入C-s向前搜索.
Q10. 如何让Bash中在sudo/man等命令时也会自动补全命令?
可利用Bash中的Programmable Completion Builtins功能,具体语法见
INFO BASH :: Command Line Editing :: Programmable Completion
比如要让man 具备自动补全的功能,则这么写
complete -F _man $filenames man
_man 函数会被执行,请求所有可能补全的值写在COMPREPLY数组中
Q11. Bash中如何Use Here Document?
使用语法
VAR=<<"EOF"
Some here document
EOF
注: 详见Bash Info - 3.6.5 Here Documents
- read input from the current source until a line containing only WORD (with no trailing
-blanks) is seen.
Q12. Bash中[[和[有何不同?
[[是复合命令,它可以构成测试用的表达式,表达式可以是bash中的条件表达式的任一种,
单目和双目运算的均可.可以用! && || 这样的逻辑运算符.
[是内建命令,同样也是用来测试表达式,表达式可以是Bash条件表达式中的任一种.
可以用! -a -o 这样的逻辑运算符.
两者是除了逻辑运算符不同之外,并无明显区别.
About Man/Info
---------------
Q1.用户手册将命令划分为不同的类别,如何查看分属不同Section的命令?
man 7 locale # 7代表Section 号
About X
--------
X1.如何获得系统中所有的字体?
输入指令 xlsfonts
X2. 如何在ssh登录到远程机器上后在本地运行X应用程序?
假设你的本地主机HostA,远程主机HostB,那么你要远程连接到HostB上运行X应用,显示在
HostA的屏幕上.
1. 配置HostA上 ~/.ssh/config 文件
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
2. ssh HostB
3. 执行X应用程序
注意:必须在HostA上开通X11的转发而不是HostB.
X3. 如果使用第2个屏幕-投影仪?
在Ubuntu 7.04以上中自动支持投影仪,即插即用,但需要插上VGA的接口,重新启动系统后方可使用
在Ubuntu 7.10版本接上投影仪后,第2个屏幕无输出,要LOGOUT后才有输出
About Maintain
--------------
R1. 目录名字不要包含大写字符,尽量少包含中文字符.
1. 中文文件名在Unix/Linux下不易输入,需要X/输入法的支持.
2. 如果采用Apache的文件访问接口,非Latin字符大多需要URL转义,这对于HTML作者不友好
R2. 请及时清理一些临时,系统日志文件,减少其对存储空间的占用,也是加快程序运行速度
1. /tmp
2. /var/log
R3. 不要直接用root用户身份登录系统
如果你不想让你系统中的重要文件因为你的操作不当在倾刻间消失,那就用吧.
有人用chown命令把整个操作系统中文件的用户/组属性改成了asterisk:asterisk
也有人曾经把/var, /etc两个目录删除,系统必须重装.
R4. 为了有助于确保Web Mail您的密码和帐户的安全,请在每个会话结束时注销帐户。
About System
------------
S1. Linux在boot起来之后,先调用/sbin/init,它是其他所有进程的父进程
1.启动时先运行boot level master script
2.执行硬件初始化脚本
3.执行run level master script,运行级别定义在/etc/inittab中
每级的脚本放在/etc/init.d/rc<X>.d中
4.到最后用户看到的即是mingetty登录界面
S2. Linux TTY这种用户接口的设计思想
用户通过本地键盘或者网络 -->命令 -->TTY -->Shell Interpreter
--> Excute Cmd --> Output --> TTY --> 本地内存或者网络 -->显示器输出
优点: 可以用不同形式的终端登录,比如本地键盘,远程网络,Modem,只有TTY与用户
之间存在某种连接即可
S3. Linux如何同一张网卡如何支持多个IP?
1. 配置 虚拟接口
ifconfig eth0:0 192.168.12.240
ifconfig eth0:0 netmask 255.255.255.0
2. 增加一个路由表
route add -net 192.168.12.0 netmask 255.255.255.0 dev eth0:0
3. 增加一个缺省的路由表
route add default gw 192.168.12.168
S4. 如果Home分区中空间不够,但是/usr分区中留有较大的空间,如何平衡利用这两空间?
目标: 1.通过Home分区文件的形式读写数据
2.实际的数据确是存储在/usr/分区中
利用符号链接的方式,在Home分区中建立一个符号链接目录,指向
ln -s /usr/local/voip ~/project/voip
S5. Apache 使用UserDir模块时,~username形式访问,Apache告之禁止访问?
比如/home/robbie 它具有drwx------属性,必须将它改为
drwxr-xr-x属性,Apache服务器才可打开用户目录
S6. 如何添加自定义的全局的初始化动作?
比如要添加这两个别名命令fcc,和fpp统计.c和.cpp源文件数目,
可在/etc/bash.bashrc.local中添加如下脚本
alias fcc='ll -R | grep "[:alpha:]*[.]c$" | nl |less'
alias fpp='ll -R | grep "[:alpha:]*[.]cpp$" | nl |less'
注:
Linux Kernel 共有7454个源文件
S7. 如何查看系统中打开某个目录/文件的进程?
fuser -v FILE_TO_LOOK_UP
S8. 如何让普通用户以超级用户身份执行命令,而不需要其输入密码?
配置/etc/sudoers,按照如下方式指定
asterisk ALL = NOPASSWD: /sbin/shutdown
注:
ALL是代表任何网络主机.
S9. 如何查看Linux系统运行了多长时间?
输入
uptime
输出
7:00pm up 3 days 9:49, 11 users, load average: 1.28, 1.29, 1.26
S10.如何查看Linux系统运行状态信息,比如cpu/内核版本/启动参数/IO口?
cat /proc/*
S11.如何备份文件?
使用cp命令,如
cp src_files dst_files
注意:
SuSE 9.3 cp 的版本为 5.3.0,对于存在相同文件的覆盖操作,默认动作是覆盖
Linux robbie 2.6.11.4-20a-default #1 Wed Mar 23 21:52:37 UTC 2005 i686 i686 i386 GNU/Linux
CentOS 分发版
Linux asterisk1.local 2.6.9-11.EL #1 Wed Jun 8 16:59:52 CDT 2005 i686 i686 i386 GNU/Linux
CentOS SMP的版本
Linux SVC9000.local 2.6.9-11.ELsmp #1 SMP Wed Jun 8 17:54:20 CDT 2005 i686 i686 i386 GNU/Linux
S12. 如何给系统增加一个路由?
存在如下的一条路由
default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
添加一条路由
route add default 192.168.12.168
S13. 如何使用NFS?
服务器端设置 (以CentOS为例)
A. 在目标主机上设置NFS 共享目录,修改/etc/exports
增加如下条目:
/mnt/asterisk 192.168.12.0/255.255.255.0(rw)
B. 启动NFS服务
service nfs start
如果NFS服务已经启动,那么重读exports
exportfs -ra
客户端设置 (2.2.18以上内核内建支持NFS)
手工mount:
mount 192.168.12.238:/mnt/asterisk /path/of/client/nfs
自动mount:
修改 /etc/fstab,增加一条
192.168.12.238:/mnt/asterisk /path/of/client/nfs nfs rw 0
然后执行: mount -a -t nfs
注:
1. 缺省,在服务器端的共享目录的访问权限即为mount后的访问权限
2. nfs服务依赖于portmap,启动nfs前portmap必须先启动
S14.如何制作一张可以启动的CD-ROM?
1. 你需要具备以下这些文件, isolinux目录以及目录中的内核,配置,Ramdisk镜像等
可从Redhat安装盘上获得
2. 将isolinux目录拷贝至你的ISO光盘的根目录
3. 使用工具mkisofs
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T \
-input-charset utf-8 /path/of/your/isoroot
参考:
http://syslinux.zytor.com/iso.php
注:
1. 制作SVC ISO文件耗时1m45.494s 43.170s(P4,CentOS 4.1)
2. 可以使用mkisofs将多个redhat安装盘合并为一个dvd的安装盘
使用到的开关有: -graft-points Psyche-i386-disc1
溶合的项目有 .discinfo=.discinfo isolinux/=isolinux
RedHat/=shrike-i386-disc2/RedHat RedHat/=shrike-i386-disc3/RedHat
docs/=Psyche-docs
S15. 如何刻录一张CD-R 或者CD-RW?
* 对于CD-R,假设要刻录的是mydata.iso文件,使用
cdrecord -v speed=4 dev=0,0,0 -data mydata.iso
一般,cdrecord会使用TAO mode for single session模式.
* 对于CD-RW,先要将CD-RW盘的数据内容擦除
cdrecord -v speed=2 dev=0,0,0 -blank=fast
然后和CD-R一样,再使用刻录指令.
注:
1. 参数dev=0,0,0是刻录设备的地址,可以如下命令得到
cdrecord -scanbus
2. 需要的话,在dev参数上加 ATAPI指示符,如
cdrecord -v speed=8 dev=ATAPI:0,0,0 -data boot.iso
3. 一般刻录一张 560M的CD-ROM,需925.050s
S16. 如何在单一终端中执行多个任务,并在任务之间切换?
举例:
A. vim hello.txt 编辑一个文档
B. 中途用户想退出,查看系统的CPU 运行情况
按 CTRL-Z,挂起当前vim任务;输入top
C. 用户在top任务中又想看一下硬盘的分区信息
按 CTRL-Z,挂起当前top任务;输入fdisk /dev/hda
D. 此时当前运行任务为fdisk,挂起的有2个:vim和top
在fdisk中按 CTRL-Z一样挂起它
输入: jobs -l
系统输出:
[3]+ 21731 Stopped vim hello.txt
[4] 21805 Stopped top
[5]- 21827 Stopped fdisk /dev/hda
[]中的数字代表后台任务编号,你可以根据它在任务间来回切换
输入 fg 1 或 fg vim 回到vim任务中,继续执行
输入 fg 2 或 fg top 回到top任务中
输入 fg 3 或 fg fdisk 回到fdisk任务中
S17. 如何快速查看Linux系统的分区信息?
输入 fdisk -lu /dev/hdx
可看到指定硬盘设备的分区信息.
S18. 我的FTP服务或者Web服务别人无法访问到?
很可能是你的防火墙做了限制,将你要提供的服务从禁用列表中去除即可.
S19. 软件A依赖于与库B,我安装了B,可A依然提示库B找不到?
有一种可能性,即库B不是装在系统的库文件目录/lib和/usr/lib,譬如安装于
/usr/local/lib下,这样就找不到
办法:
1 修改安装路径为/lib
2 或将/usr/local/lib添加到系统库目录中
* 编辑 /etc/ld.so.conf
加入一行 /usr/local/lib
* 重载库 sudo ldconfig
S20. 某些系统服务如mysql数据库未在启动时加载,如何配置启动时加载?
使用/sbin/chkconfig工具,如下
/sbin/chkconfig --level 2345 mysql on
就可使mysql服务器在2345级别启动时自动运行
S21. PHP许多模块未加载,如何加载它们?
修改/etc/php.ini ,比如你要加载session.so,应写为
extension=session.so
S22. 如何监控系统从开机到出现登录界面所使用的时间以及系统的运行状态?
安装bootchart软件包,之后,每次系统启动完成后会在/var/log/bootchart目录下生成
监测图,PNG格式的,里面包含着启动耗费时间、每一个服务的起止时间.
S23. Ubuntu下如何支持中文输入?
$sudo apt-get install scim scim-modules-socket scim-modules-table scim-pinyin scim-tables-zh scim-input-pad
$sudo sh -c " echo 'export XMODIFIERS=@im=SCIM ; export GTK_IM_MODULE="scim" ; export QT_IM_MODULE="scim" ; scim -d ' > /etc/X11/Xsession.d/95xinput "
$sudo chmod +755 /etc/X11/Xsession.d/95xinput
# 注:在Dapper下省略后两步
#注:在Dapper里也可以直接选择系统->系统管理—>语言支持(language support)勾选Chinese 就会自动安装和配置scim
分解一下看看:
安装scim输入法平台
S24. NFS服务起来后,在客户端mount一直提示"mount: RPC: Timed out\n"?
表现:
* 查了portmap, nfs都服务端都没有问题
* showmount -e nfs_server也没有问题
* 就是在mount -t nfs nfs_server:/path /local/path时出"mount: RPC: Timed out\n"的错误
解决: 路由可能是原因
出现这种问题,在查遍了许多文章还没有结果的情况下,请查一下服务器的网络配置,特别小心多网卡
情况下的路由,如果你的缺省路由类似这样
default 220.250.26.1 0.0.0.0 UG 0 0 0 eth1
那么很可能路由是罪魁祸首.
S25. 双网卡如何共享网络连接?
参考 nat.sh
S26. 如何解决SCIM和Open Office不兼容,导致Open Office异常退出的问题?
问题描述
1.系统环境中设置了scim为输入法
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
2.在KDE应用比如Konsole中可以正常输入中文,但打开open office却异常退出,
打开其它应用Mozilla Thunderbird,也是异常退出
这里也有描述 https://bugs.launchpad.net/openoffice/+bug/103079
原因
scim与GTK2的应用程序存在二进制的兼容性问题,scim是c++语言实现的,而gtk2
应用比如openoffice, moizlla Thunderbird是采用C语言实现的,在加载输入法
时会导致应用程序内存分配错误.
解决办法
1. 安装scim-bridge模块
http://www.scim-im.org/projects/scim_bridge
2. 修改GTK应用程序的输入法配置
export GTK_IM_MODULE=scim-bridge
3. 登出桌面系统,再登录,即可正常打开ooffice
About Toolkit
-------------
T1. 使用grep查找.gz文件中包含特定字符串的行?
举例,有个文件,ls-lrR.txt.gz, 待查找的字符串为开头为rms,结尾为ogg的文件,可以用下列方式
gunzip -c ls-lrR.txt.gz | grep 'rms-.*ogg'
注: *NIX环境下, .可代表任何字符, *代表任意匹配,+代表至少出现1次,?代表至多出现1次
T2. Windows 2000运行有telnet服务,这样可以使用linux的konsole/或者其他终端模拟器连接windows主机.
telnet pc.window.address
T3. 如何查看PDF/ps格式的文档?
gs ps_file_name3
gs pdf_file_name
Note: gs is PostScript and PDF language interpreter and previewer
T4. 如何跟踪IP报文的路径?
Linux下,输入traceroute HOST_NAME|IP
Win32下,输入tracert HOST_NAME|IP
T5. 如何查看内核的路由表?
Linux下,输入/sbin/route
Win32下,输入route PRINT
T6. 如何内核中的网络接口卡的物理地址?
Linux下,输入/sbin/arp
Win32下,输入 arp -a
T7. 如何实现按1个快捷键即输入"年-月-日 星期x"?
可以使用map命令,将某一个快捷键变为命令输入
参考:map <F2> ggA<C-R>=strftime("%Y-%m-%d %A")<CR><Esc>
T8. 如何使用Shell工具链统计一个目录下所有.c的原文件数目?
分析:.c原文件的特征是以.c字符为结尾,可以使用正则表达是[.]c表示
ll -R | grep "[:alpha:]*[.]c$" | nl |less
正则表达式 ([0-9]{5,}) 代表由5位数字构成的单词,()是单词控制字符
T9. 如何高效的使用FTP客户端工具?
lftp 工具可以完美的支持,它支持提前信息获取,Tab目录或文件补齐.
lftp 支持下载进度指示,%形式,下载速率.
lftp 支持断线后自动恢复连接.
lftp 在绝大多数Linux分发版中都有安装.
T10. SSH远程登录工具,认证过程解析?
* 客户登录到远程主机,必须提供identity
* SSH服务器认证这个identity
* Host Key 和 Public Key的关系
* Challenge = a random number, encrypted by user's public key
T11. 如何快速的执行计算命令?
比如,计算硬盘的大小,BLOCK数18335302,每个BLOCK为512字节
echo "512*18335302" | bc
T12. vsftpd/wu-ftpd如何启用匿名ftp服务?
对于vsftpd,编辑/etc/vsftpd.conf,确认开关
anonymous_enable=YES
注:
1. 匿名ftp用户登录所见目录对应于系统中ftp用户的HOME目录,一般为/var/ftp,可变更
2. ftp用户的HOME目录owner:group要设为root:root,用户才通过匿名访问,否则有500错误
T13. 如何快速得到文件系统中各个目录对硬盘的占用情况?
在根目录下输入 du -h --max-depth=1
T14. 如何快速查看指定的man文件?
输入 man -l /path/of/your/man/file
T15. 如何查看一个IP段范围内的IP地址与前缀?
利用 ipcount命令,比如查看起始地址为 192.168.3.2
数量为100的所有ip地址前缀
输入
ipcount 192.168.3.2+100
T16. VsFtpd服务器登录时,每个文件的owner和group都显示为ftp,
因为权限受限,无法上传,怎么办?
编辑/etc/vsftpd.conff
设置 hide_ids=NO
T17. Lynx文本浏览器如何实现文本行的滚动?
输入 CTRL-N 向下翻动两行
输入 CTRL-P 向上翻动两行
T18. 如何抓取网络接口中传输的数据报文?
tcpdump -i interface
T19. 如何查看一台主机的IP地址?
host name 即可查看name对应的IP地址
T20. 如何启用NAT?
192.168.3.0/24局域网主机通过WAN连接网络
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to 218.67.79.7
echo 1 > /proc/sys/net/ipv4/ip_forward
T21. 如何在命令行下查看word文档?
安装antiword这个工具包,输入
antiword wordfile
这个工具就会将word文档内容输出到标准输出。
注:
可以使用mc这个外包shell调用antiword,即通过查看功能
T22. 如何快速的排序一个文本文件?
执行
sort -u unsortedfile -o sortedfile
T23. 如何给源代码打上patch?
举例,给vsftpd服务器源码打上补丁
cd vsftpd-2.0.1
patch -p1 -b < patchfile
开关说明:
-p1 表示patch中必须去除一级目录前缀
-b 表示patch前备份原始文件
T24. 如何生成补丁文件?
假设有文件origfile,经过修改变为destfile
那么如何根据origfile和destfile的区别生成补丁呢?
diff -u origfile destfile > patchfile
如果是两个目录进行比较,那么需要使用
diff -urN origdir destdir > patchfile
注意: -N选项视新文件为空文件
T25. 如何通过http协议访问svn仓库?
使用apache2, 加载mod_dav.so和mod_dav_svn.so两个模块
假设你的svn仓库父目录为/srv/svnroot,如下配置即可
<Location /svn>
DAV svn
SVNParentPath /srv/svnroot
</Location>
重启apache2,使用svn co http://localhost/svn/repos 即可checkout仓库repos中的文件
注意:
1. 如果无法通过http commit,报告这样的错误
svn: Can't open activity db: APR does not understand this error code
需要将/srv/svnroot/repos/dav目录的访问权限改写为0777
2. 如果提示对“%$s”的方法 %$s 失败: 403 Forbidden (http://localhost)错误
则查看apache2的error.log,并确认dav_svn的配置中
LimitExcept GET PROPFIND OPTIONS REPORT是被注释掉的
3. 如果需要限制用安全链接访问版本库,则在Location配置选项中加入
SSLRequireSSL
T26. 如何启用Apache的https安全协议?
参考资料:
* SSL Certificates HOWTO
* Linux Apache SSL PHP/FI frontpage mini-HOWTO
* svn-book.pdf R1876
* Professional LAMP - Linux, Apache, MySQL, & PHP5 Web Development 2006.pdf
1. 编译或者下载apache2 的mod_ssl.so模块
2. 使用openssl的工具生成供您的站点使用的服务器证书和服务器公私钥
利用openssl库提供的工具CA.pl,位于/usr/lib/ssl/misc. 这里讲述自身构建CA,然
后用该CA来签名证书的过程,当然也可以提交给其他CA机构来签名认证
2.1 先生成CA以及相关的文件
$ CA.pl -newca
按照命令提示,依次输入CA的私钥密码\Country Name\Province Name\Locality Name
\Organization Name\Unit Name\Common Name\Email Address\A challenge password\
optional company name, 提示A challenge password\optional company name可以不
填.最后因为CA需要给自己签发证书,所以还得填些最开始时输入的CA的私钥密码.
在当前目录下会生成demoCA的目录,内含若干文件
2.2 再生成证书申请文件
$ CA.pl -newreq
按照命令提示,依次输入待申请证书的私钥密码\Country Name\Province Name\
Locality Name\Organization Name\Unit Name\Common Name\Email Address\
A challenge password\optional company name,最后两项亦可不填.
在当前目录下会生成证书申请文件newreq.pem和私钥文件newkey.pem
2.3 再用2.1步生成的CA为申请文件签名,生成证书
$ CA.pl -sign
按照命令提示,输入CA的私钥密码并确认签名,并提交到CA的签名数据库中,得到签名后的
证书文件newcert.pem
2.4 裁减证书,去除证书的私钥密码
证书只需要包含机器可读的部分,此外文字描述部分可以去掉,方法如下
$ openssl x509 -in newcert.pem -out www.crt
证书的私钥提供给Apache使用,要求去除私钥的密码,方法如下
$ openssl rsa -in newkey.pem -out wwwkey.pem
该命令需要输入私钥密码,之后生成的私钥wwwkey.pem中就剥去密码了
3. 配置apache2,使用签名的证书www.crt与私钥wwwkey.pem
添加对443端口的侦听
Listen 443 https
加载mod_ssl.so模块
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
配置https的虚拟服务器
NameVirtualHost *:443
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
SSLCertificateFile /etc/apache2/ssl/www.crt
SSLCertificateKeyFile /etc/apache2/ssl/wwwkey.pem
SSLEngine On
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
注意:
* NameVirtualHost *:443 后面要带上443这个端口,普通80端口的VirtualHost要写为
NameVirtualHost *:80
* VirtualHost总配置选现中写为 _default_:443,表示侦听任何网络接口上的443端口
* 如果先前80端口的站点配置为 VirtualHost *,将它改写为VirtualHost _default_:80
* SSLCertificateFile 指向证书文件的路径
* SSLCertificateKeyFile 指向证书对应的私钥文件路径
重新启动apache2,使用curl测试
curl https://localhost/
* SSLEngine On 启用ssl连接
T27. VMWare Guest操作系统中时钟总是不准确,比如Guest OS为WinXP,时钟总是比Host OS要慢?
安装vmware tools套件,然后复选Time synchronization between the virtual machine
and the host operating system
对于win, 在VMWare Workstation中选择Install VMware Tools,然后在Guest Win OS中会自动
出现虚拟驱动器,打开可以看到安装程序
对于lin, 在VMWare Workstation中选择Install VMware Tools,然后在Guest Lin OS中会出现
/dev/hdc设备,将此文件自动挂载,即可实现
T28. 在更新Linux Kernel后,VMWare无法使用了?
Ubuntu的内核更新到2.6.20-16-386之后,VMWare Workstation活VMWare Player都无法使用了,
需要重新编译内核模块vmnet 和vmmon,使用vmvmware-config.pl工具,但这个工具依赖于内核
版本,
1. 下载vmware-any-any-update110.tar.gz
http://knihovny.cvut.cz/ftp/pub/vmware/
2. 解压,运行runme.pl,程序会自动重新编译vm内核模块
3. 再运行VMWare Workstation 或 VMWare Player OK
T29. VMWare如何使用远程管理接口,如果自动运行客户操作系统?
安装VMWare Server ,当前版本为1.0.2, 它即可桌为虚拟机服务器,自动运行客户操作系,
通过网络从远程开启,关闭,操作客户操作系统.
提示: VMWare Server Console的注册序列号
9AXPN-Y0QD0-24K7M-40K0M
98WMH-Y2PF1-2F7EM-4022D
注意: 1.0.2版本有个小BUG,GUEST OS通过网络访问HOST OS上资源速度很慢,有时还达不到
1K/s,但HOST OS访问GUEST OS上的速度正常,比如GUEST OS为win,开放文件共享,从HOST OS
Ubuntu上Copy共享文件,速度正常.
T30. 如何创建临时文件,而保证文件名不重复?
Bash中执行 mktemp 可以得到文件名
或者
通过<stdlib.h>中调用用户接口
char *mktemp(char *template);
T31. 使用wget下载html文件中的所有链接文件?
可以通过wget的递归下载功能,如下
wget -r -l 1 http://www.sipfoundry.org/pub/sipX/3.6/CentOS/4/RPM/
说明:
-r 代表递归下载
-l num 代表递归的深度
-p 代表仅下载页面必要的元素
T32. 如何创建一个tap接口供虚拟机VirtualBox使用?
对Debian/Ubuntu系统可参考VirtualBox的User Manual
1. 配置tap0接口,在/etc/network/interfaces文件中增加
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user robbie
T33. 如何在linux下打开中文window下用zip压缩的文件?
使用unzip,但是要加上编码的选项-O
unzip -O cp936 zip_file_name
说明:
cp936是中文windows的默认编码
About Development
-----------------
D1. Makefile中的.PHONY目标有什么作用?
写法
.PHONY: TARGET
它让.PHONY依赖的目标TARGET都能执行它的规则,而不关TARGET文件是否存在.
http://blog.csdn.net/dadoneo/archive/2010/10/25/5965088.aspx
Posted on 2011-01-07 02:05 leekiang 阅读(866) 评论(0) 编辑 收藏 所属分类: LINUX,UNIX
About Shell
-----------
Q1.用户登录到Linux机器,系统会启动login子程序处理用户登录请求,如何自动设置用户环境变量?
比如 PATH,CVS_RSH等等
编辑/etc/profile 和 $HOME/.bash_profile $HOME/.bash_login $HOME/.profile
当退出登录时,shell会执行 ~/.bash_logout
Q2.如何快速执行历史命令?
fc -s [cmd] 执行编号为cmd的命令,缺省的话,执行最近1条指令
可以使用alias r='fc -s' 登记1个命令别名,减少键击次数
注:
fc - Fix Command
可以用bash内建的命令查找功能,在命令输入状态下输入C-R,则再输入命令,即可出现
与当前输入字符串匹配的命令列表
Q3.如何快速查看一个用户的id和组id?
输入id 即可查看当前用户的id和组id(包括数字和名称)
输入id [USERNAME] 即可查看 USERNAME的id和组id(包括数字和名称)
Q4.如何查看OS打开的所有文件句柄?
输入lsof,可查看所有的打开文件
输入lsof /path/of/file, 可查看/path/of/file目录中被打开的文件
Q5.如何转化不同编码的文件?
例如 readme.txt 是GB2312编码的,Console只支持utf-8的,要将readme.txt
打印处理,如果不作编码转换,必然出现乱码.
可以用iconv工具进行转化
cat readme.txt| iconv -f gb2312 -t utf-8
Q6.如何在当前的shell会话上下文中设置环境变量?
将设置指令写如一个特定的bash文件,如setup.sh
执行 . setup.sh 命令
注: . 也是bash的一个内建指令
Q7.如何使用Bash的花括号自动扩展?
假设我们要打印出从a到z的26个字母,那么通常做法是从a循环到z,逐个输出,但我们知道
Linux下这样的轮子大多数已经被人发明过了,Bash中就有这样的工具
输入 echo {a..z}
扩展应用:
a) 当我们要列出多个目录下的文件时,这能给我们帮助
ls /path/{dir1, dir2}
b) 当我们要改变多个目录的属主时
chown /path/{ex?.?*, how_ex}
Q8.如何把一个命令的输出赋值给某一个特定的变量?
使用语句
var1=$(command)
或者反引号
var1=`command`
Q9. Bash中如何用快捷键键?
输入 CTRL-W 删除左边文本,直至遇到空格 ( vim 中 dB )
输入 CTRL-K 删除从光标位置到行尾的文本 (vim 中 d$ )
输入 CTRL-Y 粘贴剪贴板中的文本至光标位置 (vim 中 p)
输入 CTRL-r或 CTRL-s, 可匹配增量匹配当前的字, 显示出候选的命令.如果有多个匹配
结果,则输入C-r向后搜索,输入C-s向前搜索.
Q10. 如何让Bash中在sudo/man等命令时也会自动补全命令?
可利用Bash中的Programmable Completion Builtins功能,具体语法见
INFO BASH :: Command Line Editing :: Programmable Completion
比如要让man 具备自动补全的功能,则这么写
complete -F _man $filenames man
_man 函数会被执行,请求所有可能补全的值写在COMPREPLY数组中
Q11. Bash中如何Use Here Document?
使用语法
VAR=<<"EOF"
Some here document
EOF
注: 详见Bash Info - 3.6.5 Here Documents
- read input from the current source until a line containing only WORD (with no trailing
-blanks) is seen.
Q12. Bash中[[和[有何不同?
[[是复合命令,它可以构成测试用的表达式,表达式可以是bash中的条件表达式的任一种,
单目和双目运算的均可.可以用! && || 这样的逻辑运算符.
[是内建命令,同样也是用来测试表达式,表达式可以是Bash条件表达式中的任一种.
可以用! -a -o 这样的逻辑运算符.
两者是除了逻辑运算符不同之外,并无明显区别.
About Man/Info
---------------
Q1.用户手册将命令划分为不同的类别,如何查看分属不同Section的命令?
man 7 locale # 7代表Section 号
About X
--------
X1.如何获得系统中所有的字体?
输入指令 xlsfonts
X2. 如何在ssh登录到远程机器上后在本地运行X应用程序?
假设你的本地主机HostA,远程主机HostB,那么你要远程连接到HostB上运行X应用,显示在
HostA的屏幕上.
1. 配置HostA上 ~/.ssh/config 文件
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
2. ssh HostB
3. 执行X应用程序
注意:必须在HostA上开通X11的转发而不是HostB.
X3. 如果使用第2个屏幕-投影仪?
在Ubuntu 7.04以上中自动支持投影仪,即插即用,但需要插上VGA的接口,重新启动系统后方可使用
在Ubuntu 7.10版本接上投影仪后,第2个屏幕无输出,要LOGOUT后才有输出
About Maintain
--------------
R1. 目录名字不要包含大写字符,尽量少包含中文字符.
1. 中文文件名在Unix/Linux下不易输入,需要X/输入法的支持.
2. 如果采用Apache的文件访问接口,非Latin字符大多需要URL转义,这对于HTML作者不友好
R2. 请及时清理一些临时,系统日志文件,减少其对存储空间的占用,也是加快程序运行速度
1. /tmp
2. /var/log
R3. 不要直接用root用户身份登录系统
如果你不想让你系统中的重要文件因为你的操作不当在倾刻间消失,那就用吧.
有人用chown命令把整个操作系统中文件的用户/组属性改成了asterisk:asterisk
也有人曾经把/var, /etc两个目录删除,系统必须重装.
R4. 为了有助于确保Web Mail您的密码和帐户的安全,请在每个会话结束时注销帐户。
About System
------------
S1. Linux在boot起来之后,先调用/sbin/init,它是其他所有进程的父进程
1.启动时先运行boot level master script
2.执行硬件初始化脚本
3.执行run level master script,运行级别定义在/etc/inittab中
每级的脚本放在/etc/init.d/rc<X>.d中
4.到最后用户看到的即是mingetty登录界面
S2. Linux TTY这种用户接口的设计思想
用户通过本地键盘或者网络 -->命令 -->TTY -->Shell Interpreter
--> Excute Cmd --> Output --> TTY --> 本地内存或者网络 -->显示器输出
优点: 可以用不同形式的终端登录,比如本地键盘,远程网络,Modem,只有TTY与用户
之间存在某种连接即可
S3. Linux如何同一张网卡如何支持多个IP?
1. 配置 虚拟接口
ifconfig eth0:0 192.168.12.240
ifconfig eth0:0 netmask 255.255.255.0
2. 增加一个路由表
route add -net 192.168.12.0 netmask 255.255.255.0 dev eth0:0
3. 增加一个缺省的路由表
route add default gw 192.168.12.168
S4. 如果Home分区中空间不够,但是/usr分区中留有较大的空间,如何平衡利用这两空间?
目标: 1.通过Home分区文件的形式读写数据
2.实际的数据确是存储在/usr/分区中
利用符号链接的方式,在Home分区中建立一个符号链接目录,指向
ln -s /usr/local/voip ~/project/voip
S5. Apache 使用UserDir模块时,~username形式访问,Apache告之禁止访问?
比如/home/robbie 它具有drwx------属性,必须将它改为
drwxr-xr-x属性,Apache服务器才可打开用户目录
S6. 如何添加自定义的全局的初始化动作?
比如要添加这两个别名命令fcc,和fpp统计.c和.cpp源文件数目,
可在/etc/bash.bashrc.local中添加如下脚本
alias fcc='ll -R | grep "[:alpha:]*[.]c$" | nl |less'
alias fpp='ll -R | grep "[:alpha:]*[.]cpp$" | nl |less'
注:
Linux Kernel 共有7454个源文件
S7. 如何查看系统中打开某个目录/文件的进程?
fuser -v FILE_TO_LOOK_UP
S8. 如何让普通用户以超级用户身份执行命令,而不需要其输入密码?
配置/etc/sudoers,按照如下方式指定
asterisk ALL = NOPASSWD: /sbin/shutdown
注:
ALL是代表任何网络主机.
S9. 如何查看Linux系统运行了多长时间?
输入
uptime
输出
7:00pm up 3 days 9:49, 11 users, load average: 1.28, 1.29, 1.26
S10.如何查看Linux系统运行状态信息,比如cpu/内核版本/启动参数/IO口?
cat /proc/*
S11.如何备份文件?
使用cp命令,如
cp src_files dst_files
注意:
SuSE 9.3 cp 的版本为 5.3.0,对于存在相同文件的覆盖操作,默认动作是覆盖
Linux robbie 2.6.11.4-20a-default #1 Wed Mar 23 21:52:37 UTC 2005 i686 i686 i386 GNU/Linux
CentOS 分发版
Linux asterisk1.local 2.6.9-11.EL #1 Wed Jun 8 16:59:52 CDT 2005 i686 i686 i386 GNU/Linux
CentOS SMP的版本
Linux SVC9000.local 2.6.9-11.ELsmp #1 SMP Wed Jun 8 17:54:20 CDT 2005 i686 i686 i386 GNU/Linux
S12. 如何给系统增加一个路由?
存在如下的一条路由
default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
添加一条路由
route add default 192.168.12.168
S13. 如何使用NFS?
服务器端设置 (以CentOS为例)
A. 在目标主机上设置NFS 共享目录,修改/etc/exports
增加如下条目:
/mnt/asterisk 192.168.12.0/255.255.255.0(rw)
B. 启动NFS服务
service nfs start
如果NFS服务已经启动,那么重读exports
exportfs -ra
客户端设置 (2.2.18以上内核内建支持NFS)
手工mount:
mount 192.168.12.238:/mnt/asterisk /path/of/client/nfs
自动mount:
修改 /etc/fstab,增加一条
192.168.12.238:/mnt/asterisk /path/of/client/nfs nfs rw 0
然后执行: mount -a -t nfs
注:
1. 缺省,在服务器端的共享目录的访问权限即为mount后的访问权限
2. nfs服务依赖于portmap,启动nfs前portmap必须先启动
S14.如何制作一张可以启动的CD-ROM?
1. 你需要具备以下这些文件, isolinux目录以及目录中的内核,配置,Ramdisk镜像等
可从Redhat安装盘上获得
2. 将isolinux目录拷贝至你的ISO光盘的根目录
3. 使用工具mkisofs
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T \
-input-charset utf-8 /path/of/your/isoroot
参考:
http://syslinux.zytor.com/iso.php
注:
1. 制作SVC ISO文件耗时1m45.494s 43.170s(P4,CentOS 4.1)
2. 可以使用mkisofs将多个redhat安装盘合并为一个dvd的安装盘
使用到的开关有: -graft-points Psyche-i386-disc1
溶合的项目有 .discinfo=.discinfo isolinux/=isolinux
RedHat/=shrike-i386-disc2/RedHat RedHat/=shrike-i386-disc3/RedHat
docs/=Psyche-docs
S15. 如何刻录一张CD-R 或者CD-RW?
* 对于CD-R,假设要刻录的是mydata.iso文件,使用
cdrecord -v speed=4 dev=0,0,0 -data mydata.iso
一般,cdrecord会使用TAO mode for single session模式.
* 对于CD-RW,先要将CD-RW盘的数据内容擦除
cdrecord -v speed=2 dev=0,0,0 -blank=fast
然后和CD-R一样,再使用刻录指令.
注:
1. 参数dev=0,0,0是刻录设备的地址,可以如下命令得到
cdrecord -scanbus
2. 需要的话,在dev参数上加 ATAPI指示符,如
cdrecord -v speed=8 dev=ATAPI:0,0,0 -data boot.iso
3. 一般刻录一张 560M的CD-ROM,需925.050s
S16. 如何在单一终端中执行多个任务,并在任务之间切换?
举例:
A. vim hello.txt 编辑一个文档
B. 中途用户想退出,查看系统的CPU 运行情况
按 CTRL-Z,挂起当前vim任务;输入top
C. 用户在top任务中又想看一下硬盘的分区信息
按 CTRL-Z,挂起当前top任务;输入fdisk /dev/hda
D. 此时当前运行任务为fdisk,挂起的有2个:vim和top
在fdisk中按 CTRL-Z一样挂起它
输入: jobs -l
系统输出:
[3]+ 21731 Stopped vim hello.txt
[4] 21805 Stopped top
[5]- 21827 Stopped fdisk /dev/hda
[]中的数字代表后台任务编号,你可以根据它在任务间来回切换
输入 fg 1 或 fg vim 回到vim任务中,继续执行
输入 fg 2 或 fg top 回到top任务中
输入 fg 3 或 fg fdisk 回到fdisk任务中
S17. 如何快速查看Linux系统的分区信息?
输入 fdisk -lu /dev/hdx
可看到指定硬盘设备的分区信息.
S18. 我的FTP服务或者Web服务别人无法访问到?
很可能是你的防火墙做了限制,将你要提供的服务从禁用列表中去除即可.
S19. 软件A依赖于与库B,我安装了B,可A依然提示库B找不到?
有一种可能性,即库B不是装在系统的库文件目录/lib和/usr/lib,譬如安装于
/usr/local/lib下,这样就找不到
办法:
1 修改安装路径为/lib
2 或将/usr/local/lib添加到系统库目录中
* 编辑 /etc/ld.so.conf
加入一行 /usr/local/lib
* 重载库 sudo ldconfig
S20. 某些系统服务如mysql数据库未在启动时加载,如何配置启动时加载?
使用/sbin/chkconfig工具,如下
/sbin/chkconfig --level 2345 mysql on
就可使mysql服务器在2345级别启动时自动运行
S21. PHP许多模块未加载,如何加载它们?
修改/etc/php.ini ,比如你要加载session.so,应写为
extension=session.so
S22. 如何监控系统从开机到出现登录界面所使用的时间以及系统的运行状态?
安装bootchart软件包,之后,每次系统启动完成后会在/var/log/bootchart目录下生成
监测图,PNG格式的,里面包含着启动耗费时间、每一个服务的起止时间.
S23. Ubuntu下如何支持中文输入?
$sudo apt-get install scim scim-modules-socket scim-modules-table scim-pinyin scim-tables-zh scim-input-pad
$sudo sh -c " echo 'export XMODIFIERS=@im=SCIM ; export GTK_IM_MODULE="scim" ; export QT_IM_MODULE="scim" ; scim -d ' > /etc/X11/Xsession.d/95xinput "
$sudo chmod +755 /etc/X11/Xsession.d/95xinput
# 注:在Dapper下省略后两步
#注:在Dapper里也可以直接选择系统->系统管理—>语言支持(language support)勾选Chinese 就会自动安装和配置scim
分解一下看看:
安装scim输入法平台
S24. NFS服务起来后,在客户端mount一直提示"mount: RPC: Timed out\n"?
表现:
* 查了portmap, nfs都服务端都没有问题
* showmount -e nfs_server也没有问题
* 就是在mount -t nfs nfs_server:/path /local/path时出"mount: RPC: Timed out\n"的错误
解决: 路由可能是原因
出现这种问题,在查遍了许多文章还没有结果的情况下,请查一下服务器的网络配置,特别小心多网卡
情况下的路由,如果你的缺省路由类似这样
default 220.250.26.1 0.0.0.0 UG 0 0 0 eth1
那么很可能路由是罪魁祸首.
S25. 双网卡如何共享网络连接?
参考 nat.sh
S26. 如何解决SCIM和Open Office不兼容,导致Open Office异常退出的问题?
问题描述
1.系统环境中设置了scim为输入法
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
2.在KDE应用比如Konsole中可以正常输入中文,但打开open office却异常退出,
打开其它应用Mozilla Thunderbird,也是异常退出
这里也有描述 https://bugs.launchpad.net/openoffice/+bug/103079
原因
scim与GTK2的应用程序存在二进制的兼容性问题,scim是c++语言实现的,而gtk2
应用比如openoffice, moizlla Thunderbird是采用C语言实现的,在加载输入法
时会导致应用程序内存分配错误.
解决办法
1. 安装scim-bridge模块
http://www.scim-im.org/projects/scim_bridge
2. 修改GTK应用程序的输入法配置
export GTK_IM_MODULE=scim-bridge
3. 登出桌面系统,再登录,即可正常打开ooffice
About Toolkit
-------------
T1. 使用grep查找.gz文件中包含特定字符串的行?
举例,有个文件,ls-lrR.txt.gz, 待查找的字符串为开头为rms,结尾为ogg的文件,可以用下列方式
gunzip -c ls-lrR.txt.gz | grep 'rms-.*ogg'
注: *NIX环境下, .可代表任何字符, *代表任意匹配,+代表至少出现1次,?代表至多出现1次
T2. Windows 2000运行有telnet服务,这样可以使用linux的konsole/或者其他终端模拟器连接windows主机.
telnet pc.window.address
T3. 如何查看PDF/ps格式的文档?
gs ps_file_name3
gs pdf_file_name
Note: gs is PostScript and PDF language interpreter and previewer
T4. 如何跟踪IP报文的路径?
Linux下,输入traceroute HOST_NAME|IP
Win32下,输入tracert HOST_NAME|IP
T5. 如何查看内核的路由表?
Linux下,输入/sbin/route
Win32下,输入route PRINT
T6. 如何内核中的网络接口卡的物理地址?
Linux下,输入/sbin/arp
Win32下,输入 arp -a
T7. 如何实现按1个快捷键即输入"年-月-日 星期x"?
可以使用map命令,将某一个快捷键变为命令输入
参考:map <F2> ggA<C-R>=strftime("%Y-%m-%d %A")<CR><Esc>
T8. 如何使用Shell工具链统计一个目录下所有.c的原文件数目?
分析:.c原文件的特征是以.c字符为结尾,可以使用正则表达是[.]c表示
ll -R | grep "[:alpha:]*[.]c$" | nl |less
正则表达式 ([0-9]{5,}) 代表由5位数字构成的单词,()是单词控制字符
T9. 如何高效的使用FTP客户端工具?
lftp 工具可以完美的支持,它支持提前信息获取,Tab目录或文件补齐.
lftp 支持下载进度指示,%形式,下载速率.
lftp 支持断线后自动恢复连接.
lftp 在绝大多数Linux分发版中都有安装.
T10. SSH远程登录工具,认证过程解析?
* 客户登录到远程主机,必须提供identity
* SSH服务器认证这个identity
* Host Key 和 Public Key的关系
* Challenge = a random number, encrypted by user's public key
T11. 如何快速的执行计算命令?
比如,计算硬盘的大小,BLOCK数18335302,每个BLOCK为512字节
echo "512*18335302" | bc
T12. vsftpd/wu-ftpd如何启用匿名ftp服务?
对于vsftpd,编辑/etc/vsftpd.conf,确认开关
anonymous_enable=YES
注:
1. 匿名ftp用户登录所见目录对应于系统中ftp用户的HOME目录,一般为/var/ftp,可变更
2. ftp用户的HOME目录owner:group要设为root:root,用户才通过匿名访问,否则有500错误
T13. 如何快速得到文件系统中各个目录对硬盘的占用情况?
在根目录下输入 du -h --max-depth=1
T14. 如何快速查看指定的man文件?
输入 man -l /path/of/your/man/file
T15. 如何查看一个IP段范围内的IP地址与前缀?
利用 ipcount命令,比如查看起始地址为 192.168.3.2
数量为100的所有ip地址前缀
输入
ipcount 192.168.3.2+100
T16. VsFtpd服务器登录时,每个文件的owner和group都显示为ftp,
因为权限受限,无法上传,怎么办?
编辑/etc/vsftpd.conff
设置 hide_ids=NO
T17. Lynx文本浏览器如何实现文本行的滚动?
输入 CTRL-N 向下翻动两行
输入 CTRL-P 向上翻动两行
T18. 如何抓取网络接口中传输的数据报文?
tcpdump -i interface
T19. 如何查看一台主机的IP地址?
host name 即可查看name对应的IP地址
T20. 如何启用NAT?
192.168.3.0/24局域网主机通过WAN连接网络
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to 218.67.79.7
echo 1 > /proc/sys/net/ipv4/ip_forward
T21. 如何在命令行下查看word文档?
安装antiword这个工具包,输入
antiword wordfile
这个工具就会将word文档内容输出到标准输出。
注:
可以使用mc这个外包shell调用antiword,即通过查看功能
T22. 如何快速的排序一个文本文件?
执行
sort -u unsortedfile -o sortedfile
T23. 如何给源代码打上patch?
举例,给vsftpd服务器源码打上补丁
cd vsftpd-2.0.1
patch -p1 -b < patchfile
开关说明:
-p1 表示patch中必须去除一级目录前缀
-b 表示patch前备份原始文件
T24. 如何生成补丁文件?
假设有文件origfile,经过修改变为destfile
那么如何根据origfile和destfile的区别生成补丁呢?
diff -u origfile destfile > patchfile
如果是两个目录进行比较,那么需要使用
diff -urN origdir destdir > patchfile
注意: -N选项视新文件为空文件
T25. 如何通过http协议访问svn仓库?
使用apache2, 加载mod_dav.so和mod_dav_svn.so两个模块
假设你的svn仓库父目录为/srv/svnroot,如下配置即可
<Location /svn>
DAV svn
SVNParentPath /srv/svnroot
</Location>
重启apache2,使用svn co http://localhost/svn/repos 即可checkout仓库repos中的文件
注意:
1. 如果无法通过http commit,报告这样的错误
svn: Can't open activity db: APR does not understand this error code
需要将/srv/svnroot/repos/dav目录的访问权限改写为0777
2. 如果提示对“%$s”的方法 %$s 失败: 403 Forbidden (http://localhost)错误
则查看apache2的error.log,并确认dav_svn的配置中
LimitExcept GET PROPFIND OPTIONS REPORT是被注释掉的
3. 如果需要限制用安全链接访问版本库,则在Location配置选项中加入
SSLRequireSSL
T26. 如何启用Apache的https安全协议?
参考资料:
* SSL Certificates HOWTO
* Linux Apache SSL PHP/FI frontpage mini-HOWTO
* svn-book.pdf R1876
* Professional LAMP - Linux, Apache, MySQL, & PHP5 Web Development 2006.pdf
1. 编译或者下载apache2 的mod_ssl.so模块
2. 使用openssl的工具生成供您的站点使用的服务器证书和服务器公私钥
利用openssl库提供的工具CA.pl,位于/usr/lib/ssl/misc. 这里讲述自身构建CA,然
后用该CA来签名证书的过程,当然也可以提交给其他CA机构来签名认证
2.1 先生成CA以及相关的文件
$ CA.pl -newca
按照命令提示,依次输入CA的私钥密码\Country Name\Province Name\Locality Name
\Organization Name\Unit Name\Common Name\Email Address\A challenge password\
optional company name, 提示A challenge password\optional company name可以不
填.最后因为CA需要给自己签发证书,所以还得填些最开始时输入的CA的私钥密码.
在当前目录下会生成demoCA的目录,内含若干文件
2.2 再生成证书申请文件
$ CA.pl -newreq
按照命令提示,依次输入待申请证书的私钥密码\Country Name\Province Name\
Locality Name\Organization Name\Unit Name\Common Name\Email Address\
A challenge password\optional company name,最后两项亦可不填.
在当前目录下会生成证书申请文件newreq.pem和私钥文件newkey.pem
2.3 再用2.1步生成的CA为申请文件签名,生成证书
$ CA.pl -sign
按照命令提示,输入CA的私钥密码并确认签名,并提交到CA的签名数据库中,得到签名后的
证书文件newcert.pem
2.4 裁减证书,去除证书的私钥密码
证书只需要包含机器可读的部分,此外文字描述部分可以去掉,方法如下
$ openssl x509 -in newcert.pem -out www.crt
证书的私钥提供给Apache使用,要求去除私钥的密码,方法如下
$ openssl rsa -in newkey.pem -out wwwkey.pem
该命令需要输入私钥密码,之后生成的私钥wwwkey.pem中就剥去密码了
3. 配置apache2,使用签名的证书www.crt与私钥wwwkey.pem
添加对443端口的侦听
Listen 443 https
加载mod_ssl.so模块
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
配置https的虚拟服务器
NameVirtualHost *:443
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
SSLCertificateFile /etc/apache2/ssl/www.crt
SSLCertificateKeyFile /etc/apache2/ssl/wwwkey.pem
SSLEngine On
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</Directory>
ErrorLog /var/log/apache2/error.log
</VirtualHost>
注意:
* NameVirtualHost *:443 后面要带上443这个端口,普通80端口的VirtualHost要写为
NameVirtualHost *:80
* VirtualHost总配置选现中写为 _default_:443,表示侦听任何网络接口上的443端口
* 如果先前80端口的站点配置为 VirtualHost *,将它改写为VirtualHost _default_:80
* SSLCertificateFile 指向证书文件的路径
* SSLCertificateKeyFile 指向证书对应的私钥文件路径
重新启动apache2,使用curl测试
curl https://localhost/
* SSLEngine On 启用ssl连接
T27. VMWare Guest操作系统中时钟总是不准确,比如Guest OS为WinXP,时钟总是比Host OS要慢?
安装vmware tools套件,然后复选Time synchronization between the virtual machine
and the host operating system
对于win, 在VMWare Workstation中选择Install VMware Tools,然后在Guest Win OS中会自动
出现虚拟驱动器,打开可以看到安装程序
对于lin, 在VMWare Workstation中选择Install VMware Tools,然后在Guest Lin OS中会出现
/dev/hdc设备,将此文件自动挂载,即可实现
T28. 在更新Linux Kernel后,VMWare无法使用了?
Ubuntu的内核更新到2.6.20-16-386之后,VMWare Workstation活VMWare Player都无法使用了,
需要重新编译内核模块vmnet 和vmmon,使用vmvmware-config.pl工具,但这个工具依赖于内核
版本,
1. 下载vmware-any-any-update110.tar.gz
http://knihovny.cvut.cz/ftp/pub/vmware/
2. 解压,运行runme.pl,程序会自动重新编译vm内核模块
3. 再运行VMWare Workstation 或 VMWare Player OK
T29. VMWare如何使用远程管理接口,如果自动运行客户操作系统?
安装VMWare Server ,当前版本为1.0.2, 它即可桌为虚拟机服务器,自动运行客户操作系,
通过网络从远程开启,关闭,操作客户操作系统.
提示: VMWare Server Console的注册序列号
9AXPN-Y0QD0-24K7M-40K0M
98WMH-Y2PF1-2F7EM-4022D
注意: 1.0.2版本有个小BUG,GUEST OS通过网络访问HOST OS上资源速度很慢,有时还达不到
1K/s,但HOST OS访问GUEST OS上的速度正常,比如GUEST OS为win,开放文件共享,从HOST OS
Ubuntu上Copy共享文件,速度正常.
T30. 如何创建临时文件,而保证文件名不重复?
Bash中执行 mktemp 可以得到文件名
或者
通过<stdlib.h>中调用用户接口
char *mktemp(char *template);
T31. 使用wget下载html文件中的所有链接文件?
可以通过wget的递归下载功能,如下
wget -r -l 1 http://www.sipfoundry.org/pub/sipX/3.6/CentOS/4/RPM/
说明:
-r 代表递归下载
-l num 代表递归的深度
-p 代表仅下载页面必要的元素
T32. 如何创建一个tap接口供虚拟机VirtualBox使用?
对Debian/Ubuntu系统可参考VirtualBox的User Manual
1. 配置tap0接口,在/etc/network/interfaces文件中增加
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user robbie
T33. 如何在linux下打开中文window下用zip压缩的文件?
使用unzip,但是要加上编码的选项-O
unzip -O cp936 zip_file_name
说明:
cp936是中文windows的默认编码
About Development
-----------------
D1. Makefile中的.PHONY目标有什么作用?
写法
.PHONY: TARGET
它让.PHONY依赖的目标TARGET都能执行它的规则,而不关TARGET文件是否存在.
http://blog.csdn.net/dadoneo/archive/2010/10/25/5965088.aspx