2014年10月5日
Linux多命令协作:管道及重定向
不要重复发明轮子
开源文化的核心理论之一就是不要重复发明轮子,很多的开源软件都是现有软件、代码、功能的重新组合,就好像通过零件装配机器一样,源代码的开放和共享让这成为了可能,同时也大大的提高效率和生产力。
管道和重定向
在Linux系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现和一个或几个很简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的。
Linux中,几乎所有命令的返回数据是纯文本的(因为命令都是运行在CLI下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协助成为可能。
Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
命令行shell的数据流有以下定义:
命令通过STDIN接收参数或数据,通过STDOUT输出结果或通过STDERR输出错误。
名称 | 说明 | 编号 | 默认 |
STDIN | 标准输入 | 0 | 键盘 |
STDOUT | 标准输入 | 1 | 终端 |
STEDERR | 标准错误 | 2 | 终端 |
通过管道和重定向我们可以控制CLI的数据流
分类 |
关键字
|
定义 | 例子 |
重定向 |
>
|
将STDOUIT重定向到文件(覆盖) | echo”linuxcast” > outfilels > outfile |
>>
|
将STDOUT重定向到文件(追加) | echo”linuxcast” >> outfile date >> outfile |
|
2>
|
将STDERR重定向文件(覆盖) | ls nothere 2> | |
2>&1
|
将STDERR与STDOUT结合 | ls nothere 2> &|alloutput | |
<
|
重定向STDIN | grep linuxcast < /etc/passwd | |
管道 |
|
|
将一个命令的STDOUT作为另一个命令的STDIN | ls -l | grep linux find / -user linuxcast | grep video |
管道通常用来组合不同的命令,以实现一个复杂的功能
重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定的文件