《UNIX 高手的 10 个习惯》学习记录整理

平时养成一些好的操作习惯,克服不良的 UNIX 使用模式,提高效率。
原文链接: UNIX 高手的 10 个习惯 by Michael Stutz (stutz@dsl.org)
简要整理如下:

  1. 在单个命令中创建目录树。 (实用)
    需创建多级目录时,使用 mkdir 的 -p 选项。且可用{ }创建多个同级子目录。如下:
    mkdir -p project/{sub1/d1,sub2,sub3,sub4/{d1,d2,d3},sub5/d1/d1}
  2. 更改路径;不要移动存档。
    tar解包时,使用大写C参数指定解包到的位置,注意区分-c参数。
    参考:tar命令的C参数
  3. 将命令与控制操作符组合使用。 (实用)
    需执行多个命令时,无关联关系可用 ;
    若第二个依赖于前一个命令执行结果,使用
    && (第一个成功才执行第二个命令) (零退出状态表示成功)
    cd tmp/a/b/c && tar xvf ~/archive.tar
    || (第一个失败才执行第二个命令)
    cd tmp/a/b/c || mkdir -p tmp/a/b/c

  4. 谨慎引用变量。 (注意)
    一般将变量调用包括在双引号中。否则可能出现 引用和非引用混淆。 
    条件: ~ $ ls tmp/ 目录下两个文件:a b
    VAR="tmp/*"
    echo $VAR tmp/a tmp/b (回显变量VAR) 
    echo "$VAR" tmp/* (回显变量VAR 替换后的串)
    echo $VARa 空 (回显变量VARa)
    echo "$VARa" 空 (回显变量VARa 替换后的串)
    echo "${VAR}a" tmp/*a (VAR替换后组合成串)
    echo ${VAR}a tmp/a (替换后为变量tmp/*a,含通配符,仅有一项匹配)

  5. 使用转义序列来管理较长的输入。 (实用)
    使用反斜杠 \ 来将较长的行延续到下一行
  6. 在列表中对命令分组。
    配合\ 实现较长的shell输入组合,各个子shell用括号括起来,个人感觉输得太长容易出错,用的不多。
  7. 在 find 之外使用 xargs。(实用)
    xargs 传递空格分隔的列表,选项用法有 [-i  replace-str],改名字可使用该选项
    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 \; (注意最后的\;不能少)
     find可以配合xargs,exec,sed,awk等的操作来进行批量修改文件名
    关于何时需使用xargs及使用与否的区别,见 管道是否需要使用xargs及其用法
  8. 了解何时 grep 应该执行计数——何时应该绕过。
    grep "name" * -c 和 grep "name" * | wc -l 的区别
    带 -c 选项的 grep 返回每个文件的单独计数,每行一个计数,而针对 wc 的管道则提供所有文件的组合总计数   
  9. 匹配输出中的某些字段,而不只是对行进行匹配。(实用)
    当只希望匹配输出行中特定字段 中的模式时,诸如 awk 等工具要优于 grep
    ls -l | grep Dec
    ls -l | awk '$6 == "Dec"'
  10. 停止对 cat 使用管道。
     不要将cat 的输出发送到 grep 以搜索单个文件的内容,grep接受文件名作为参数

 

posted @ 2016-02-27 02:26  xdargs  阅读(212)  评论(0)    收藏  举报