1. 在单个目录下创建目录树
$mkdir -p dir1/dir2/dir3 //在当前工作目录下创建了一个简单目录树
$mkdir -p project/{bin, doc, src/{part1, part2, part3} , ...} //创建一个复杂的目录树
2. 直接解压到指定目录,不必移动存档
$tar xzvf -C /tmp/a/b/c rc.tar.gz
3. 将命令与控制操作符组合使用(&&操作符和||操作符)
a) 在操作符两边的两个命令,仅当第一个命令返回0时才执行第二个命令,也就是第一个命令执行成功才执行第二个命令,用&&操作符
$cd /tmp/a/b/c && tar xzvf -C /tmp/a/b/c ~/src.tar.gz
b) 在操作符两边的两个命令,仅当第一个命令返回非0时才执行第二个命令,也就是第一个命令执行失败时才执行第二个命令,否则不执行第二个命令,用||操作符
$cd /tmp/a/b/c || mkdir -p /tmp/a/b/c
符合命令: $cd /tmp/a/b/c || mkdir -p tmp/a/b/c && tar -xzvf -C /tmp/a/b/c ~/src.tar.gz
4. 谨慎使用变量
5. 使用转义序列来管理较长的输入(反斜杠将较长的行延续到下一行)
$cd tmp/a/b /
> || mkdir -p tmp/a/b /
> && tar xzvf -C src.tar.gz
6. 在列表中对命令分组
a) 在subshell中运行命令列表(使用括号将命令列表包括在单个组中)。这样做将在一个新的subshell中运行命令,并允许重定向或整组命令的输出。当要在subshell中修改环境变量而不想在当前shell中修改环境变量时用此方法。
b) 在当前shell中使用命令列表(使用大括号将命令列表扩起来,并确保大括号与命令列表之间有空格,并且命令列表最后一个命令以分号结尾)
7. 避免通过管道将grep发送到wc -l来对数出进行记数,grep的-c选项提供了对与特定模式匹配的行的记数,并且一定比wc -l快
对于多个文件,带-c选项的grep返回每个文件的单独记数,而wc -l则是所有文件的总的记数
但是grep是针对行来说的,它不可以计算文件中的元素的个数,如果一行里有2个元素,则-c选项只会计算1次,但如果要算出一个文件中元素的总数还是得用wc -l选项,如下:
xiaoming and xiaozhang and me are students.
he and she are couples.
如执行以下命令:
$grep - c and myfile
输出2
但是如果执行:
$grep - o and myfile | wc - l
输出3
8. 停止对cat使用管道
错误的用法:把cat对文件的输出用管道 传送给grep,然后匹配其中的模式,纯粹是浪费时间,因为grep接受文件名作为参数,没有必要用cat输出
9. 使用awk查找特定字符串中的模式
10. xargs命令:把接收到的数据以行为单位将他们用空格符分隔,列成一行。可以将其转换为某个函数或命令的参数列表