一. 简单描述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 |
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 |
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 |
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 |
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 |
28 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ cat stderr.log |
29 | ls :
wirelessqa.log: No such file or
directory |
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 |
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 |
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 |
51 | #【6.1不显示错误输出】将错误信息去除有两种方法,如下 |
52 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ ls logcat.log
wirelessqa.log 2>&- |
54 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ ls logcat.log
wirelessqa.log 2> /dev/null |
56 | #&
代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符 |
57 | #/dev/null
这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉 |
60 | #【6.2关闭文件描述符】关闭
1,2 文件描述符 【&-表示关闭与它绑定的描述符】 |
61 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ ls logcat.log
wirelessqa.log 1>&- 2>&- |
64 | #【6.3重定向正确输出和错误输出】将正确输出和错误输出都不输出到屏幕上 |
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 |
05 | #【1.2键盘输入重定向,输入end结束】<<
这个连续两个小符号, 意思是『结束的输入字符』。所以键盘输入end时,输入自动结束,不用control+D |
06 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ cat >cat3.log
<<end |
12 | #【2.文件输入重定向】#cat
从cat1.log文件中获得输入数据,然后输出给文件cat2.log |
13 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ cat >cat2.log
<cat1.log |
14 | bixiaopeng@bixiaopengtekiMacBook-Pro
~$ cat cat2.log |