输入输出重定向
Linux重定向可以将命令的输出或输入重新定向到其他位置或文件,以实现对输出输入的控制。默认情况下命令的输出通常为终端,如果想将输出转移到文件或其他位置,这时候就需要重定向。
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
文件描述符为0
,Unix程序默认从stdin读取数据。文件描述符为1
,Unix程序默认向stdout输出数据。文件描述符为2
,Unix程序会向stderr流中写入错误信息。另外 /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 的文件 |
注意:
n>
之间不能有空格&m
之间不能有空格$ command > file
$ command < file
$ command 2> file
# stdout和stderr覆盖file内容
$ command > file 2>&1
# stdout和stderr追加file内容
$ command >> file 2>&1
注意 2>&1
的写法:
2
和 >
之间不可以有空格,2>
才表示错误输出stderr。1
前面必须要加 &
,&1
才是标准输出stdout,没有加 &
表示重定向到文件名为1的文件command < file1 > file2
# 丢弃stdout
command > /dev/null
# 同时丢弃stdout和stderr
command > /dev/null 2>&1
command > file 2>&1
你可以把这个命令当成两部分来理解:
command > file
等于 command 1> file
,将标准输出重定向到file中。2>&1
将标准错误输出到标准输出,此时标准输出已经重定向到file文件里面了。加起来的效果就是标准输出重定向到file中,标准错误复制标准输出的行为,也输出到file文件
。
command 2>&1 > file
分成两部分分析:
command 2>&1
将标准错误重定向到标准输出,此时标准输出还在终端,所以标准错误会被输出到终端。> file
等于 1> file
,将标准输出重定向到file。加起来的效果就是标准输出重定向到file,但标准错误仍然输出到终端
。