文件 文件描述符
输入文件->标准输入 0
输出文件->标准输出 1
错误输出文件->标准错误 2
输出重定向符号:
>:覆盖输出
>>:追加输出
set -c:禁止对已经存在的文件进行覆盖重定向
在禁止设置后强制覆盖输出,使用>|
set +c:关闭上述功能
标准输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
覆盖模式标准输出重定向
[root@liang-study basic]
# ls /var > a.txt
[root@liang-study basic]
# cat a.txt
account
cache
crash
cvs
db
追加模式标准输出重定向
[root@liang-study basic]
# ll /home >> a.txt
[root@liang-study basic]
# cat a.txt
account
cache
crash
cvs
db
empty
total 16948
-rw-r--r-- 1 root root 5484681 Dec 8 12:24 4.1.0.
tar
.gz
drwxr-xr-x 2 root root 4096 Dec 20 10:55 basic
drwx------ 2 chenchao chenchao 4096 Dec 14 17:34 chenchao
drwxrwxr-x 8 root root 4096 Dec 8 12:25 ipython-4.1.0
drwxr-xr-x. 2 root root 4096 Dec 7 19:05 logs
drwx------. 2 root root 16384 Dec 7 19:00 lost+found
|
标准错误输出
1
2
3
4
5
6
7
8
9
|
覆盖模式标准错误输出重定向
[root@liang-study basic]
# ll /var12 2> b.txt
[root@liang-study basic]
# cat b.txt
ls
: cannot access
/var12
: No such
file
or directory
追加模式标准错误输出重定向
[root@liang-study basic]
# ll /var12 2>> b.txt
[root@liang-study basic]
# cat b.txt
ls
: cannot access
/var12
: No such
file
or directory
ls
: cannot access
/var12
: No such
file
or directory
|
标准输出和标准错误输出同时重定向
1
2
3
4
5
6
7
8
9
|
[root@liang-study basic]
# ll /var12 &> b.txt
[root@liang-study basic]
# ll /var &> b.txt
[root@liang-study basic]
# cat b.txt
total 76
drwxr-xr-x. 2 root root 4096 Dec 20 03:43 account
drwxr-xr-x. 11 root root 4096 Dec 7 19:04 cache
drwxr-xr-x. 2 root root 4096 Nov 18 23:19 crash
drwxr-xr-x. 2 root root 4096 Nov 22 2013 cvs
drwxr-xr-x. 3 root root 4096 Dec 7 19:04 db
|
即输出到屏幕又保存到文件中
1
2
3
4
|
[root@liang-study basic]
# echo "hello word" | tee c.txt
hello word
[root@liang-study basic]
# cat c.txt
hello word
|
特殊例子:获取nginx版本号
1
2
3
4
|
[root@qa-
test
-lb-103-101 ~]
# /usr/local/nginx/sbin/nginx -v
nginx version: DLEngine
/10
.2.2
[root@qa-
test
-lb-103-101 ~]
# /usr/local/nginx/sbin/nginx -v | grep nginx |awk -F '/' '{print $2}'
nginx version: DLEngine
/10
.2.2
|
上例可以看到,对nginx -v的输出使用awk处理并没有效果,继续看实验
1
2
3
4
5
|
[root@qa-
test
-lb-103-101 ~]
# /usr/local/nginx/sbin/nginx -v > a.txt
nginx version: DLEngine
/10
.2.2
[root@qa-
test
-lb-103-101 ~]
# /usr/local/nginx/sbin/nginx -v 2> a.txt
[root@qa-
test
-lb-103-101 ~]
# cat a.txt
nginx version: DLEngine
/10
.2.2
|
明白了吧,nginx -v不是标准输出,而是标准错误输出。标准错误输出不可使用awk等做处理。
可通过下面办法处理
1
2
|
[root@qa-
test
-lb-103-101 ~]
# /usr/local/nginx/sbin/nginx -v |& grep nginx |awk -F '/' '{print $2}'
10.2.2
|
上述中在管道符“|”后增加&,表示将标准错误输出转化成标准输出,再对输出做awk处理即可切割或者过滤。
本文转自 亮公子 51CTO博客,原文链接:http://blog.51cto.com/iyull/1884189