![Linux操作系统管理与Hadoop生态圈部署:基于CentOS 7.6](https://wfqqreader-1252317822.image.myqcloud.com/cover/949/32517949/b_32517949.jpg)
3.3 输入、输出重定向和管道
本节将介绍Linux的输入、输出重定向。通过本节的学习,读者可以掌握命令的输入、输出,以及重定向的具体操作和管道的基本用法。
3.3.1 命令的输入与输出
Shell程序通常自动打开3个标准文档:标准输入文档(stdin)、标准输出文档(stdout)和标准错误输出文档(stderr)。其中,stdin一般对应终端键盘或文件,stdout和stderr一般对应终端屏幕。进程从stdin获取输入内容,将执行结果输出到stdout,如果有错误信息,则同时输出到stderr。在大多数情况下,使用标准输入、输出作为命令的输入、输出,但有时可能要改变标准输入、输出,这就涉及重定向和管道。
3.3.2 输入重定向
输入重定向,主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。基本用法如下:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_56_3.jpg?sign=1739187031-0PTlYIuk2VhVzkxSv5o61LKV9J0z3zUy-0-a32c50da2fdeb5c915d60c7ca6073f44)
wc命令用于统计指定文件包含的行数、字数和字符数。直接执行不带参数的wc命令,则只有在用户输入内容之后,按Ctrl+D组合键结束输入,才会对输入的内容进行统计。例如:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_56_4.jpg?sign=1739187031-rAzKuobrNidPXOQpaxMq5Ja0lsOukeqd-0-22e9cc102ff9cca71957a8f5bafba810)
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_1.jpg?sign=1739187031-z636PeEQFJgO2eqbEoa0aXcsQU9Pn5eG-0-3a0978d5ff1e23180de62798942a76a2)
3.3.3 输出重定向
输出重定向,主要用于改变命令的输出,让标准输出不要显示在屏幕上,而是写入指定文件中。基本用法如下:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_2.jpg?sign=1739187031-BLr8BDZVeQndYXHmhGIBqBhOnKZN8Iv1-0-51280daf92da2c5d236f0dce85739171)
或者
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_3.jpg?sign=1739187031-g0EoakSXZnGeUCgbsenNErQ3sBbsbaBs-0-4b3b7dc057c461bbe4d0fb3192229ce0)
ls命令用于在屏幕上列出文件列表,但不能保存列表信息。如果要将结果保存到指定文件中,就可以使用输出重定向。例如:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_4.jpg?sign=1739187031-cG5HUWcceQ7hXBlfJ1Xwhasbs0LD8Eax-0-bb6af8ee1b11fda25996276fb2604c58)
注意:以上是对标准输出而言的,对于标准错误输出的重定向而言,就需要换一种符号,将“>”改为“2>”,将“>>”改为“2>>”。若要将标准输出和标准错误输出重定向到同一文件中,则使用符号“&>”。
3.3.4 管道
管道用于将一个命令的输出作为另一个命令的输入,并使用符号“|”来连接命令,可以将多个命令依次连接起来。其中,前一个命令的输出是后一个命令的输入。基本用法如下:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_5.jpg?sign=1739187031-MxUnAOio9jD4yGtMZt374ZbeWUUDIyqc-0-d8d9f3389b08e1eb9a5e9cf53a881d0a)
在Linux命令行中,管道操作非常实用。例如,以下命令将ls命令的输出结果提交给grep命令进行搜索:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_6.jpg?sign=1739187031-R1CSvBVJ59DbAnnHfJlRhG88e4Xaam4x-0-3424ce92ddbcf1ee50edeeda4b4c44d8)
例如,输出test.txt的内容,然后使用grep命令过滤结果中包含D的字符串,输出了3行符合条件的结果,再次使用grep命令过滤结果中包含top的字符串,就只有一行符合条件的结果了,命令如下:
![](https://epubservercos.yuewen.com/1F99D7/17545851306442606/epubprivate/OEBPS/Images/39122_57_7.jpg?sign=1739187031-tF4zKma4vkXcNDrZiKpCK7eX6G2dfCfq-0-0725e2b0df26640c5b1e7493e8ac6b7d)