Linux下的数据流重定向

        前几天看Linux系统运维的面试题,有考到很细微的一些细节,而这些细节又不可忽略,于是随笔记了下来。不得不说Linux里内容太多,想要做一名好的Linux系统运维工程师绝非易事。写给还在路上的自己。

        数据流重定向。相信玩过STM32的童鞋都遇到过这个名词,无论是野火还是原子都把printf重定向到一个串口的输出。今天我们说的是Linux终端里的数据重定向,不过大家如果对这个名词有个概念了的话,会很容理解。

        好了,为何要使用命令输出重定向?当我们需要将屏幕输出的重要信息记录下来,或者不希望后台执行中的程序干扰屏幕正常的输出,或者想记录一些系统例行命令的执行结果时,就需要用到这些数据流重定向命令了。对于键盘和显示器,用得是标准输入stdin(代码0)和标准输出stdout(代码1)。标准错误输出stderr(代码2)是命令执行错误时回传的一些信息。

       1>以覆盖的方式将正确的数据输出到指定的文件或设备中;

       1>>以累加的方式将正确的数据输出到指定的文件或设备中;

        2>以覆盖的方式将错误的数据输出到指定的文件或设备中;

        2>>以累加的方式将错误的数据输出到指定的文件或设备中;

        当把两条数据同时写入一个文件时(覆盖的方式),要用到特殊语法&>

       <:将原本由键盘输入的数据改成由文件内容代替。

       <<:代表输入结束的意思。用法  <<  "字符串",当输入这个字符串时则结束该次输入,跟ctrl+d的效果一样。

       数据流双重定向:tee。tee会同时将数据流送与文件和屏幕;而输出到屏幕的,实际上就是stdout,可以让下一个命令继续操作这些数据。

 

       一些命令执行的判断指令,这些小语法在写shell script时会经常用到:

       :cmd;cmd  不考虑命令的相关性的连续命令执行

       && :两个命令之间有依赖性,主要体现在前一个命令执行的结果是否正确。cmd1 && cmd2  cmd1执行正确则执行cmd2,否则不执行cmd2

       || :cmd1 || cmd2  cmd1执行正确则不执行cmd2,cmd1执行不正确则执行cmd2。

       | :管道命令,仅能处理由前一个命令传来的正确信息,对于stderr没有直接处理能力。

你可能感兴趣的:(Linux)