2.5 KiB
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
默认把错误信息也输出到终端。
虽然默认都显示在终端里,但 STDOUT 和 STDERR 在逻辑上是两条不同的输出流。
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、小结
0、1、2分别表示标准输入、标准输出、标准错误>和1>用于重定向标准输出2>用于重定向错误输出&>可同时重定向标准输出和错误输出<<EOF属于多行输入重定向- 管道
|是把前一个命令输出交给后一个命令处理