本文出自 http://blog.csdn.net/shuangde800
---------------------------------------------------------------------------------
不要重复发明轮子
开源文化的核心理念之一就是不要重复发明轮子,很多开源软件都是现有软件,代码和功能的重新组合,就好像通过零件装配机器一样,源代码的开放和共享让这成为了可能,同时也大大提高了效率和生产率。
管道和重定向
在Linux系统中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现和一个或几个很简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到某个复杂功能的目的。
在Linux中,几乎所有命令返回数据都是纯文本的(与因为命令都是运行在CLI下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为可能。
Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
命令行shell的数据流有以下定义:
名称 | 说明 | 编号 | 默认 |
stdin | 标准输入 | 0 | 键盘 |
stdout | 标准输出 | 1 | 终端 |
stderr | 标准错误 | 2 | 终端 |
命令通过stdin接收参数或数据,通过stdout输出结果或通过stderr输出错误。
通过管道和重定向我们可以控制CLI的数据流
重定向:
关键字 | 定义 | 例子 |
> | 将stdout重定向到文件(覆盖) |
echo "hello world" > outfile
ls -l > outfile
|
>> | 将stdout重定向到文件(追加) |
echo "hello world" >> outfile
date >> outfile
|
2> | 将stderr重定向到文件(覆盖) | ls -l nofile 2> outfile |
2>&1 | 将stderr与stdout结合 | ls nofile > outfile 2>&1 |
< | 重定向stdin |
grep keyword < /etc/passwd,
在passwd文件中找有关键字keyword的行输出
|
管道:
| |
将一个命令的stdout作为
另一个命令的stdin
|
ls -l | grep keyword
find / -user shuangde 2 > /dev/null | grep Video
/dev/null 所有输出放到这里都会被自动丢弃,就像垃圾桶一样
|
管道通常是用来组合不同的命令,以实现一个复杂的功能
重定向通常用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个指定的文件