linux 命名管道
在Linux中,使用pipe
命令可以将一个命令的输出发送到另一个命令。 顾名思义,管道可以将一个过程的标准输出,输入或错误重定向到另一个过程,以进行进一步处理。
pipe
或未unnamed pipe
命令的语法是|
任何两个命令之间的字符:
Command-1 | Command-2 | …| Command-N
在这里,无法通过另一个会话访问管道; 它是临时创建的,以适应Command-1
的执行并重定向标准输出。 成功执行后将其删除。
contents.txt
包含特定目录中所有文件的列表,特别是ls -al
命令的输出。
我们首先通过管道(如图所示)使用contents.txt
的“ file”关键字对文件名进行grep
(如图所示),因此提供了cat
命令的输出作为grep
命令的输入。
接下来,我们添加管道以执行awk
命令,该命令将显示grep
命令的过滤输出中的第 9列。
我们还可以使用wc -l
命令来计数contents.txt
的行数。
命名管道可以一直持续到系统启动并运行或被删除为止。 这是遵循FIFO ( 先进先出 )机制的特殊文件。 可以像普通文件一样使用它。 即,您可以对其进行写入,读取并打开或关闭它。 要创建命名管道,命令为:
mkfifo <pipe-name>
这将创建一个命名管道文件,该文件甚至可以在多个Shell会话上使用。
创建FIFO命名管道的另一种方法是使用以下命令:
mknod p <pipe-name>
要将任何命令的标准输出重定向到另一个进程,请使用>
符号。 要重定向任何命令的标准输入,请使用<
符号。
如上所示, ls -al
命令的输出重定向到contents.txt
并插入到文件中。 类似地, tail
命令的输入通过<
符号作为contents.txt
提供。
在这里,我们创建了一个命名管道my-named-pipe
,并将ls -al
命令的输出重定向到该命名管道中。 我们可以打开一个新的shell会话和cat
的命名管道,这显示了输出的内容ls -al
命令,如前面提供。 请注意,命名管道的大小为零,并且其名称为“ p”。
因此,下一次您在Linux终端上使用命令并发现自己在命令之间移动数据时,希望通过管道可以使该过程更加快捷和容易。
翻译自: https://opensource.com/article/18/8/introduction-pipes-linux
linux 命名管道