Linux输入输出重定向

说明

0标准输入
1标准输出
2标准错误

下面命令表示把输出结果重定向到file文件中,而错误重定向到标准输出,此时的标准输出为重定向到file文件中,所以错误也会输出到file文件中

command > file 2>&1

解释

何2>&1要写在后面?

command > file 2>&1

首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

command 2>&1 >file

2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

用strace可以看到:

  1. command > file 2>&1

这个命令中实现重定向的关键系统调用序列是:

open(file) == 3

dup2(3,1)

dup2(1,2)

  1. command 2>&1 >file

这个命令中实现重定向的关键系统调用序列是:

dup2(1,2)

open(file) == 3

dup2(3,1)

为什么会有&

当没有&时,1会被认为是一个普通的文件,有&表示重定向的目标不是一个文件,而是一个文件描述符。

为什么有&1而没有&2

2>是一个整体,表示标准错误输出重定向,重定向至&1,即标准输出,&1是一个文件

常用命令

挂入后台命令

# 普通 断开终端就停止
command >/dev/null 2>&1 &

# 高级 断开终端不停止
nohup command >/dev/null 2>&1 &
# 或者
nohup command >& /dev/null &

其他写法

command > file 2>&1  

等价写法

command >& file 

command &> file