简单的说,一个通道接受一个工具软件的输出,然后把那个输出输入到其他的工具软件,整个管道接受了一个过程的标准输出,并把这个标准的输出作为另一个过程的标准输入。如果你没有重新定向这个输出,这个输出就在屏幕上显示出来。使用一个通道,你可以重新定向这个输出,这样它就变成了另一个工具软件的标准的输入。
例如: grep best/home/* |more
- 管道(|字符)能连接命令:
// 传送 command1 的标准输入给 command2 的标准输入,而不输出到屏幕
command1|command2
- 结合多个工具的功能
command1|command2|command3
// 将sort.txt 中的数字排序并取唯一,将结果重定向到 newSort.txt 文件
cat sort.txt | sort-n | uniq > newSort.txt
重定向标准输出到一个程序:
less
:一次查看一个页面的输入:
$ls -l /etc |less
使用 / 能查询输入
lpr
:发送输入到打印机:
$echo "test print" | lpr
$echo "test print" | lpr -P printer_name
结合输出和错误:
- 一些操作对STDOUT和STDERR都有影响:
// $>:重定向所有的输出
$ find /etc –name passwd &> find.all
// 2>&1:重定向STDERR到STDOUT
// 通过一个管道来发送所有的输出是有用的
$ find /etc –name passwd 2>&1|less
// ():结合多个应用程序的STDOUT
$ (cal 2007 ;cal 2008)|less
重定向到多个目标(tee)
$ command1 | tee filename | command2
存储command1的stdout在filename里,然后通过管道传给command2:
使用:
故障诊断复杂的管道
同时查看和记载输出
从文件重定向STDIN:
- 使用<重定向标准输入
- 某些命令能接收数据的重定向从文件到标准输入:
// 把..bash_profile里的大写字符全部转换成小写字符
// 等效于:$ cat .bash_profile | tr ‘A-Z’ ‘a-z’
$ tr `A-Z` `a-z`<.bash_profile