用实例讲解输出/输入重定向/管道以及标准错误

来源:互联网 发布:java int 多少字节 编辑:程序博客网 时间:2024/06/06 11:42

输入重定向:

命令执行的结果,默认情况是输出到终端设备的,但是如果加上重定向符号,也可以输出到文件:

[root@localhost travel_life]#echo first time > a.txt

[root@localhost travel_life]#cat a.txt

first time

 [root@localhost travel_life]#echo second time > a.txt  ---- 用一个’>’,把当前的内容覆盖文件中已存在的内容

[root@localhost travel_life]#cat a.txt

second time

[root@localhost travel_life]#echo third time >> a.txt ---- 用两个’>’,则不会覆盖已存在的内容,而是追加到原来内容的尾部

[root@localhost travel_life]#cat a.txt

second time

third time

 

也可以用cat把一个文件的内容追加到另一个文件后面:
[root@localhost travel_life]# cat b.txt

aaaa

[root@localhost travel_life]#cat a.txt >> b.txt

[root@localhost travel_life]#cat b.txt

aaaa

second time

third time

 

[root@localhost travel_life]#cat a.txt b.txt  ---- cat后面指定两个文件名,就把两个文件的内容相继显示出来,为什么是这样?因为是catcatenate(连接)的缩写。

second time

third time

aaaa

second time

third time

 

 

输入重定向:

比如想知道当前有多少用户登录,可以把who运行结果的行数先输出重定向到文件a.txt,然后再让输入重定向到a.txt从而让wc –l打印出行数也就是用户的个数。
[root@localhost travel_life]# who

root    pts/0        2014-10-11 23:23 (10.201.222.58)

root    pts/1        2014-10-11 23:23 (10.201.222.58)

[root@localhost travel_life]#who > a.txt

[root@localhost travel_life]#wc -l < a.txt

2

 

当然还有更简单方法显示当前用户数,就是即将要讲的管道。

 

管道:

管道,顾名思义,就是一根管子,我们可以假定管子左右两边分别有两个人,左边的人在执行一个命令,做完之后把结果(想象成一个球)扔进管子,球会沿着管子滚到右边那一侧,右边的人拿到结果后,可以接着做事情。相当于左边第一条命令的标准输入作为第二条命令的标准输入。

[root@localhost travel_life]#who | wc -l

2

 

标准错误:

跟标准输入和标准输出一样,标准错误也是一种标准设备。UNIX把大部分错误信息都写到这里。与其他两类设别一样,标准错误默认也是终端。大多情况下,根本分不清标准输出和标准错误。

比如上篇文章里的ln错误:

[root@localhost travel_life]#ln /boot/xen-syms-2.6.18-53.el5 .

ln: creating hard link `./xen-syms-2.6.18-53.el5' to `/boot/xen-syms-2.6.18-53.el5': Invalid cross-device link

 

即使输出重定向到a.txt,仍然会在终端打印错误信息:

[root@localhost travel_life]#ln /boot/xen-syms-2.6.18-53.el5 . > a.txt

ln: creating hard link `./xen-syms-2.6.18-53.el5' to `/boot/xen-syms-2.6.18-53.el5': Invalid cross-device link

[root@localhost travel_life]#

 

但是如果真想让错误不显示在终端,而是输出重定位到某个文件,可以用’2>’,务必注意2和>之间不能有空格。实际,这个我们经常会用到,比如把执行一个大型shell脚本中遇到的错误全部打印到一个文件,执行完之后再看这个文件。

[root@localhost travel_life]#ln /boot/xen-syms-2.6.18-53.el5 . 2> a.txt

 [root@localhost travel_life]# cat a.txt

ln: creating hard link `./xen-syms-2.6.18-53.el5' to `/boot/xen-syms-2.6.18-53.el5': Invalid cross-device link

0 0