当前位置: 首页 > 科技观察

Linux中的管道和命名管道介绍

时间:2023-03-12 19:13:23 科技观察

想要在命令之间移动数据?使用管道使这个过程变得简单。在Linux中,管道可让您将一条命令的输出发送到另一条命令。管道,顾名思义,将标准输出、输入和错误从一个进程重定向到另一个进程以进行进一步处理。“管道”(或“未命名管道”)命令的语法是添加|两个命令之间的字符:Command-1|命令2|...|Command-N这里管道不能通过另一个Session访问;它是临时创建的,用于接收Command-1的执行并重定向标准输出。执行成功后删除。在上面的示例中,contents.txt包含特定目录中所有文件的列表——特别是ls-al命令的输出。我们首先通过管道使用“file”关键字从contents.txt中grep文件名(如图所示),因此cat命令的输出作为grep命令的输入提供。接下来,我们添加管道以执行awk命令,该命令显示grep命令的过滤输出中的第9列。我们还可以使用wc-l命令计算contents.txt中的行数。只要系统启动并运行,命名管道就会一直存在,或者直到它被删除。它是一种遵循FIFO(先进先出)机制的特殊文件。它可以像普通文件一样使用。也就是说,您可以写入、读取以及打开或关闭它。要创建一个命名管道,命令是:mkfifo这将创建一个命名管道文件,甚至可以跨多个shell会话使用。另一种创建FIFO命名管道的方法是使用此命令:mknodp要将任何命令的标准输出重定向到另一个命令,请使用>符号。要重定向任何命令的标准输入,请使用<符号。如上所示,ls-al命令的输出被重定向到contents.txt并插入到文件中。类似地,tail命令的输入是通过<符号从contents.txt中读取的。在这里,我们创建一个命名管道my-named-pipe并将ls-al命令的输出重定向到命名管道。我们可以打开一个新的shell会话并cat命名管道的内容,这会像以前一样显示ls-al命令的输出。请注意,命名管道的大小为零,并带有标志“p”。因此,下次您在Linux终端上使用命令并在它们之间移动数据时,希望管道能让这个过程变得快速和简单。