管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”。
在管道的具体实现中,根据通信所使用的的文件是否具有名称,有“匿名管道”和“命名管道”。
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。 连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。下面来看看管道是如何在构造一条Linux命令中得到应用的。
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出。
2、管道命令右边命令,必须能够接收标准输入流命令才行。
这条命令使用一个管道符“|”建立了一个管道。管道将rpm -qa命令的输出(包括系统中所有安装的RPM包)作为grep命令的输入,从而列出带有licq字符的RPM包来。
这条命令使用了两个管道,利用第一个管道将cat命令(显示passwd文件的内容)的输出送给grep命令,grep命令找出含有“/bin /bash”的所有行;第二个管道将grep的输出送给wc命令,wc命令统计出输入中的行数。这个命令的功能在于找出系统中有多少个用户使用bash。
区别是:
1、左边的命令应该有标准输出 | 右边的命令应该接受标准输入
左边的命令应该有标准输出 >右边只能是文件
左边的命令应该需要标准输入 <右边只能是文件
2、管道触发两个子进程执行"|"两边的程序;而重定向是在一个进程内执行
这些都是网上总结很多的,其实只要多加清楚用法,也一定有自己的一份不同描述。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)