输入输出重定向
Linux提供了三种I/O设备:
/dev/stdin:
/dev/stdout:
/dev/stderr:
设备名 | 文件描述符 | 类型 |
---|---|---|
/dev/stdin | 0 | 标准输入 |
/dev/stdout | 1 | 标准输出 |
/dev/stderr | 2 | 标准错误 |
标准输入(STDIN): 0 默认接受来自键盘的输入
标准输出(STDOUT):1 默认输出到终端窗口
标准错误(STDERR):2 默认输出到终端窗口
重定向就是将标准输入、标准输出、标准错误重新制定,通常重定向到一个文件中。
输出重定向:
正确输出:1> :覆盖 #可以指定文件
1>> :追加
错误输出:2> :覆盖
2>> :追加
正确和错误输出混合: &>
2>&1
1>:再次重定向会覆盖原内容
[root@host ~]# ls
anaconda-ks.cfg file
[root@host ~]# cat file
inet 127.0.0.1/8 scope host lo
inet 192.168.10.11/24 brd 192.168.10.255 scope global noprefixroute ens33
hello world!
[root@host ~]# touch test
[root@host ~]# cat file 1> test #正确输出重定向
[root@host ~]# cat test
inet 127.0.0.1/8 scope host lo
inet 192.168.10.11/24 brd 192.168.10.255 scope global noprefixroute ens33
hello world!
[root@host ~]# touch test1
[root@host ~]# echo "How are you? " > test1
[root@host ~]# cat test1 1> test #覆盖
[root@host ~]# cat test
How are you?
1>>:再次重定向会向后追加
[root@host ~]# cat file 1>> test #追加
[root@host ~]# cat test
How are you?
inet 127.0.0.1/8 scope host lo
inet 192.168.10.11/24 brd 192.168.10.255 scope global noprefixroute ens33
hello world!
2>:再次重定向至同一文件会覆盖原内容
[root@host ~]# ls
anaconda-ks.cfg file test test1
[root@host ~]# ls ccc 2> test
[root@host ~]# cat test
ls: 无法访问ccc: 没有那个文件或目录
2>>:再次重定向至同一文件会追加内容
[root@host ~]# ls aaa 2>> test
[root@host ~]# cat test
ls: 无法访问ccc: 没有那个文件或目录
ls: 无法访问aaa: 没有那个文件或目录
2>&1:正确错误混合重定向
[root@host ~]# ls aaa;la; cat test 2>&1 #不指定文件会输出在终端上
ls: 无法访问aaa: 没有那个文件或目录
-bash: la: 未找到命令
[root@host ~]# ls aaa test >file 2>&1 #指定文件为file,在2>&1前面指定,若在后面指定会输出在终端,不在文件
[root@host ~]# cat test
[root@host ~]# cat file
ls: 无法访问aaa: 没有那个文件或目录
test
[root@host ~]# ls test
test
[root@host ~]# cat aaa test >file 2>&1
[root@host ~]# cat file
cat: aaa: 没有那个文件或目录
[root@host ~]# echo "This is a test" >test
[root@host ~]# cat aaa test >file 2>&1
[root@host ~]# cat file
cat: aaa: 没有那个文件或目录
This is a test
[root@host ~]# cat aaa test 2>&1 >test2 #这样指定错误输出并不能重定向到文件中
cat: aaa: 没有那个文件或目录
[root@host ~]# cat test2
This is a test
&> :正确错误混合重定向
[root@host ~]# ll test aaa &> test #注意:此处和2>&1用法不同,注意&>直接跟指定的文件
[root@host ~]# cat test
ls: 无法访问aaa: 没有那个文件或目录
-rw-r--r--. 1 root root 0 5月 5 22:10 test
/dev/null:数据黑洞,可以将一些任务输出内容(不重要的)重定向到这里
[root@host ~]# ping 192.168.10.2 &> /dev/null & #最后的&是放入后台工作的作用
[root@host ~]# ping 192.168.10.2 #对比,上一条命令不在终端输出内容,可以继续进行其他任务
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=128 time=0.214 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=128 time=0.266 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=128 time=0.267 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=128 time=0.195 ms
...
-------------------------------------------------------------------------------------------------------返回目录