一、多命令协作
在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能。通过将不同功能的命令组合一起使用,可以实现某个复杂功能的。
Linux 中几乎所有命令的返回数据都是纯文本的(因为每个命令都是运行在 CLI 下),而纯文本形式的数据又是绝大多数命令的输入格式,这就让多命令协作成为可能。
Linux 的命令行提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。
二、标准流
对于一个终端而言,可能要处理各种类型的数据,int 型、float 型、double 型、char 型、string 型,甚至是一个文本文件,终端更重视数据本身的内容,无视这些数据的类型而着重于他们的内容,将它们抽象为一个“流”(Stream)的概念。数据流一般也称 I/O 流。
每一个终端几乎都会有数据流的 I/O(输入输出),普遍地,基于流的走向和用途有输入流、输出流、错误流、文件流等等,而一般地,有 3 个默认的标准流:
名称 | 说明 |
编号 (文件描述符) |
默认设备 |
STDIN | 标准输入流 | 0 | 键盘 |
STDOUT | 标准输出流 | 1 | 终端 |
STDERR | 标准错误刘 | 2 | 终端 |
STDIN 表示标准输入流 ,一般默认是键盘,文件描述符为 0。 STDOUT 和 STDERR 分别表示标准输出流和标准错误流,一般默认是终端,文件描述符分别为 1 和 2。
三、管道和重定向
1. 重定向
重定向可以将 I/O 流定向(关联)到文件,而不是默认的终端。重定向通常用来将某命令的输出或错误信息保存到一个指定的文件中。
常见的操作符有以下几个:
> 将STDOUT重定向到文件(覆盖)
>> 将STDOUT重定向到文件(追加)
2> 将STDERR重定向到文件(覆盖)
2>&1 将STDERR和STDOUT重定向到文件(覆盖)
< 将STDIN重定向到文件
示例:
echo Hello,Linux > echo.md 打印一段语句,输出到文件
echo cnblogs.com >> echo.md 打印一段语句,追加到文件
ls noexist 2> ls.md 列出目录,将错误信息输出到文件
ls noexist 1> a.md 2>&1 列出目录、输出到文件,并把错误信息合并到标准输出(也输出到文件)
cat > output.md < input.md input.md文件作为标准输入,output.md作为标准输出
2. 管道
管道操作可以实现将一个命令的输出作为另一个命令的输入。管道通常用来组合不同的命令,以实现一个复杂的功能。
操作符:
| 将一个命令的STDOUT作为另一个命令的STDIN
示例:
ls -ld . | cat > ls.md 列出目录信息并输出到文件
参考链接: