《UNIX 高手的 10 个习惯》学习记录整理
平时养成一些好的操作习惯,克服不良的 UNIX 使用模式,提高效率。
原文链接: UNIX 高手的 10 个习惯 by Michael Stutz (stutz@dsl.org)
简要整理如下:
- 在单个命令中创建目录树。 (实用)
需创建多级目录时,使用 mkdir 的 -p 选项。且可用{ }创建多个同级子目录。如下:
mkdir -p project/{sub1/d1,sub2,sub3,sub4/{d1,d2,d3},sub5/d1/d1} - 更改路径;不要移动存档。
tar解包时,使用大写C参数指定解包到的位置,注意区分-c参数。
参考:tar命令的C参数 -
将命令与控制操作符组合使用。 (实用)
需执行多个命令时,无关联关系可用 ;
若第二个依赖于前一个命令执行结果,使用
&& (第一个成功才执行第二个命令) (零退出状态表示成功)
cd tmp/a/b/c && tar xvf ~/archive.tar
|| (第一个失败才执行第二个命令)
cd tmp/a/b/c || mkdir -p tmp/a/b/c -
谨慎引用变量。 (注意)
一般将变量调用包括在双引号中。否则可能出现 引用和非引用混淆。
条件:~ $ ls tmp/目录下两个文件:a b
VAR="tmp/*"
echo $VARtmp/a tmp/b (回显变量VAR)
echo "$VAR"tmp/* (回显变量VAR 替换后的串)
echo $VARa空 (回显变量VARa)
echo "$VARa"空 (回显变量VARa 替换后的串)
echo "${VAR}a"tmp/*a (VAR替换后组合成串)
echo ${VAR}atmp/a (替换后为变量tmp/*a,含通配符,仅有一项匹配) - 使用转义序列来管理较长的输入。 (实用)
使用反斜杠 \ 来将较长的行延续到下一行 - 在列表中对命令分组。
配合\ 实现较长的shell输入组合,各个子shell用括号括起来,个人感觉输得太长容易出错,用的不多。 - 在 find 之外使用 xargs。(实用)
xargs 传递空格分隔的列表,选项用法有 [-i replace-str],改名字可使用该选项
find可以配合xargs,exec,sed,awk等的操作来进行批量修改文件名find -type f -name "*.o" | xargs -i mv {} {}.test (使用-i参数,默认前面的输出用{}代替
find -type f -name "*.o" | xargs -I [] mv [] [].test (使用-I参数,可以指定前面的输出用什么代替,本例中使用[]代替前面的输出) find -type f -name "*.o" -exec mv {} {}.test \; (注意最后的\;不能少)
关于何时需使用xargs及使用与否的区别,见 管道是否需要使用xargs及其用法 - 了解何时 grep 应该执行计数——何时应该绕过。
grep "name" * -c 和 grep "name" * | wc -l 的区别
带-c选项的grep返回每个文件的单独计数,每行一个计数,而针对wc的管道则提供所有文件的组合总计数 - 匹配输出中的某些字段,而不只是对行进行匹配。(实用)
当只希望匹配输出行中特定字段 中的模式时,诸如awk等工具要优于grepls -l | grep Dec ls -l | awk '$6 == "Dec"'
- 停止对 cat 使用管道。
不要将cat的输出发送到grep以搜索单个文件的内容,grep接受文件名作为参数

浙公网安备 33010602011771号