本篇是Linux小白最佳实践第5篇,目的就是让白菜们了解Linux进程之间是如何对话的。之前连载的几篇,在微信上引起了很多的反响,有人也反映图多文字少,感觉没有干货.本篇选了大部分是实战讲解的"管道与重定向"进行连载,希望让读者能真正学到东西.

8.3管道与重定向

管道与重定向是Linux系统进程间的一种通讯方式,在系统管理中有着举足轻重的作用。绝大部分Linux进程运行时需要使用3个文件描述符:标准输入、标准输出和标准错误输出,对应的序号是0、1和2。一般来说,这3个描述符与该进程启动的终端相关联,其中输入一般为键盘。重定向和管道的目的是重定向这些描述符。管道一般为输入和输出重定向的结合,一个进程向管道的一端发送数据,而另一个进程从该管道的另一端读取数据。管道符是“|”。

8.3.1标准输入与输出

执行一个Shell命令行时通常会自动打开3个标准文件,如图8.3所示。
请输入图片描述
图 8.3 Shell执行时对应的3个标准文件

标准输入文件stdin,通常对应终端的键盘,标准输出文件stdout和标准错误输出文件stderr,这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而错误信息将打印到标准错误文件。

现以cat 命令为例来介绍标准输入与输出。cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出文件,一般对应终端屏幕,如示例8-7所示。

【示例8-7】

[root@CentOS ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
该命令会把文件ifcfg-eth0的内容显示到标准输出即屏幕上。如果cat命令行中没有参数,会从标准输入文件中一般对应键盘读取数据,并将其送到标准输出文件中,如示例8-8所示。

【示例8-8】

cat不带任何参数时会从标准输入中读取数据并显示到标准输出文件中

[root@CentOS ~]# cat
mycontent
mycontent
hello
hello
用户输入的每一行信息都会立刻被cat命令输出到屏幕上。用户对输入的数据无法做进一步地处理。为解决这个问题,Linux操作系统为输入、输出的传送引入了另外两种机制:输入/输出重定向和管道。

8.3.2输入重定向

输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是输入可以不来自键盘,而来自一个指定的文件。输入重定向主要用于改变一个命令的输入源。

例如上个示例中的cat命令,当键入该命令后并没有任何反应,从键盘输入的所有文本都出现在屏幕上,直至按下Ctrl+d组合键,命令才会终止,可采用两种方法:一种是为该命令给出一个文件名,另外一种方法是使用输入重定向。

输入重定向的一般形式为:命令<文件名,输入重定向符号为“<”。示例8-9演示了此种情况,此示例中的文件已不是参数,而是标准输入。

【示例8-9】

[root@CentOS ~]# cat< /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
[root@CentOS ~]# wc </etc/sysconfig/network-scripts/ifcfg-eth0
99 188
还有一种输入重定向,如示例8-10所示。

【示例8-10】

[root@CentOS ~]# cat <<EEE

line1
line2
line3
EEE
line1
line2
line3
标识符“EEE”表示输入开始和结束的分隔符,此名称不是固定的,可以使用其他字符串,主要是一个分隔的作用。文档的重定向操作符为“<<”。将一对分隔符之间的正文重定向输入命令。例如上述示例中将“EEE”之间的内容作为正文,然后作为输入传给cat命令。由于大多数命令都以参数的形式在命令行中指定输入文件的文件名,所以输入重定向并不经常使用。使用某些不能利用文件名作为输入参数的命令,需要的输入内容又存在一个文件里时,可以用输入重定向来解决问题。

请输入图片描述


小犀牛
141 声望8 粉丝

IT图书策划、出版,创新科技交流。有兴趣写书的ITer都可以联系我。


引用和评论

0 条评论