您的位置:首页 > 运维架构 > Shell

【每天一个Linux命令】02. Linux中shell数据重定向(输入重定向与输出重定向)

2013-05-23 21:58 281 查看


一. 简单描述

linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,通过这个数字可以实现文件的读写操作。linux启动后,会默认打开3个文件描述符,分别是:标准输入:0 标准输出:1 标准错误输出:2



【小解其意】:

输入指令:输入可以从键盘或文件中得到

指令执行:如果成功会把正确的输出到屏幕(默认)或文件中,如果错误会把错误的输出到屏幕(默认)或文件中

如果不想默认输出到屏幕上那就需要重定向啦!


二. 输出重定向

格式:command-line1 [1-n] > file或文件操作符或设备

【小解其意】:将一条命令执行结果(标准输出,或者错误输出,默认打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,错误输出。

01
#【1.默认输出】显示两个不存在的文件,默认输出到屏幕上
02
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
wirelessqa.log
 wirelessqa2.log
03
ls
:
 wirelessqa.log: No such
file
or
 directory
04
ls
:
 wirelessqa2.log: No such
file
or
 directory
05
06
07
#【2.重定向错误输出】显示两个不存在的文件,重定向到stderr.log
08
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
wirelessqa.log
 wirelessqa2.log 2>stderr.log
09
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stderr.log
10
ls
:
 wirelessqa.log: No such
file
or
 directory
11
ls
:
 wirelessqa2.log: No such
file
or
 directory
12
13
#【3.重定向正确输出】一个文件存在,一个文件不存在,将标准正确的输出到stdout.log
14
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 1>stdout.log
15
ls
:
 wirelessqa.log: No such
file
or
 directory
16
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stdout.log
17
logcat.log
18
19
#同上,标准正确输出1可省略
20
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log >stdout1.log
21
ls
:
 wirelessqa.log: No such
file
or
 directory
22
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stdout.log
23
logcat.log
24
#【4.1重定向正确输出和错误输出】一个文件存在,一个文件不存在,将标准正确的输出到stdout.log,错误输出到stderr.log
25
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 1>stdout.log 2>stderr.log
26
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stdout.log
27
logcat.log
28
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stderr.log
29
ls
:
 wirelessqa.log: No such
file
or
 directory
30
31
#【4.2将错误输出与正确输出绑定】将错误输出2
 绑定给 正确输出 1,然后将 正确输出 发送给stdout.log
32
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log >stdout.log 2>&1
33
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stdout.log
34
ls
:
 wirelessqa.log: No such
file
or
 directory
35
logcat.log
36
#【4.3将错误输出和正确输出重定向】将所有标准输出与错误输出输入到all.log文件【&
 代表标准输出和错误输出 】
37
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log &>all.log
38
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
all.log
39
ls
:
 wirelessqa.log: No such
file
or
 directory
40
logcat.log
41
作者:毕小朋 
 博客: http:
//www
.wirelessqa.com
42
#【5.追加重定向】继续追加把输出写入stdout.log
 stderr.log  “>>”追加操作符
43
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 1>>stdout.log 2>>stderr.log
44
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stderr.log
45
ls
:
 wirelessqa.log: No such
file
or
 directory
46
ls
:
 wirelessqa.log: No such
file
or
 directory
47
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
stdout.log
48
logcat.log
49
logcat.log
50
51
#【6.1不显示错误输出】将错误信息去除有两种方法,如下
52
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 2>&-
53
logcat.log
54
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 2>
/dev/null
55
logcat.log
56
#&

 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符
57
#/dev/null
 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉
58
59
60
#【6.2关闭文件描述符】关闭
 1,2 文件描述符 【&-表示关闭与它绑定的描述符】
61
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 1>&- 2>&-
62
63
64
#【6.3重定向正确输出和错误输出】将正确输出和错误输出都不输出到屏幕上
65
66
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
ls
logcat.log
 wirelessqa.log 2>
/dev/null
1>
/dev/null
【提醒注意】:

1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。

2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。

3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行


三. 输入重定向

格式:command-line
<file或文件描述符&设备

命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,与文件或设备绑定。将由它进行输入。

01
#【1.1键盘输入重定向,control+d结束输入】
02
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
cat1.log
03
www.wirelessqa.com
04
bixiaopeng
05
#【1.2键盘输入重定向,输入end结束】<<
 这个连续两个小符号, 意思是『结束的输入字符』。所以键盘输入end时,输入自动结束,不用control+D
06
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
>cat3.log
 <<end
07
>
 wirelessqa
08
>
 bixiaopeng
09
>
 www.wirelessqa.com
10
>
 end
11
12
#【2.文件输入重定向】#cat
 从cat1.log文件中获得输入数据,然后输出给文件cat2.log
13
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
>cat2.log
 <cat1.log
14
bixiaopeng@bixiaopengtekiMacBook-Pro
 ~$
cat
cat2.log
15
www.wirelessqa.com
16
bixiaopeng
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: