Linux基础知识之IO重定向

该博文以CentOS6.8_x86_64系统为基础,Xshell 5远程连接CentOS系统,以root身份登录系统。 

什么是I/O重定向?

      所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(codeblock)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本。

     输入输出设备:

      可用于输入的设备:文件(键盘设备,文件系统上的常规文件,网卡等)

      可用于输出的设备:文件(显示器,文件系统上的常规文件,网卡等)

      程序的数据流有三种:

            输入的数据流:<– 标准输入(stdin),键盘

            输出的数据流:–> 标准输出(stdout),显示器

            错误的数据流:–> 错误输出(stdorr),显示器

      fd:file description ;文件描述符

            标准输入 0

            标准输出 1

            错误输出 2

      IO重定向:

         输出重定向:>、>>、2>、2>>、&>、&>>

            >添加:覆盖输出

           >>特性:追加输出

      a.关闭和开启覆盖输出重定向:

          ①set -C :关闭覆盖输出重定向至已存在的文件(仅对当前shell进程有效)

     (以cat /etc/inittab > /tmp/inittab.out1 为例)

blob.png

          ②set +C :开启覆盖输出重定向至已存在的文件(仅对当前shell进程有效)、

      (以cat /etc/inittab > /tmp/inittab.out1为例)

blob.png

     b.>覆盖输出重定向的具体的用法

           ①cat /PATH/TO/SOMEFILE > /XXX/YYY

      以cat /etc/inittab > /tmp/inittab.out为例。(cat /tmp/inittab.out 文件较大只显示其中的一部分,即/etc/inittab文件的上半部分。 )

blob.png

          ②cat /PATH/TO/SOMEFILE > /dev/(ttyX or pts/X) X为终端号

     以cat /etc/inittab > /dev/tty1为例(不建议直接将输出的信息发送到tty1上面)

在Xshell上面登录的/pts/1终端,执行上面的命令

blob.png

在CentOS6.8的tty1终端上面显示出/etc/inittab的内容(内容显示为inittab文件的前几行)

blob.png

          ③cat /PATH/TO/SOMEFILE > /dev/XXX 是一件非常危险的事情,输出的数据可能直接将/dev/XXX某些数据直接擦除(由于该项操作比较危险,建议不要使用,所以本篇博文,不做演示)

          ④cat /PATH/TO/SOMEFILR > /XXX/YYY(/XXX/YYY是一个已经存在里面存在数据的文件,然后/XXX/YYY里面的数据会随着第二次的输入而改变)

       首先将/etc/fstab输出至/tmp/fstab.out,查看/tmp/fstab.out已经存在/etc/fstab的内容,然后将/etc/inittab输出至/tmp/fstab.out,再查看/tmp/fstab.out中原来的内容已经被/etc/inittab的内容所取代。blob.png

          ⑤cat /PATH/TO/SOMEFILE >| /XXX/YYY(使用set -C 将覆盖输出重定向关闭输出至已存在的文件,需要强制输出至已存在的/XXX/YYY 文件)

          以/etc/inittab > /tmp/inittab.out1为例

blob.png

          ⑥cat /PATH/TO/SOMEFILE > /XXX/YYY (/PATH/TO/SOMEFILE是一个错误的地址或者一个不存在的地址)

       以/etc/inittabb > /tmp/inittab.out2为例,当/etc/inittabb是一个错误的路径时,覆盖输出至/tmp/inittab.out2,本设定应该没有任何信息输出,但输出了一部分的信息,该信息不是标准输出,是错误的输出(stderr)

blob.png

       c.>>追加输出重定向的具体的用法

        追加输出重定向的用法等同于覆盖输出重定向的用法,但是稍微有一些不同,本博文就简单的去介绍一下追加输出重定向。

    以/etc/issue > /tmp/issue.out /etc/inittab >> /issue.out为例,将/etc/issue输出至/issue.out中,将/etc/inittab追加输出重定向至/issue.out中,可以发现/etc/issue和/etc/inittab两个文件连接到一块,可以发现追加输出是将第一个追加到第二个的后面输出。

