标准的I/O和管道

 

程序:指令+数据

    系统自带了许多二进制程序,这些二进制程序共有两部分组成,一部分是指令,一部分是数据。

    指令就是指二进制程序中的内容,然而程序的运行,也需要数据来支撑。

 

标准输出  STDOUT  -1   standard  output

    输入命令所呈现在屏幕上的内容称之为标准输出,但是不是所有的命令都有标准输出。例如cd  rm后面不跟参数时,就没有标准输出。

    标准输出的默认设备就是当前终端窗口。

标准错误  STDERR  -2  standard  error

    当命令的错误使用时,所显示在屏幕上的报错信息为标准错误。

    标准错误的默认设备也是当前终端窗口。

标准输入  STDIN  -0  standard  input

    键盘所输入的内容称为标准输入

I/O重定向  

改变I/O设备的默认位置  用“>”来实现重定向

 

 

 

>”标准输出的具体用法:

  1如果下图中ls.log这个文件不存在,则自动创建。

wKiom1eeusPwcYq9AAFeGZ_hrFQ787.png-wh_50

  2如果重新重定向到ls.log文件中,则现有内容会覆盖原有内容。

wKioL1eeu2LD9FIoAAGQQNVk_AU578.png-wh_50

   3如果不想覆盖,想保留原有数据,则用“>>”。

wKiom1eeu7KzQ4-RAAI4ZYALpdE095.png-wh_50

注意:

不是所有$SHELL都支持重定向。例如:

wKiom1eevCviihZvAAB65f9POBs164.png-wh_50

        “>是用来重定向正确的信息的,不能用来重定向错误信息。

wKioL1eevM-xYs-xAACDo-vK3ng294.png-wh_50

   若想重定向错误信息用命令,用命令“2>”。

wKiom1eevWrT1CJ5AADKYd9jPOo830.png-wh_50

   4、当正确命令和错误命令一起执行时,如何把错误信息和正确信息分别从定向到不同的文件夹中该如何实现???

wKiom1eevdvSphCkAAHs3lhPzA4945.png-wh_50

wKioL1eevhbA4DpcAABTZ3dy0Ts828.png-wh_50

wKioL1eevlHx9he2AAJ7IoPrs4E215.png-wh_50

   5如果错误信息和正确信息放在同一个文件中呢?中间加“&

wKioL1eevqGw5JICAAMJ5Z50rI0756.png-wh_50

         或执行下面这条命令也可以。但是命令顺序不能错。

wKioL1eevvaB090OAABUJdod4JE420.png-wh_50

   6多个文件内容合并到一个文件中去。

wKiom1eevz3QrFuNAADJNYaeJE4048.png-wh_50

    7、多条命令重定向

wKioL1eev4DQzTMUAAFzXwNdhD4965.png-wh_50

<”标准输入的重定向的具体用法:

     1一些命令需要键盘把一些重要的数据输入到系统中进行处理,例如发送电子邮件。

wKioL1eewJCi1BVmAAE1a3tQfqE552.png-wh_50

    2、多行一块处理

      Cat命令执行后,输入内容,其每一行都要执行一遍,完全没有必要。

wKiom1eewOTTGezlAADXRtD3Clg195.png-wh_50

    用“<<”可以实现多行一块执行,其中“E”表示多行的开始,随便什么内容。但是结束时,要跟前面的开始符号保持一致,也就是下图中也要用“E”结尾。只要不输入结束符,其每行的内容始终不会执行,只要输入结束符,其多行内容都会一块执行。

wKioL1eewSbQuG-vAAGGLfTFl9k130.png-wh_50

 Tr 命令的具体用法:

     1、小写字母转换成大写字母

wKioL1eewXLwpHQjAAGs-8bVBvE185.png-wh_50

   2、也可以实现“abc”转换“xyz

wKioL1eewdWgFP58AABzlYeksZI782.png-wh_50

   3tr  -d

        只删除含有a bc 的字符

wKiom1eewhzxlwf1AACKF5cWRZE040.png-wh_50

    4、tr  -s

         将重复的字符合并成一个

wKioL1eewmiRmQYDAAD-eMCJ8Ao439.png-wh_50

     5/n     回车换行

    新建一个文件f1,用hexdump查看二进制编码,有/n,表示回车换行,tr -d命令删除,结果如下图。

wKiom1eewrfi11FOAAFGCytXqMU533.png-wh_50

        也可以将空格转化成“/n”表示回车换行。

wKiom1eewv2C6zi-AADKCOp5dhw393.png-wh_50

    6tr  -c   除了aa的补集全部替换。

wKiom1eew1rgyvf4AADqZX6-x34003.png-wh_50

管道(使用符号“|”表示)用来连接命令

   使用方法:

    1、将$USER的执行结果用管道符“|”传给tr作为参数执行小写字母转换大写字母。

wKiom1eew5jSP9VFAAB67Z6K0sw534.png-wh_50

 2、电子邮件也可以用管道符传

wKioL1eew92yDo7VAABb37av5iQ234.png-wh_50

    3、管道接收的是标准输出,不接受标准错误。但是如果要想接收标准错误,用命令| &,表示前面命令无论成功失败,统统可以用管道来处理。

           wKioL1eey2iDmiheAAChZd7nH7U548.png-wh_50

    4、也可以用管道进行多次处理,以得到我们想要的结果。

wKioL1eey-3RbWaOAACBoHnCzOk340.png-wh_50

    5|tee   既能将输出结果显示到屏幕上,也能输入到文件中。

wKiom1eezEODjkhcAAGsrKI48-M927.png-wh_50

   若管道所输出的文件不存在,则会自动创建。下图中的f4文件本身不存在。

wKioL1eezIGR7IM9AAFHRpkG7Dg653.png-wh_50

    6、Set  -C

    文件原有内容不想被覆盖则可以用set-C将覆盖禁止。但是该命令只对当前终端有效,若终端退出再重新登录,该命令也会失去作用。

wKiom1eezNjxU55WAAEJJcEUFJg510.png-wh_50

     但是可以累加。

wKioL1eezRayAu5aAADqpGX1jqw965.png-wh_50

     若想取消禁止覆盖则用命令“set +C”。