今天在看chroot的时候,发现一个2>&1的东西,觉得跟指令完全不相关,有点像是正则表达式的样子,之前也稍微听过别人说是跟标准输入输出有关系,但是没有搞清楚过具体的作用,这里就把这个相关的知识点写一写吧
一句话概括
为了给赶时间的童鞋看,我就用一句话简要概括:
2>&1的作用是将程序运行时的标准错误信息添加到标准输出中
具体内容
具体碰到的指令是这样的
nohup command>/dev/null 2>&1 &
先说几个基本的符号
- /dev/null 表示空设备文件
- 0表示stdin标准输入
- 1表示stdout标准输出
- 2表示stderr标准错误
指令分析
据此我们来对这条指令进行拆分,nohup是指当前用户和系统会话下的进程忽略响应HUP消息,&是指该命令以后台job的形式运行。剩下的部分为:
command>/dev/null 2>&1
这条指令中,/dev/null表示的是一个空设备,也就是command的执行结果重定向到空设备中了,即执行结果不显示。
对于前半条命令:
command>/dev/null
这条命令中,command是省略了1这个标准输出的,即这条指令相当于:
command 1>/dev/null,是command执行的结果标准输出1重定向至/dev/null中
最后我们来看2>&1的作用,由于我们在上面分析可以得出:
command>/dev/null等价于command 1>/dev/null
据此可以得到,2>&1是将标准错误重定向至标准输出的位置,即2>/dev/null,由于1并不能代表/dev/null,因此指令不是2>1,而是2>&1,这里的&1就是对标准输出位置的引用:
1>/dev/null 2>/dev/null
1>/dev/null 2>&1
这两者的区别在于前者需要打开两次/dev/null,而第二种方式只需要打开文件一次,效率更高
参考链接
Linux里的2>&1究竟是什么:https://blog.csdn.net/ggxiaobai/article/details/53507530