一、标准输入、输出
1. 文件描述符
(1) 定义
每打开一个文件,系统就会分配一个数字作为文件描述符来代表打开的文件,也可以使用exec Number<>手工指定;
实际上是把文件描述符做软链接指向目标文件,所以访问文件描述符的内容和访问目标文件的内容一样。
2. 查看文件描述符
ll /proc/$$/fd
系统默认分配0、1、2、255数字作为文件描述符。
0:标准输入(STDIN),默认接受来自键盘的输入;
1:标准输出(STDOUT),默认输出到终端窗口;
2:标准错误(STDERR),默认输出到终端窗口;
2. 重定向
(1) 合并重定向
(;)
可以把多个命令合并进行重定向。
(2) 输出重定向
>
把标准输出重定向覆盖到文件
>>
把标准输出重定向追加到文件
2>
把标准错误输出重定向文件
> 2>
分别分类重定向
&>
把所有输出重定向到文件
(3) 标准输入重定向
<
标准输入重定向
只要按下回车键,就会重定向输入内容。
支持输入重定向的命令
cat
tr
mail
(4) 多行重定向
<<终止符
多行重导向
只有遇到终止符才会重定向所有输入内容。
终止符必须独立一行,前后不能有任何字符。
(5) 实战功能
标准错误和标准输出重定向同一个文件
Error_Cmd Correctness_Cmd >all.log 2>&1
(Error_Cmd Correctness_Cmd 2>&1) >all.log
将2(标准错误)重定向到1(标准输出),而标准输出重定向到all.log,就能实现标准错误和标准输出重定向同一个文件。
Error_Cmd Correctness_Cmd 2>all.log >&2
将1(标准输出)重定向到2(标准错误),而标准错误重定向到all.log,就能实现标准错误和标准输出重定向同一个文件。
Error_Cmd Correctness_Cmd &> all.log
黑洞文件
> /dev/null
在执行命令过程中,如果不想在屏幕上打印信息,可以重定向到/dev/null文件中。
安全创建空文件
>>
由于>>为追加操作,所以如果目标文件已经存在,不会覆盖、修改文件内容和属性信息,比touch命令更为安全,因为touch命令会修改文件时间。
输出重定向软链接
由于软链接最终指向原始文件,所以使用>重定向软链接,会修改原始文件内容。
输出重定向分区
如果重定向分区,不会破坏分区里的内容。
使用cat命令输入重定向覆盖文件
cat < File > File
会直接把File清空。
使用cat命令输出重定向追加文件
cat < File >> File
会不断追加File原有内容到File。
二、管道符
|
1. 定义
把一个命令的标准输出发送给另一个命令作为标准输入;
可以使用多次管道符。
2. 重定向到多个目标
tee
(1) 定义
把命令1的标准输出保存到文件并作为命令2的标准输出。
(2) 作用
保存不同阶段的输出;
复杂管道的故障排除;
同时查看和记录输出。
3. 实战功能
(1) 通过管道符把标准输出和标准错误都发送给另一个命令作为标准输入
Error_Cmd 2>&1 | Cmd_2
把标准错误转换成标准输出在发送给另一个命令。
Error_Cmd |& Cmd_2
把一个命令的标准输出和标准错误发送给另一个命令,CentOS5及以前的版本不支持。
(2) 计算1+2+3+……+99+100的总和
echo {1..100} | tr ' ' + | bc
seq -s + 100 | bc