一、重定向输出
复制代码代码示例:
#ls -l > lsoutput.txt
以上命令将标准输出重定向到文件lsoutput.txt中。
当然,也可以将标准文件描述符以外的文件描述符进行重定向,这种情况很少见。
复制代码代码示例:
#ls -l >> lsoutput.txt
上面命令将输出附加到指定文件的尾部。
有时会用重定向输出将命令产生的错误重定向输出到某个文件以屏蔽屏幕输出。
复制代码代码示例:
#kill -HUP 1234 > killout.txt 2>killerr.txt
如果想把两组输出都重定向到一个文件中,可以使用>&操作符来结合两个输出,比如:
复制代码代码示例:
#kill -l 1234 >killouterr.txt 2>&1
这条命令将标准输出和标准错误输出都重定向到同一个文件中。
复制代码代码示例:
#kill -l 1234 >/dev/null 2>&1
回收站/dev/null就像黑洞一样,任何东西进入都是有去无回。
二、重定向输入
复制代码代码示例:
#more < killout.txt
以上命令只为教学而用,因为more本来也可以接受文件名为参数。
三、管道
Linux与MS-DOS不同,在linux系统中通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动地进行协调。
不用管道的情况下,需要分几个步骤来实现:
复制代码代码示例:
#ps > psout.txt
#sort psout.txt > pssort.out
用管道的话,就变得简单多了,比如:
复制代码代码示例:
#ps | sort > pssort.out
如果想在屏幕上分页显示输出结果,可以再连接第三个进程more,将它们都放在同一个命令行上:
复制代码代码示例:
#ps | sort | more
允许连接的进程数目是没有限制的。假设我们想看看所有系统中运行的进程的名字,但不包括shell本身,可以如此:
复制代码代码示例:
#ps -xo comm | sort | uniq | grep -v sh | more
这个命令首先按字母顺序排序ps命令的输出,再用uniq命令去除重复的内容,然后用grep -v sh命令删除名为sh的进程,最终将结果分页显示在屏幕上。 与使用一系列分离的命令并且每个命令都带有自己的临时文件相比,这是一个更精巧的解决方案。但这里有一点需要引起注意,如果你有一系列的命令需要执行,相应的输出文件是在这一组命令被创建的同时立刻被创建或写入的,所以绝不要在命令流中重复使用相同的文件名。
尝试执行如下命令:
复制代码代码示例:
#cat mydata.txt | sort | uniq | > mydata.txt
将得到一个空文件,因为在读取文件mydata.txt之前就已覆盖了此文件的内容。 (责任编辑:IT) |