【数据重定向】
命令执行过程
当执行一个命令的时候,这个命令可能会由文件读入数据,经过处理后,再将数据输出到屏幕上,输出可能是标准输出,也可能是标准错误输出
标准输入输出
由于输入数据、标准输出、标准错误输出都是默认显示在屏幕上,这就有可能造成屏幕显示混乱,而数据流重定向功能,就是将这些分别传送到其他的文件或设备中,所用的特殊字符如下所示:
- 标准输入 stdin:代码为 0,使用
<
或<<
表示 - 标准输出 stdout:代码为 1,使用
>
或>>
表示,为命令执行成功所回传的正确信息 - 标准错误输出 stderr:代码为 2,使用
2>
或2>>
表示,为命令执行失败所回传的错误信息
而对于 >
与 >>
来说,其区别如下:
1>
:以覆盖的方法将正确的数据输出到指定文件或设备上1>>
:以累加的方法将正确的数据输出到指定文件或设备上2>
:以覆盖的方法将错误的数据输出到指定文件或设备上2>>
:以累加的方法将错误的数据输出到指定文件或设备上
如下例,在键入 ll > ~/testFile
后,屏幕并没有任何输出信息,而是创建了一个名为 testFile 的文件,打印该文件可以发现,其内容就是键入 ll
命令后的正确输出信息
垃圾桶黑洞
有时,我们知道错误信息会发生,但并不想将出现的错误信息打印或存储到文件中,这时就可以采用黑洞设备 /dev/null
,这个黑洞设备可以吃掉任何导向该设备的信息
【管道】
将一个命令的输出作为另一个命令的输入,一种方法是通过一个临时文件将两命令结合在一起,另一种是使用 Linux 自带的管道功能,即通过 |
来连接命令
管道可以将一系列的命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又作为第三个命令的输入,以此类推,最终显示在终端上的,是管道行中最后一个命令的输出
需要注意的是,管道命令只会处理标准输出,且必须要能够接受前一个命令的输出作为下一个命令的标准输入,对于标准错误输出会进行忽略
例如,统计系统中当前登录的用户数
此外,当某些命令需要用到文件名来进行处理时,stdin 与 stdout 可以利用 -
来代替由管道传输而来的数据流
【双向重定向】
重定向会将数据流整个传送给文件或设备,因此除非去读取该文件或设备,否则无法利用这个数据流
tee
命令会将数据流输出到文件与屏幕,输出到屏幕的,就是标准输出 stdout,可以让下个命令继续处理
tee
命令的基本格式为:tee [-a] file
对于 -a 选项,其会以累加的方式,将数据加入到 file 中