数据流重导向(redirect)
名称 | 简称 | 代码 | 使用方式 |
标准输入(standard input) | stdin | 0 | <,将文件的数据作为其他命令的输入 <<,设定输入结束的字符串 |
标准输出(standard output) | stdout | 1 | >,覆盖方式将正确的数据输出 >>,累加方式将正确的数据输出 |
标准错误输出(standard error output) | stderr | 2 | 2>,覆盖方式将错误的数据输出 2>>,累加方式将错误的数据输出 |
数据流重导向,可以将命令的stdout或stderr分别输出到其他的文件或设备中去。
也可以将文件或设备作为stdin输入,作为命令的输入。
多条命令的执行顺序
$?代表命令执行结果,其值为0表示成功。
cmd1;cmd2 | 分号两边的命令没有相关性,只是按顺序执行 |
cmd1&&cmd2 | 1若cmd1执行完毕且正确执行($?=0),则执行cmd2 2若cmd1执行完毕且为错误($?<>0),则不执行cmd2 |
cmd1||cmd2 | 1若cmd1执行完毕且正确执行($?=0),则不执行cmd2 2若cmd1执行完毕且为错误($?<>0),则执行cmd2 |
cmd1&&cmd2||cmd3 | 1若cmd1的($?=0),则执行cmd2 2若cmd1的($?<>0),则执行cmd3 |
管线命令(pipe)
cmd1|cmd2 cmd1的stdout,作为cmd2的stdin
管线命令仅会处理stdout,对于stderr会予以忽略
管线命令必须能够接受前一个命令的数据成为stdin继续处理才行,也就是说cmd2是有限制的
具体管线命令
cut | 从每行中,取出符合条件的部分 |
grep | 在一行中,若有符合条件的部分,则输出此行。 支持正则表达式。 |
sort | 对文件中的多行进行排序 |
uniq | 若有重复的多行,只输出第一个 |
wc | 统计文件中的行,单词,字符,字节的数量 |
tee | 从stdin读取,并同时输出到stdout和文件 |
tr | 替换或删除一段文字 |
col | tab转换成多个空格,或man page转换为文本 |
join | 将两个文件中相同数据的两行,连接成一行 |
paste | 直接将两个文件的两行,合并成一行,并以tab分割 |
expand | 将tab转换成空格 |
split | 将一个大文件分割成几个小文件 可用 cat pieces* >> file 来恢复 |
xargs | 从stdin中,以空格或换行来分割出多个参数,给其他命令 许多命令不支持管线,可以通过xargs提供参数 |
减号- 代表stdin或stdout
将/home里面的文件都打包,打包的数据输出到stdout,第一个“-”代表stdout。
经过管线后,解压包的数据从stdin而来,第二个“-”代表stdin
$ tar -cvf - /home | tar -xvf -