大多数linux命令处理数据后都会输出到标准输出,但是如果数据要经过系列列的步骤处理后,才是需要的数据个数,这种需求就需要管道来帮助完成。
管道命令使用"|"作为界定符,将界定符前的命令的执行结果作为界定符后的命令的输入继续处理。这里的执行方式和“连续执行命令”是不一样的。管道命令不仅强调界定符前后命令的依赖关系,而且还有一个非常重要的限制:
界定符前命令产生的执行结果必须输出到标准输出,界定符后的命令必须能够接收标准输入作为处理数据。
下面通过几个例子熟悉下管道命令:
- /etc目录下的文件非常多,通常直接ls查看,屏幕无法全部显示,这是可以使用管道命令:
ls -al /etc | less
ls命令会将目录下的文件详细信息输出到标准输出,less能够接受标准输入作为处理数据。这样就重复利用了less命令前后查看的能力,甚至检索能力,帮组我们有效的查看需要的文件。
- 查看最近的有多少用户登录常使用last命令,但是last会输出非常多信息,如果要筛选只查看用户:
last | cut -d ' ' -f 1
last将最近的登录信息都输出到标准输出,cut接受标准输入作为入参,进行处理,最后再输出到标准输出进行显示。
使用管道命令的核心要点
- 管道命令前的命令仅能处理标准输出,对于标准错误输出无处理能力;
- 管道命令后的命令必须要能接受来自前一个命令的数据成为标准输入继续处理;
必须ls、cp等命令就不能接受来自stdin的数据。tail、head、less、more等就可以接受标准输入。