blob.png

         结论:

      覆盖输出重定向和追加输出重定向时,将命令执行正确的结果输出(覆盖输出或者追加输出)到要输出的/XXX/YYY中,当命令结果执行错误时,直接显示到屏幕上面,即错误输出(stderr)。

         d.错误输出流重定向 2>,2>> 

        cat /PATH/TO/SOMEFILE 2> /XXX/YYY

        cat /PATH/TO/SOMEFILE 2>> /XXX/YYY

      以/etc/issue 2> /tmp/error.out为例,当cat /etc/issue命令执行正确的时候,将cat命令执行的结果输出到屏幕上面,当cat /etc/issuea(issuea文件不存在)命令执行错误的时候,将cat命令报错的信息输出到/tmp/error.out下面。

blob.png

     结论:

      该结论和输出重定向的结论相反,当命令执行正确的时,将命令执行的结果输出到屏幕上面来,当命令执行错误的时候,将命令执行错误的提醒输出到/XXX/YYY文件中。

       e.合并正常输出流和错误输出流

        cat /PATH/TO/SOMEFILE &> /XXX/YYY

    以/etc/issue &> /tmp/inittab.out3 /etc/issaue &> /tmp/inittab.out3 为例,不管是正确的执行结果还是错误的执行结果都会输出到/tmp/inittab.out3中

blob.png

        cat /PATH/TO/SOMEFILE &>> /XXX/YYY

    以/etc/issue &> /tmp/inittab.out3 /etc/issue &>> /tmp/inittab.out3为例,不管是正确的执行结果还是错误的执行结果都会输出到/tmp/inittab.out3中

blob.png

        cat /PATH/TO/SOMEFILE >> /XXX/YYY 2>&1

    以cat /etc/inittab >> /tmp/inittab.out4 2>&1为例,不管是正确的执行结果还是错误的执行结果都会输出到/tmp/inittab.out4中

blob.png

   结论:

    无论是执行结果的正确与否,都会输出到指定的文档之中。

      f.输入输出重定向

         cat << EOF

    将字符输入给cat,当输入EOF结尾之后,cat直接将输入的字符输出到屏幕上面。

         cat > /PATH/TO/SOMEFILE << EOF

     将字符输入给cat,当输入EOF结尾之后,cat直接将输入的字符输出重定向到/PATH/TO/SOMEFILE中。

blob.png

原创文章,作者:sjsir,如若转载,请注明出处:http://www.178linux.com/26029

(0)
sjsirsjsir
上一篇 2016-07-26
下一篇 2016-07-26

相关推荐

  • 8.16

    for 循环是相对比较简单的循环,任何一个循环里面都可以嵌套循环,用for可以解决简单逻辑上的任何循环 。 有两种基本格式:for i in " ";do         或者dor((i=0;i<=9;i++))可以嵌套if或者while等循环 if循环。最重要的是判断的条件,if意为如果什…

    Linux干货 2016-08-19
  • Linux-进程管理

    本小节介绍  1、进程的描述  2、用户怎么样管理进程  3、进程管理的命令 进程的概念        内核的功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等。        Pro…

    2017-07-02
  • zabbix报警信息提取

    zabbix报警信息提取     在日常的监控中,我们除了日常的zabbix操作外,我们有的时候还涉及到与其他公司进行数据对接。由于别的公司的数据对接很多时候并不是按照zabbix的数据结构(尤其是大型厂家,或是专业监控厂家,并不会直接使用zabbix,多数是自己开发或是对其他监控软件进行二次开发之类),在这种需求基础…

    Linux干货 2015-12-19
  • 姗姗来迟的第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。     [root@www /]# cp -r /etc/skel /home/tuser1 &&&nbsp…

    Linux干货 2016-11-30
  • 权限管理练习题

    权限管理练习题:     1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?         不能cd到该目录下,不能ls -l访问目录里面文件元数据的信息    &nbsp…

    Linux干货 2016-08-04
  • LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

    逻辑卷缩减 缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统。 第一步要先取消挂载(必须) 第二部检查文件完整性(必须) e2fsck -f /dev/vg0/lv0 第三部文件系统缩减,先缩减文件系统. resize2fs /dev/vg0/lv0 10G  (缩减到剩下10G) 第四步逻辑卷组的缩减 lvreduc…

    Linux干货 2016-09-06