娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

Linux下2>/dev/null和dev/null 2>&1的区别

一、区别:

2>/dev/null

意思就是把错误输出到“黑洞”

/dev/null 2>&1

默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”

2>&1 >/dev/null

意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

二、解释: 1、文件描述符 Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示: 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr)

标准输出——stdout 假设:在当前目录下,有且只有一个文件名称为docker-compose的文件,这时我们运行这个命令【ls docker-compose】,就会获得一个标准输出stdout的输出结果:docker-compose

[root@centos tmp]# ls
docker-compose
[root@centos tmp]#

错误输出——stderr 按照上面的假设,我们运行另一条命令【ls haha】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问haha:没有那个文件或目录”。

[root@centos tmp]# ls haha
ls: cannot access haha: No such file or directory
[root@centos tmp]#

2、重定向 重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子: (1)、重定向标准输出stdout

[root@centos tmp]# ls docker-compose 1> log
[root@centos tmp]# cat log
docker-compose
[root@centos tmp]#

如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将wahaha打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。

(2)、重定向标准错误stderr

[root@centos tmp]# ls haha 2>log
[root@centos tmp]# cat log
ls: cannot access haha: No such file or directory
[root@centos tmp]#

如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。

(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件

cmd 2> stderr.txt 1>stdout.txt

(4)、也可以将stderr和stdout重定向到同一个文件

cmd > output.txt 2>&1

或采用下面的方法,可以少写几个字,能达到同样的效果

cmd &> output.txt

cmd >& output.txt #两个表达式效果一样的

3、Linux特殊文件 /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。 所以,2>/dev/null的意思就是将标准错误stderr删掉。

赞(0)
未经允许不得转载:娃哈哈好喝 » Linux下2>/dev/null和dev/null 2>&1的区别
分享到: 更多 (0)