【Linux】08 -- 重定向命令及管道命令

重定向命令及管道命令

  Shell命令或应用程序在执行时,往往需要从输入设备接收一些输入数据,并将处理结果输出到输出设备上。在Linux系统中,这些输入/输出设备都被作为文件来对待。对应输入/输出设备的文件称为I/O文件。

  Linux系统定义了3个标准I/O文件,即标准输入文件stdin、标准输出文件stdout和标准错误输出文件stderr。在默认的情况下,stdin对应终端的键盘,stdout、stderr对应终端的屏幕。

  一般情况下,Shell命令和应用程序都设计为使用标准I/O设备进行输入和输出。它们从stdin接收输入数据,将正常的输出数据写入stdout,将错误信息写入stderr。在命令开始运行时,Shell会自动为它打开这3个标准I/O文件,并建立起文件与终端设备的连接。

  这样,当命令读stdin文件时,就是在读取键盘输入;当写stdout或stderr文件时,就是在往屏幕上输出。

  1.输入重定向

  输入重定向是指把命令的标准输入改变为指定的文件(包括设备文件),使命令从该文件中而不是从键盘中获取输入。输入重定向主要用于改变那些需要大量标准输入的命令的输入源。输入重定向的格式为:

命令 < 文件

  当提交这样的一个命令行时,Shell首先断开键盘与命令的stdin之间的关联,将指定的文件关联到stdin,然后运行命令。这样,该命令就会从这个文件中读取标准输入信息。

【例1】输入重定向的应用。

[root@localhost ~]# cat file
This is Linux world.
[root@localhost ~]# cat < file
This is Linux world.

  许多Linux命令都设计为以参数的形式指定输入文件,若未指定文件就默认从标准输入读入数据。对于这样的命令,用参数指定文件与用输入重定向指定文件的效果是一样的,所以没有必要使用输入重定向。但对那些设计为只能从标准输入读取数据的命令(如mail、tr,sh等命令)来说,把要输入的数据事先存入一个文件中,再将命令的输入重定向到此文件,就能避免在命令运行时从终端上手工输入大量数据的麻烦。

  2.输出重定向

  输出重定向是指把命令的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到文件中。很多情况下都可以使用输出重定向功能。输出重定向的一般形式为:

标准输出重定向:命令 > 文件
附加输出重定向:命令 >> 文件

  标准输出重定向就是将命令的标准输出保存到一个文件中,当提交这样的一个命令行时,Shell首先断开命令的标准输出stdout与屏幕之间的关联,找到指定的文件(若该文件不存在就新建一个),然后将这个文件关联到命令的标准输出上。随后Shel启动该命令运行。这样,该命令产生的所有标准输出信息都将写入这个文件中,而不是显示在屏幕上。

  附加输出重定向与标准输出重定向相似,只是当指定的文件存在时,标准输出重定向的做法是先将文件清空,再将命令的输出信息写入,而附加输出重定向则是保留文件内原有的内容,将命令的输出附加在后面。

【例2】输出重定向的应用。

[root@localhost ~]# echo "this is Linux world!" > file
[root@localhost ~]# cat file
this is Linux world!
[root@localhost ~]# echo "this is not Linux world!" > file
[root@localhost ~]# cat file
this is not Linux world!
[root@localhost ~]# echo "this is Linux world!" >> file
[root@localhost ~]# cat file
this is not Linux world!
this is Linux world!

  3.管道命令

  管道(pipe)的功能是将一个程序或命令的输出作为另一个程序或命令的输入。利用管道可以把一系列命令连接起来,形成一个管道线(pipe line)。管道线中前一个命令的输出会传递给后一个命令,作为它的输入。最终显示在屏幕上的内容是管道线中最后一个命令的输出。管道的形式为:

命令1 | 命令2 || 命令n

  管道的作用在于它把多个命令组合在一起,像流水线一样加工数据,完成单个命令无法完成的各种处理功能。恰当地使用管道可以大大提高操作的能力和效率。

【例3】统计当前目录中包含多少个子目录。

[root@localhost ~]# 1s -l | grep "^d" | wc -l

  本例中包含两个管道,第一个管道将ls命令的输出作为grep命令的输入。grep命令的输出则是首字母为d的行,这个输出又被第二个管道送给wc命令来统计输出的行数。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衍生星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值