简单一句话概括:"把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入(standard output)"。执行格式为:命令A | 命令B
注意:
- 管道符"|"仅能处理经由前一个命令传来的正确信息,即standard output的信息,对于error output错误输出没有直接处理的能力
- 管道符"|"右边的命令,必须能够接受标准输入流命令才行,如cut、grep、wct、tee、tr命令等
管道命令的处理示意图
实例:
找出被系统限制登录的用户
找出被系统限制登录的用户数(wc -l命令统计文本行数)
通过管道符和passwd命令的--stdin参数相结合,完成密码重置操作
(passwd命令:设置用户的认证信息,包括用户密码、密码过期时间等; --stdin参数:passwd命令默认使用终端作为标准输入,--stdin表示可以用任意文件做标准输入,包括通过管道)
若直接通过passwd命令重置密码,需要与用户进行交互式操作。不方便脚本的编写
ls命令输出后的内容能够被more获取,并且利用more的功能,进行翻页查看/etc目录中的文件列表及属性信息(/etc目录下的文件太多,ls命令会一口气将屏幕"塞满")
管道命令与重定向的区别:
-
左边的命令有标准输出 | 右边的命令接受标准输入
左边的命令有标准输出 > 右边只能是文件
左边的命令需要标准输入 < 右边只能是文件
- 管道触发2个子进程执行"|"两边的,而重定向是在一个进程内执行的
重定向与管道符在使用时很多时候可以通用(条条大路通罗马)
一般的,如果是命令间传递参数,优先选择管道符"|";如果是处理输出结果需要重定向到文件,优先选择重定向输出
参考资料: <https://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html>
xargs(arguments参数):将标准输入数据stdin转换成特定命令的命令参数。xargs的默认命令是echo,空格是默认定界符(xargs会默认将数据中的换行与空白转换为空格符)。格式:xargs [参数] [命令]。
(很多命令并不支持管道命令,可通过xargs来让该命令引用stdin)
实例:
查找~/Desktop目录下*.txt的文件,并使用ls -l列出详细信息(ls -l不是管道命令,不能直接通过管道符接受stdout)
xargs与管道的区别:<https://www.cnblogs.com/wangqiguo/p/6464234.html>
xargs的原理剖析及用法详解:<https://www.cnblogs.com/f-ck-need-u/p/5925923.html>