第七章 重定向
默认情况下:
- 标准输出和标准错误都连接到屏幕;
- 标准输入连接到键盘。
cat - 连接文件
sort - 排序文本行
uniq - 报道或省略重复行
grep - 打印匹配行
wc - 打印文件中换行符,字,和字节个数
head - 输出文件第一部分
tail - 输出文件最后一部分
>
- 重定向标准输出,例如:ls -l /usr/bin > ls-output.txt
,> ls-output.txt
可以重写 ls-output.txt 文件,
>>
- 如果后面的文件不存在,则和 > 一样,如果存在,则把重定向结果追加到文件内容后面
2>
- 重定向标准错误
ls -l /bin/usr > ls-output.txt 2>&1
重定向标准输出和标准错误到同一个文件,这是两个重定向操作,先重定向标准输出到后者文件中,然后重定向标准错误到标准输出中。
很麻烦,所以新版bash中&>
即可,如:ls -l /bin/usr &> ls-output.txt
。
ls -l /bin/usr 2> /dev/null
- 处理不需要的输出,/dev/null 是特殊文件,位存储桶,接受输入,并不做任何处理,可以用来隐瞒命令错误信息。
cat
- 命令读取一个或多个文件,然后复制它们到标准输出,如:cat ls-output.txt
,连接文件,如:cat movie.mpeg.0* > movie.mpeg
cat 不加参数执行,会从标准输入(默认是键盘)读入数据,然后输出到标准输出——屏幕,
cat > lazy_dog.txt
重定向输出,就可以用来创建简短的文本文件。
<
- 重定向标准输入操作符,把标准源从键盘改到了文件,这和传递单个文件名作为参数别无二致。
|
- 管道符,命令的标准输出管道到另一个命令的标准输入,如:ls -l /usr/bin | less
,输出两个目录中的可执行程序,联合到一起后,经过整体排序后再传给 less。
uniq
- 报道或忽略重复行,如:ls /bin /usr/bin | sort | uniq | less
, uniq 参数 -d 用来输出重复行,如: ls /bin /usr/bin | sort | uniq -d | less
wc
- 打印行,字和字节数,如: wc ls-output.txt
,”-l”选项限制命令输出只能 报道行数:ls /bin /usr/bin | sort | uniq | wc -l
grep
- 打印匹配行,用来找到文本中的匹配文本,如:ls /bin /usr/bin | sort | uniq | grep zip
,这里只是简单地匹配,grep 还可以使用正则表达式进行匹配。
-i
忽略大小写,-v
只打印不匹配的行。
head / tail
- 打印文件开头部分/结尾部分
-n
可以指定行数,比如打印文件开头前五行:head -n 5 README.md
,
此外还可以用在管道中:ls /usr/bin | tail -n 5
。
-f
可以继续监测文件,当新内容添加到文件中时,会立即出现在屏幕上,直到 Ctrl-c,观察log日志文件进展时很有用。
tee
- 从 Stdin 读取数据,并同时输出到 Stdout 和文件。
用来捕捉管道线中间处理内容时很有用,可以将中间过程保存到文件中,如:
ls /usr/bin | tee ls.txt | grep zip
,列出 /usr/bin 目录下的文件和文件夹,并保存到 ls.txt 里,然后同时输出到 Stdout 中,交给 grep 来匹配含有 zip 的字符,并输出到命令行中。