linux 2>&1 &是什么
2018-03-27 本文已影响6人
南风nanfeng
linux常见输出到文件命令行,如:find /data -name 'login' -print > find.dt 2>&1 &
前面很好理解,查找data目录下的login文件,>表示重定向输入到文件,关键就是后面的2>&1 &,单独一个&表示后台执行任务,就看2>&1代表什么?
下面几个基本符号及其含义
0 表示stdin标准输入
1 表示stdout标准输出
2 表示stderr标准错误
从command>/dev/null说起
command命令行产生的输入重定向到/dev/null,后者表示一个空设备文件,相当于不输出,所以command>/dev/null相当于command 1>dev/null。再看2>&1就很好理解,2是标准错误,1是标准输出,等价于把标准错误重定向到标准输出,为何是&1而不是1,&等效于标准输出。这里有点不好理解,先看下面。
command>/dev/null 2>/dev/null 与 command>/dev/null 2>&1的区别
以上分析说明,标准输出、标准错误都重定向到/dev/null,二者看似等价,实际上有些差别,区别就在于前者只打开一次文件/dev/null,后者会打开/dev/null两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的/dev/null。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。