Linux命令中的管道和重定向
在Linux中有很多标准的命令例如find
、sort
、du
等,可以满足我们完成文档管理、系统管理等诸多需求,但是大多时候一些复杂的需求都需要多个命令搭配起来使用,对于Linux来说一个命令对应于一个进程,因此多个命令协同工作,就涉及到多个进程的通信,Linux提供一种管道的方式来完成进程间通信。
Linux很多命令都需要输入、输出以及错误信息,默认的输入输出以及错误信息都是标准输入(键盘)和标准输出(屏幕),但有时候我们希望输入、输出、错误信息是从其他地方输入、输出到其他(例如文件),这里就会涉及到输入、输出、错误信息的重定向。
管道符
管道在Linux
中对应管道符号 |
。
CommandA | CommandB
CommandA | xargs CommandB
CommandA执行的输出作为CommandB的输入。
例如:
ls -l|xargs head -10 # 列出前十个文件
输入输出重定向
输入重定向
输入重定向符号: <
CommandA < file
输入重定向到file
特殊的输入重定向符号 <<
CommandA <<EOF
abc
def
EOF
EOF之间的内容作为输入。
输出重定向
输出重定向符号: >
(覆盖), >>
(追加)
Command > file
Command >> file
文件描述符
系统中默认的文件描述符号:
- 0 标准输入
- 1 标准输出
- 2 标准错误输出
例如:
ls -l > file 2 > /dev/null # 将输出重定向到file,且将错误输出重定向到/dev/null中
这里/dev/null
只有个特殊的文件,重定向这里的输出都会被其丢弃,因此有时候为了抑制错误输出,则只需要将其重定向到黑洞/dev/null
即可。
总结
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |