I/O重定向和管道
在我们操作指令的过程中,终端上会有对应的回显,正确时有正确的显示,错误时有错误的显示。而现在我们可以将其进行重定向,让回显进入文件中去
I/O重定向 redirect
I/O重定向:将默认的输入,输出或错误的对应的设备改变,指向新的目标
标准输入输出
Linux给设备提供了三种I/O设备
标准输入(STDIN) -0 默认是接受来自终端窗口的输入
标准输出(STDOUT) -1 默认输出到终端窗口(例如返回结果)
标准错误(STDERR) -2 默认输出到终端窗口(例如报错)
1 | 输入不用更多的使用,因为我们在终端输入指令是就是标准输入 |
标准输出和标准错误重新定向
1和2可以被我们重定向到指定文件,不显示到终端上来
覆盖
1 | # 命令 操作符号 文件名 |
注:可以进行设置让Linux不准进行覆盖
1 | # 这里的设置,-C相当于勾选,+C相当于取消 |
追加
1 | >> 追加 标准输出 重定向至文件 |
可以将正确的输出和错误的输出各指定为不同的文件
1 | # 命令 > 文件1 2> 文件2 |
也可以合并进行重定向
1 | 其中,对/data的查看为标准输出,对/xxx的查看为标准错误 |
错误原因:命令执行时从前到后,当看到标准错误和标准输出重定向到一个文件时,标准输出还没有重定向的具体路径,此时会出现错误,于是标准错误直接输出到终端,而标准输出则根据后面又有的路径输入到all.log文件中(一定要注意顺序问题)
还有另一种用法,但可能会混乱,但一定要区分
1 | ( cat /etc/centos-release /etc/xxx 3>&1 1>&2 2>&3 ) > f1.txt 2> f2.txt |
标准输入重处理
命令 tr
命令tr
:转换或删除字符
1 | # tr [选项] < <输入> |
示例
1 | # 将/etc/issue中的小写字符都转化成大写字符 |
标准输入重定向
符号 < 允许我们改变命令默认的输入来源(从键盘输入改为从文件或其它来源输入)
1 | # <命令> < <作为输入的文件路径> |
常见用法:
1.基本文件输入
1 | wc -l < data.txt |
2.与需要交互式输入的命令配合
1 | ftp -n < ftp_commands.txt |
3.多行输入
1 | cat <<EOF |
4.多行输入变体
1 | cat <<< "这是一行文本" |
管道
将”使命”传递下去
管道符 | 用来连接多个命令
1 | 格式 |
用途:
- 将命令1的输出作为命令2的输入,命令2的输出作为命令3的输入
- 所有命令会在当前shell进程的子shell进程中执行(即并不是当前终端执行)
- 组合多个命令的功能实现精准确定自己需要的内容
1 | # 注:标准错误并不会通过管道转发,需要设置 |
管道符就像一个拼接器,想缝出什么样的功能就要看你能想出什么样的射击了
tee命令–分流
将输出进行分流,开枝散叶!
命令tee
:重定向到多个目标,经常配合管道符一起使用
1 | 命令1 | tee [选项] 文件名 | 命令2 |
功能:
- 保存不同阶段的输出
- 复杂管道的故障排除
- 同时查看(输出回显到终端)和记录输出
1 | hostname|tee a.txt > /dev/null |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 不存在的博客!