wiki/运维/Linux/笔记/17.IO重定向.md
2026-04-08 19:40:00 +08:00

2.5 KiB

1、I/O 重定向概览

Linux 程序默认会使用 3 个标准输入输出通道:

  • 标准输入 STDIN:文件描述符 0
  • 标准输出 STDOUT:文件描述符 1
  • 标准错误 STDERR:文件描述符 2

理解这 3 个通道后,重定向和管道就会非常好理解。

2、标准输入输出说明

2.1 标准输入 STDIN

默认从终端读取输入。

2.2 标准输出 STDOUT

默认把正常结果输出到当前终端。

2.3 标准错误 STDERR

默认把错误信息也输出到终端。

虽然默认都显示在终端里,但 STDOUTSTDERR 在逻辑上是两条不同的输出流。

3、输出重定向

3.1 重定向标准输出

command > file

等价于:

command 1> file

表示把标准输出写入文件。

3.2 重定向标准错误

command 2> error.log

表示把错误输出写入文件。

3.3 同时重定向标准输出和标准错误

command &> all.log

表示把正常输出和错误输出都写入同一个文件。

3.4 追加重定向

command >> file
command 2>> error.log

表示追加到文件末尾,而不是覆盖原内容。

4、输入重定向

可以把文件内容作为命令输入:

command < file

例如:

wc -l < /etc/passwd

5、多行重定向 Here Document

Here Document 用于把多行文本直接传给命令输入。

cat > 1.txt <<EOF
1231231
asasssf
EOF

说明:

  • EOF 只是结束标记,不一定必须写成 EOF
  • 也可以换成其他自定义标识符

6、管道 |

管道会把前一个命令的标准输出,作为后一个命令的标准输入。

命令1 | 命令2 | 命令3

6.1 示例

cat /etc/passwd | grep root
ps -ef | grep nginx | wc -l

7、常见使用场景

7.1 保存命令输出

ip addr > ip.txt

7.2 单独保存报错信息

find /root -name "*.log" 2> error.log

7.3 把结果和错误一起保存

bash script.sh &> run.log

7.4 通过管道过滤结果

dmesg | grep -i error

8、小结

  • 012 分别表示标准输入、标准输出、标准错误
  • >1> 用于重定向标准输出
  • 2> 用于重定向错误输出
  • &> 可同时重定向标准输出和错误输出
  • <<EOF 属于多行输入重定向
  • 管道 | 是把前一个命令输出交给后一个命令处理