1.程序的数据流有三种:
输入的数据流;<-- 标准输入(stdin),键盘;
输出的数据流:--> 标准输出(stdout),显示器;
错误输出流: --> 错误输出(stderr),显示器;
2.fd: file descriptor,文件描述符,是动态的;打开文件后会分配一个临时文件描述符;每个运行的进程都会对其打开的文件都会分配以下这三个临时文件描述符,用一个整数表示,对每个程序而言打开的文件都会有这三个数据流;
stdin:0
stdout:1
stderr:2
3.IO重定向:
1.输出重定向:>
特性:覆盖输出
输出重定向:>>
特性:追加输出
注:# set -C,禁止覆盖输出重定向至已存在的文件;此时可使用强制覆盖输出:>|
# set +C,关闭上述特性
错误输出流重定向:2>, 2>>
合并正常输出流和错误输出流的两种方式:
(1) &>, &>>
(2) COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
2.输入重定向:<
COMMAND < /PATH/FROM/SOMEFILE
3.字符转换:tr命令:
tr [OPTION]... SET1 [SET2]
用法1: 把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符
tr SET1 SET2 < /PATH/FROM/SOMEFILE
用法2:删除字符集1中出现的字符
tr -d SET1 < /PATH/FROM/SOMEFILE
注意:不修改原文件
结束标记(Here Document,此处创建文档):<<
COMMAND << STRING
在此处创建文档;遇到STRING结束,STRING可自定义但不能与输入内容相同,一般为END|EOF(结束符); 用法:
COMMAND(cat) << EOF
覆盖:COMMAND > /PATH/TO/SOMEFILE << EOF
追加:COMMAND >> /PATH/TO/SOMEFILE << EOF
4.管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
COMMAND1 | COMMAND2 | COMMAND3 | ...
tee命令:从标准输入读数据,并写到标准输出和文件中,即两路输出;
COMMAND | tee /PATH/TO/SOMEFILE
使输出即输出到文件一份,又输出到屏幕上一份;