大多数命令都以参数的形式在命令行指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当使用一个不接受文件名作为输入参数的命令,或需要的输入内容存在于一个文件里时,就能用输入重定向解决问题。
输出重定向比输入重定向更常用。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入。
输出重定向的一般形式为:
#command > filename
例如:
#ls > directory.out
#cat directory.out
chl.doc ch2.doc ch3.doc chimp config mail /test/
将 ls 命令的输出保存为一个名为 directoryout 的文件。
♣ 提示:如果>符号后的文件已存在,那么这个文件将被覆盖。
为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,Shell 提供了输出重定向的一种追加手段。
输出追加重定向与输出重定向的非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。
如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符“> >”。形式为:
#command >> filename
例如:
#ls *.doc > > directory.out
#cat directory.out
chl.doc chZdoc ch3doc chimp config mail / test /
chl.doc ch2.doc ch3.doc
和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2> >)表示对错误输出设备重定向。例如下面的命令:
#ls /usr/tmp 2> err.file
可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file 中,以备将来检查用。
还可以使用另一个输出重定向操作符(& >)将标准输出和错误输出同时送到同一文件中。例如:
#ls /usr/tmp &> output.file
利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列,即统计了/usr/bin 目录下的文件个数。
#ls /usr/bin > /tmp/dir
#wc -w < /tmp/dir
459
1.5.3 管道
将一个程序或命令的输出作为另一个程序或命令的输入有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上节例子中的/tmp/dir 文件将 ls 和 wc 命令联在一起;另一种是 Linux 所提供的管道功能,这种方法比前一种方法更方便。
管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出。
通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:
#ls /usr/bin | wc -w
1789 再如:
#cat sample.txt | grep “High” | wc -l
管道将 cat 命令的输出送给 grep 命令。grep 命令在输入里查找单词 High,grep 命令的输出则是所有包含单词 High 的行,这个输出又被送给 wc 命令,wc 命令统计出输入中的行数。假设 sample.txt 文件的内容如下:
Things to do today :
Low:Go grocery shopping
High:Return movie
High:Clear level 3 in Alien vs Predator
那么该管道行的结果是 2 。