【linux命令】数据流重定向

数据流重定向

命令:

$ command > file 2>&1
$ command >> file 2>&1

这里的&没有固定的意思。放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符,内置的文件描述符说明如下:

换言之 2>1 代表将stderr重定向到当前路径下文件名为1regular file中,而2>&1代表将stderr重定向到文件描述符1的文件(即/dev/stdout)中,这个文件就是stdoutfile system中的映射。而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同,都等价于

>file 2>&1

此处&>或者>&视作整体,分开没有单独的含义。

 

xxx > /dev/null 2>&1

对于&1更准确的说应该是文件描述符 1, j即标准输出stout;2为标准文件描述符2,即错误输出sterr。2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null,可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到。

cat /etc/crontab  /etc/notexist > /dev/null 2>&1

可以理解为左边是标准输出,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。

 

举例说明:

命令 含义
ls 2>1 不会报没有2文件的错误,但会输出一个空的文件1
ls ctdb.log 2>1 没有ctdb.log这个文件的错误输出到了1中
ls ctdb.log 2>&1  不会生成1这个文件了,不过错误跑到标准输出了
ls ctdb.log > /dev/null 2>&1 实际可以换成:ls ctdb.log 1> /dev/null 2>&1,重定向符号>默认是1

 

参考资料

1. Shell 重定向 2>&1 含义说明

posted @ 2021-11-16 22:45  苏格拉底的落泪  阅读(93)  评论(0编辑  收藏  举报