管道

将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。

管道使用竖线|连接多个命令,具体语法格式如下:

command1 | command2 [ | commandN… ]

当在两个命令之间设置管道时,管道符|左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,。大部分的 Linux 命令都可以用来形成管道。

注意:command1 必须能正确输出,而 command2 必须可以处理 command2 的输出结果;而且 command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。

管道符|与两侧的命令之间的空格可有可无,推荐在管道符|和两侧的命令之间使用空格,以增加代码的可读性。

管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会堵塞,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

示例:查询带有关键字 java 的进程,一条一条列出。
在这里插入图片描述

示例:把cat xxx.txt 输出结果交给 more 处理
在这里插入图片描述
示例: 查看 emp.txt 文件4-7行的内容

head -n 7 a.txt | tail -n 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章