Linux命令系列之 - 文本操作 - 重定向和管道
1.标准输入输出
基本概念:
- 程序:指令+数据
- 输入数据:input
- 输出数据:output
- 文件描述符fd:打开的文件都有一个描述符 file descriptor
Linux给程序提供三种IO设备
- 标准输入 STDIN - 0 默认接受来自终端窗口的输入
- 标准输出 STDOUT - 1 默认输出到终端窗口
- 标准错误 STDERR - 2 默认输出到终端窗口
2.I/O重定向redirect
IO重定向:将默认的输入,输出或错误对应的设备改变,指向到新的目标
标准输出和错误重新定向
#格式:
命令 操作符号 文件名
#支持的操作符号如下:
1> 或 > 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把标准输出和错误都重定向
>& 同上
>> 追加标准输出重定向至文件
2>> 追加标准错误重定向至文件
cmd > file.out 2> error.out 标准输出和错误输出各自定向至不同位置
标准输入重定向
tr命令:转换和删除字符
标准输入重定向:如cat < file.txt
多行重定向:
cat file.txt <<EOF
context
EOF
3.管道
3.1 管道
管道符:|
用法:
cmd1 | cmd2 | cmd3
#功能说明
1. 将cmd1的STDOUT发送给cmd2的STDIN,cmd2的STDOUT发送到cmd3的STDIN
2. 所有命令会在当前shell进程的子shell进程中执行
3. 可以组合多种工具的功能
4. STDERR不能通过管道转发,可以利用2>&1或|&实现
3.2 tee命令
tree命令 - 可以重定向到多个目标,经常配合管道符一起使用
用法:
cmd1 | tee [-a] filename | cmd2
#功能说明
1. 可以把cmd1的STDOUT保存在文件filename中,作为cmd2的输入
2. -a选项为追加
#用途:
1. 保存不同阶段的输出
2. 复杂管道的故障排除
3. 同时查看和记录输出
4.重定向特殊符号 -
用法举例:
tar -cvf - /etc | tar -xvf -
#用法说明:
1. 将/etc文件夹内容打包,把打包的数据不是记录到文件,而是传送给STDOUT;
2. 经过管道后,将第一个tar的结果传送给后面的tar,第二个tar的'-'则是取前一个tar的STDOUT;
3. 省去了临时文件file;
4. 整个过程替代了cp命令功能(打包一个地方文件,解压到另一个指定地方);