UNIX 高手的10大习惯
参考自:
http://www.ibm.com/developerworks/cn/aix/library/au-badunixhabits.html
https://www.ibm.com/developerworks/cn/aix/library/au-unixtips/
1.1 习惯1:使用单个命令创建目录树
使用mkdir的-p选项可以创建父目录及其子目录。
清单1:使用一个命令来创建目录树
$ mkdir -p tmp/a/b/c
清单2:使用一个命令来创建复杂的目录树
$ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/start/a}
少数系统不支持该选项,我们可以使用mkdirhier:
$ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/start/a}
1.2 习惯2:不要移动存档
清单3:使用选项-C来解压缩.tar存档文件到指定目录
$ tar xvf -C tmp/a/b/c newarc.tag.gz
1.3 习惯3:将命令与控制操作符组合使用
$ cd tmp/a/b/c && tar xvf ~/archive.tar
$ cd tmp/a/b/c || mkdir -p tmp/a/b/c
$ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar
1.4 习惯4:谨慎引用变量
一般最好将变量调用包括在双引号中。
fhe@user-desktop:~$ ls project/ bin demo doc lib src fhe@user-desktop:~$ TEMP="project/*" fhe@user-desktop:~$ echo $TEMP project/bin project/demo project/doc project/lib project/src fhe@user-desktop:~$ echo "$TEMP" project/* fhe@user-desktop:~$ echo $TEMPbin
fhe@user-desktop:~$ echo "$TEMPbin"
fhe@user-desktop:~$ echo ${TEMP}bin project/bin fhe@user-desktop:~$ echo "${TEMP}bin" project/*bin fhe@user-desktop:~$ echo "${TEMP}"bin project/*bin fhe@user-desktop:~$ |
1.5 习惯5:使用转义序列来管理较长的输入
fhe@user-desktop:~$ cd tmp/a/b/c ||" > mkdir -p tmp/a/b/c &&" > tar vxf -C tmp/a/b/c ~/archive.tar |
1.6 习惯6:了解何时grep应该执行计数——何时应该绕过
避免通过管道grep发送到wc –l来输出行数计数。grep的-c选项提供了对与特定模式匹配的行的计数,并且一般要比通过管道发送到wc更快。
1.7 习惯7:匹配输出中的某些字段,而不只是对行进行匹配
当您只希望匹配输出行中特定字段时,诸如awk等工具要优于grep。
~/tmp $ ls -l /tmp/a/b/c | grep Dec -rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 root root 238 Dec 03 08:19 README -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar ~/tmp $ |
~/tmp $ ls -l | awk '$6 == "Dec"' -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rw-r--r-- 1 root root 238 Dec 03 08:19 README ~/tmp $ |
1.8 习惯8:停止对cat使用管道
grep的一个常见的基本用法错误是用过管道将cat的输出发送到grep以搜索单个文件的内容,这绝对是不必要的,纯粹是浪费时间,因为诸如grep这样的工具接受文件名作为参数。
fhe@user-desktop:~$ time cat ~/project/bin/src_apue.tar | grep and Binary file (standard input) matches
real 0m0.021s user 0m0.008s sys 0m0.000s fhe@user-desktop:~$ time grep and ~/project/bin/src_apue.tar Binary file ~/project/bin/src_apue.tar matches
real 0m0.005s user 0m0.004s sys 0m0.000s fhe@user-desktop:~$ |
1.9 习惯9:使用文件名自动完成功能
清单11.1 确定您的shell
$ echo $0
$ ps -p $$
一般情况下,系统提供默认的shell为bash。bash shell提供文件名自动完成功能,使用tab键。
1.10习惯10:最有效地利用正则表达式
序列 | 说明 |
脱字符 (^) | 匹配出现在首行的表达式 |
美元符号 ($) | 匹配出现在行末的表达式 |
反斜杠 (") | 取消下一个字符的特殊含义 |
方括号 ([]) | 匹配括起来的任一字符 |
[^ ] | 匹配除括起来的字符外的任一字符 |
句号 (.) | 匹配除行尾之外的任意单个字符 |
星号 (*) | 匹配零个或多个前驱字符或表达式 |
"{x,y"} | 匹配出现过x到y个和前面相同的内容 |
"{x"} | 精确匹配出现过x个和前面相同的内容 |
"{x,"} | 匹配出现过x个或更多和前面相同的内容 |