Alex_McAvoy

想要成为渔夫的猎手

Linux 重定向与管道

【数据重定向】

命令执行过程

当执行一个命令的时候,这个命令可能会由文件读入数据,经过处理后,再将数据输出到屏幕上,输出可能是标准输出,也可能是标准错误输出

标准输入输出

由于输入数据、标准输出、标准错误输出都是默认显示在屏幕上,这就有可能造成屏幕显示混乱,而数据流重定向功能,就是将这些分别传送到其他的文件或设备中,所用的特殊字符如下所示:

  • 标准输入 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 中

感谢您对我的支持,让我继续努力分享有用的技术与知识点!