管道
管道(|
)基本用法
管道(|
)用来连接命令
命令格式:
COMMAND1 | COMMAND2 | COMMAND3 | ...
实现了把前一个命令的标准输出作为后面命令的输入。
tips: IO重定向和管道的区别:IO重定向,是把前一个命令的标准输出,重定向到普通文件或者设备文件。而管道,是把前一个命令的标准输出作为后面命令的标准输入。一个是到文件,一个是作为后面命令的标准输入。
例子:
ls -C | tr 'a-z' 'A-Z'
:ls
出来的文件列表,作为tr的输入,这样小写被转化为大写。
ls -l /etc |less
:ls
输出的文件列表,作为less的输入,这样可以逐行显示
echo "test email" | mail-s "test" user@example.com
:echo输出的字符串,作为mail 的输入
cat /etc/issue | tr 'a-z' 'A-Z'
:略
who | head -2 | tr 'a-z' 'A-Z' | tr -d '0-9'
:略
echo 'Text through stdin' | cat - file.txt
tips:在上面代码中,
-
指的就是前面输出的内容,再举个例子:
123456 [root@fedora Scripts]# touch 1 2 3 4 5[root@fedora Scripts]# ls [0-9]1 2 3 4 5[root@fedora Scripts]# ls [0-9] |xargs rm -rf -[root@fedora Scripts]# ls [0-9]ls: cannot access '[0-9]': No such file or directory
2>&1
和|&
当既有标准输出又有错误输出的时候,标准输出是可以输入到后面命令的,错误输出是无法输入到后面命令。可以使用2>&1
和|&
实现错误的也输入到后面命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root❄centos7 app]☭ ls /app /err | tr 'a-z' 'A-Z'
ls: cannot access /err: No such file or directory
/APP:
F1
ISSUE2
ISSUE3
[root❄centos7 app]☭ ls /app /err 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS /ERR: NO SUCH FILE OR DIRECTORY
/APP:
F1
ISSUE2
ISSUE3
[root❄centos7 app]☭ ls /app /err |& tr 'a-z' 'A-Z'
LS: CANNOT ACCESS /ERR: NO SUCH FILE OR DIRECTORY
/APP:
F1
ISSUE2
ISSUE3
|
tee
tee
:read from standard input and write to standard output and files
从标准输入读,写到标准输出
和文件
。当然如果再跟一个管道,标准输出就输出到另外一个命令了。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 写到屏幕和文件/tmp/issue.tee
[root❄centos7 ~]☭ cat /etc/issue | tee /app/issue.tee
\S
Kernel \r on an \m
[root❄centos7 ~]☭ cat /app/issue.tee
\S
Kernel \r on an \m
# 写到/tmp/issue.tee ,写到标准输出的通过管道又传递了一次
[root❄centos7 ~]☭ cat /etc/issue | tee /tmp/issue.tee | tr 'a-z' 'A-Z'
\S
|