输入输出重定向
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,但标准错误仍然输出到终端。