05 IO和管道
目录
- 三种I/O设备
- 把I/O重定向至文件
- 使用管道
知识铺垫
1)查看fd-文件描述符 (L)
ll /proc/$$/fd
在Linux中,系统打开文件时会随机分配一个编号,用这个编号来对应打开的文件,这个编号就叫做fd(file descriptor)-文件描述符
2) 人为指定fd
exec Number<>Filename
1、三种I/O设备
- 标准输入(STDIN) Standard In - 0 默认接受来自键盘的输入
- 标准输出(STDOUT) Standard Out - 1 默认输出到终端窗口
- 标准输出(STDERR) Standard Error - 2 默认输出到终端窗口
注意,这里提到的1种输入设备,2种输出设备,默认分别是来自键盘和终端窗口。默认这样的字眼,
说明我们可以改,即输入未必要来自键盘,输出也未必要输出到终端。
怎么做呢?重定向,改变它默认的位置
先来一个简单的
标准输出重定向之一:重定向到终端
1)输出结果重定向到另一个终端窗口
标准输出重定向之二:重定向到文件
2)输出结果还可以重定向到一个文件(最常用的重定向方式)
3)标准错误重定向:将错误信息重定向到文件中去
我们随便敲一个不存在的命令,人为地生成一个系统错误。然后将该错误信息重定向保存到一个文件中,如图中error.log的文件。
思考?标准输出重定向到文件中有何意义?
标准输出重定向到文件中其实很有用,比如我们经常会对一些命令结果进行分析,那么通过输出重定向可以方便的先将保存到文件中,然后再仔细分析。例如我们想通过history命令来查看一段时间以来的行为,就可以先保存到文件中再分析。
3)标准错误重定向:将错误信息重定向到文件中去
我们随便敲一个不存在的命令kiilo,人为地生成一个系统错误。然后将该错误信息重定向保存到一个文件中,如图中error.log的文件。
2>Filename
4)分别分类重定向
>filenameA 2>filenameB
5)将标准输出-1和标准错误-2,统一重定向到一个文件里(俗称洗钱)
cmd >file >2&1
2>&1 表示将”标准错误-2“重定向到1 ,然后一起发给可all.log文件(注意这里语法的顺序看起来不太自然,但是正确的执行顺序)
写法二:新写法
cmd &>file 表示将错误和正确信息一起发往all.log文件
写法三
(cmd 2>&1) > file
----------------------------------------------------------------------------------------------------------------------------------------------------
2、支持的操作符:
> 把SDOUT重定向到文件
2> 把SDERR重定向到文件
&> 把所有输出重定向到文件
3、覆盖和追加