打开的文件都有一个fd:file diescriptor (文件描述符)
标准输入(STDIN) -0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置
/dev/null 是相当于垃圾箱
把输出和错误错误重新定向到文件
1、STDOUT和STDERR可以被重定向到文件
命令 操作符号 文件名
支持的操作符号包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
2、 >文件内容会被覆盖
set -c 只能追加
set +c 可以追加
注意图片中的区别 C得到的结果与其他三个不同
合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /PATH/TO/file.out 2>&1 (顺序很重要)
COMMAND >> /PATH/TO/FILE.out 2>&1
():合并多个程序的STDOUT
(cal 2007;cal 2008)> all.txt
标准输入 <
标准输入的重定向格式:
command < file
范例: 利用标准输入重定向,实现备份issue文件
cat >issue.bak < /etc/issue #cat 命令本身既需要标准输入,也有标准输出
tr命令可以接受标准输入进行按指定规则进行转换,并输出到终端窗口
tr [OPTION]...SET1[SET2]
-c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d, --delete:删除指令字符
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
-t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
--help:显示程序用法信息
tr -d '\n' < bc.txt > bc.txt #错误操作,输入文件不能作为输出文件 可以写为
tr -d '\n' < bc.txt > bc.txt.bak
多行标准输入重定向
command <<[-] 分割符
分隔符理论可以是任意普通字符串,但一般习惯的使用EOF (END OF FILE);
分隔符必须独立一行 结束;