linux 管道的几个练习教程
1.什么是linux管道:一个命令的输出(标准输出)被直接“用管道输送”到另一个命令的输入(标准输入)中,从而构成了linux(unix)的管道(pipe)--------摘自Redhat linux用户基础。
2.如何创建管道:为了用bash创建管道,用一个垂直的小节线 | 把这两个命令连接起来.
3.进程组:连接在管道的所有进程被称为进程组.
4.几个例子
例1.用户r正在寻找/etc目录下最大的文件,他先编写了find命令,列出所有大小超过100k字节的文件,如下:
find /etc -size +100k 2> /dev/null
直接结果如下:
/etc/ImageMagick-6/mime.xml
/etc/timidity/timgm6mb.cfg
/etc/ssl/certs/ca-certificates.crt
/etc/brltty/Contraction/zh-tw.ctb
/etc/brltty/Contraction/zh-tw-ucb.ctb
/etc/brltty/Contraction/ko.ctb
/etc/cups/ppd/CUPS-BRF-Printer.ppd.O
/etc/cups/ppd/CUPS-BRF-Printer.ppd
/etc/yozoXpack/902CCC39-02E3-4814-AF71-C25E6C685CB2/dispose.jar
find没有按照特定的顺序列出文件,现在用户r要对刚才的输出结果按照英文字母表排序------把find命令的输出用管道输出到sort命令的标准输入中,执行如下
r@r:~$ find /etc/ -size +100k 2> /dev/null | sort
/etc/brltty/Contraction/ko.ctb
/etc/brltty/Contraction/zh-tw.ctb
/etc/brltty/Contraction/zh-tw-ucb.ctb
/etc/cups/ppd/CUPS-BRF-Printer.ppd
/etc/cups/ppd/CUPS-BRF-Printer.ppd.O
/etc/ImageMagick-6/mime.xml
/etc/ssl/certs/ca-certificates.crt
/etc/timidity/timgm6mb.cfg
/etc/yozoXpack/902CCC39-02E3-4814-AF71-C25E6C685CB2/dispose.jar
r@r:~$
注意:sort命令默认是从标准输入读取数据的,此处利用了管道 | ,使得别的程序的标准输出传递给sort,作为sort的输入 ,充分体验了,管道| 就是把一个程序的标准输出输送到另一个程序的标准输入中。
5.grep:grep用来搜索和提取含有指定文本串的行。
grep 命令的第一个参数是被搜索的字符串,如果grep只有一个参数(被搜索的字符串),那么grep将把标准输入当成要操作的数据源。
比如用户r要打印/etc/passwd所有含有”root“的行,
例如:
r@r:~$ grep root
today ,i have learned that root can do much more things than general guest
today ,i have learned that root can do much more things than general guest
ok ,root is a super guest.
ok ,root is a super guest.
也可以指定搜索的文件代替标准输入,例如
r@r:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:118:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin