纠正错误 添加实例

重定向

输入输出重定向

补充说明

Linux重定向可以将命令的输出或输入重新定向到其他位置或文件,以实现对输出输入的控制。默认情况下命令的输出通常为终端,如果想将输出转移到文件或其他位置,这时候就需要重定向。

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

另外 /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。一般用于丢弃输出内容。

命令语法

命令 说明
command > file 将输出重定向到 file
command < file 将输入重定向到 file
command >> file 将输出以追加的方式重定向到 file
n> file 将文件描述符为 n 的文件重定向到 file
n>> file 将文件描述符为 n 的文件以追加的方式重定向到 file
n> &m 将文件描述符为 n 的文件输出重定向到文件描述符为 m 的文件
n< &m 将文件描述符为 m 的文件输入重定向到文件描述符为 n 的文件

注意:

示例

$ command > file
$ command < file
$ command 2> file
# stdout和stderr覆盖file内容
$ command > file 2>&1

# stdout和stderr追加file内容
$ command >> file 2>&1

注意 2>&1 的写法:

command < file1 > file2
# 丢弃stdout
command > /dev/null

# 同时丢弃stdout和stderr
command > /dev/null 2>&1

常见问题

同时重定向标准输出和错误输出,为什么2>&1要写在后面?

command > file 2>&1

你可以把这个命令当成两部分来理解:

  1. command > file 等于 command 1> file,将标准输出重定向到file中。
  2. 2>&1 将标准错误输出到标准输出,此时标准输出已经重定向到file文件里面了。

加起来的效果就是标准输出重定向到file中,标准错误复制标准输出的行为,也输出到file文件

command 2>&1 > file

分成两部分分析:

  1. command 2>&1 将标准错误重定向到标准输出,此时标准输出还在终端,所以标准错误会被输出到终端。
  2. > file 等于 1> file,将标准输出重定向到file。

加起来的效果就是标准输出重定向到file,但标准错误仍然输出到终端