管道 ” | “
管道的作用是将前一条命令的输出变成管道后命令的输入。
*两点注意:
1.它仅能处理经由前面一个指令传出的正确输出信息,对于错误输出信息没有直接处理能力。
2.管理命令的后一个命令必须能将前一个命令的标准输出变为它的标准输入才可以,如 less,more,head,tail就可以,而类如ls, cp, mv就不行。
下图是对管道形象的描述:
- command1正确输出,作为command2的输入 ;
- comand2的输出作为comand3的输入 ;
- comand3输出就会直接显示在屏幕上面了。
//通过管道之后:comand1,comand2的正确输出不显示在屏幕上面
*下面展示几个管道的利用:
– 查看此时的进程占用资源,找出内存占用的前五个进程
//由于进程太多,我们用管道将输出重新处理:
统计ls /bin命令输出的行数:
[kiosk@foundation77 ~]$ ls /bin/ | wc -l //用管道将ls的输出重新处理,只接显示统计过的行数
1970 //行数
- 读出test.sh文件内容,通过管道转发给grep 作为输出
[root@server77 Desktop]# cat test.sh | grep -n 'echo'
1: echo "very good !";
3: echo "hello wirld !";
tee命令:
- tee 复制输出到指定位置
date |tee file |wc -l //tee命令复制date命令的输出到file中,并统计输出行数
管理输入输出
在linux系统中,正确输出的编号为1,错误输出编号为2:
数字0,1,2的详细说明:
*重定向符的用法:
command > filename //把标准输出重定向到一个新文件中"
command >> filename //把标准输出重定向到一个文件中(追加)
command 1> fielname //把标准输出重定向到一个文件中
command > filename 2>&1 //把标准输出和标准错误一起重定向到一个文件中
command 2> filename //把标准错误重定向到一个文件中
command 2>> filename //把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 //把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 //把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename //把command命令以filename文件作为标准输入
command << delimiter //把从标准输入中读入,直至遇到delimiter分界符
command <&m //把文件描述符m作为标准输入
command >&m //把标准输出重定向到文件描述符m中
command <&- //把关闭标准输入
*注意: >, 2> ,&> 都会覆盖源文件内容。
tips:
鉴于对重定向的用法,可以发现单独用>的功能:
[root@server77 Desktop]#>file //清空file
// *注意:>> 2>> &>> 不会覆盖源文件内容,会把相应的输出字符方到文件的最后
- 因为系统中错误的输出是无法通过管道的。针对这种问题,系统中用 2>&1 可以把错误的输出编号由2变成1
-
- 2>&1 把 stderr 转换成 stdout:
- 2>&1 把 stderr 转换成 stdout:
下面具体举例分析几个实际中的应用便于理解:
在student用户下执行find /etc -name passwd 命令,保存正确数出到/tmp/find.out,错误数出到/tmp/find.err中:
[kiosk@foundation77 ~]$ find /etc -name passwd 1>/tmp/westos.out 2>/tmp/westos.err
[kiosk@foundation77 ~]$ cd /tmp
[kiosk@foundation77 tmp]$ cat westos.out
/etc/passwd
/etc/pam.d/passwd
[kiosk@foundation77 tmp]$ cat westos.err | head -n 5 ##由于westos.err都是错误的输出,所以用刚讲到的管道,只看前五行。
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
查找passwd文件全部输出保存在/tmp/westos.all
显示 /bin 中文件包含大写字母的文件 , 保存到bin_westos_file.txt 文件中,并统计个数显示到屏幕
法一:用三剑客命令grep实现:
法二:用基本的正则表达式:
tips:
- 由于touch创建文件是要写入硬盘的,速度不如写入内存快。所以一般要创建如果可利用重定向的文件就多使用重定向去创建。 如:ls /bin>file …