Linux中的nohup与2>&1 &

nohup是Linux的一个常用命令,当你想要在退出账户或者关闭终端后进程仍在运行时,就可以使用nohup命令。nohup就是不挂断的意思(no hang up)。

nohup的一般形式为:

nohup command>file 2>&1 &

如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中,否则就是自己指定的文件。

尾部的&是把该命令以后台的job的形式运行,那么2>&1是什么意思?

基本符号与含义

  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误

command>file

这个命令其实是一个缩写,实际上是command产生的标准输出重定向到file中,也就是说相当于执行了command 1 > file

2>&1

2是标准错误,1是标准输出,&的意思是等效于。实际就是把标准错误也重定向到file中,那么这样写和分别重定向有什么区别呢?

command>a 2>&1与command>a 2>a的区别

经过上面的分析,command>a 2>&1这条命令,等价于command 1>a 2>&1,也就是说执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中,那么是否等价于command 1>a 2>a呢?其实不是,区别在于前者只打开一次文件a,后者会打开两次并导致标准输出被标准错误覆盖

&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1command 1>a 2>a的效率更高。

Zhao Li /
Published under (CC) BY-NC-SA in categories linux