## 1、I/O 重定向概览 Linux 程序默认会使用 3 个标准输入输出通道: - **标准输入** `STDIN`:文件描述符 `0` - **标准输出** `STDOUT`:文件描述符 `1` - **标准错误** `STDERR`:文件描述符 `2` 理解这 3 个通道后,重定向和管道就会非常好理解。 ## 2、标准输入输出说明 ### 2.1 标准输入 `STDIN` 默认从终端读取输入。 ### 2.2 标准输出 `STDOUT` 默认把正常结果输出到当前终端。 ### 2.3 标准错误 `STDERR` 默认把错误信息也输出到终端。 虽然默认都显示在终端里,但 `STDOUT` 和 `STDERR` 在逻辑上是两条不同的输出流。 ## 3、输出重定向 ### 3.1 重定向标准输出 ```shell command > file ``` 等价于: ```shell command 1> file ``` 表示把标准输出写入文件。 ### 3.2 重定向标准错误 ```shell command 2> error.log ``` 表示把错误输出写入文件。 ### 3.3 同时重定向标准输出和标准错误 ```shell command &> all.log ``` 表示把正常输出和错误输出都写入同一个文件。 ### 3.4 追加重定向 ```shell command >> file command 2>> error.log ``` 表示追加到文件末尾,而不是覆盖原内容。 ## 4、输入重定向 可以把文件内容作为命令输入: ```shell command < file ``` 例如: ```shell wc -l < /etc/passwd ``` ## 5、多行重定向 Here Document Here Document 用于把多行文本直接传给命令输入。 ```shell cat > 1.txt < ip.txt ``` ### 7.2 单独保存报错信息 ```shell find /root -name "*.log" 2> error.log ``` ### 7.3 把结果和错误一起保存 ```shell bash script.sh &> run.log ``` ### 7.4 通过管道过滤结果 ```shell dmesg | grep -i error ``` ## 8、小结 - `0`、`1`、`2` 分别表示标准输入、标准输出、标准错误 - `>` 和 `1>` 用于重定向标准输出 - `2>` 用于重定向错误输出 - `&>` 可同时重定向标准输出和错误输出 - `<