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


一. 简单描述

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

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

【小解其意】:

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

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

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

二. 输出重定向

格式: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 #&[n] 代表是已经存在的文件描述符,&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 [n] <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

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

你可能感兴趣的:(linux)