Linux 多命令协作:管道及重定向
一.管道及重定向的理解
在Linux系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现和一个或几个简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。
Linux中,几乎所有命令的返回数据都是纯文本的(因为命令都是运行在CLI下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为可能。
Linux命令行为为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
二.命令行shell的数据流定义
名称 | 说明 | 编号 | 默认 |
STDIN | 标准输入 | 0 | 键盘 |
STDOUT | 标准输出 | 1 | 终端 |
STDERR | 标准错误 | 2 | 终端 |
命令通过STDIN接受参数或数据,命令通过STDOUT输出结果或通过STDERR输出错误
三.通过管道和重定向,我们可以控制CLI的数据流
分类 | 关键字 | 定义 | 例子 |
重定向 | > | 将STDOUT重定向到文件(覆盖:如果 目标文件不存在,则创建并添加标准 信息,存在则覆盖其中的内容) |
echo "Hello Haige" >outfile ls > outfile |
>> | 将STDOUT重定向到文件(追加: 只能重定向标准输出信息, 错误信息进不来) |
echo "Hello Haige" >>outfile date >> outfile |
|
2> | 将STDERR重定向到文件(覆盖,没有 错误不输出) |
ls note 2> errorout | |
2>&| | 将STDERR与STDOUT结合 | ls note 2>&| alloutput | |
< | 重定向STDIN | grep haiyun < /etc/passwd | |
管道 | | | 将一个命令的STDOUT作为另一个命令的STDIN | find / -user hadoop | grep haige |
四.总结
1.管道通常用来组合不同的命令,以实现一个复杂的功能
2.重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定的文件