Linux基础入门--IO重定向及管道

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础入门--IO重定向及管道相关的知识,希望对你有一定的参考价值。


IO重定向及管道

  

一直都提到,程序:指令+数据

  其实程序也有IO,数据的来源有多个地方:文件、外部


可用于输入的设备:文件(linux一切皆文件)

  键盘设备、文件系统上的常规文件加载内容、网卡等;

可用于输出的设备:文件(linux一切皆文件)

  显示器、文件系统上的常规文件输出保存、网卡等;


程序的数据流有三种:

  输入的数据流;<-- 标准输入(stdin),是键盘;

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

  错误输出流:  --> 错误输出(stderr),显示器;


fd: file descriptor,文件描述符;所对应标识符如下:

  标准输入:0

  标准输出:1

  错误输出:2


IO重定向:

  输出重定向:>

    特性:覆盖输出,将anaconda-ks.cfg文件内容覆盖到kk.txt中 

    [[email protected]_1 ~]# cat anaconda-ks.cfg > kk.txt


  输出重定向:>>

    特性:追加输出,从文件尾部加入

    [[email protected]_1 ~]# cat anaconda-ks.cfg >> kk.txt


  错误输出流重定向:2>,2>>(追加)

    [[email protected]_1 sh]# cat test.txt 2> error.log

    [[email protected]_1 sh]# cat error.log 

    cat: test.txt: No such file or directory


    [[email protected]_1 sh]# cat test.log 2>> error.log

    [[email protected]_1 sh]# cat error.log 

    cat: test.txt: No such file or directory

    cat: test.log: No such file or directory

    


  合并正常输出流和错误输出流:

    合并输出流也是有覆盖和追加两种方式:

      (1) &>, &>>

      (2) COMMAND > /path/to/somefile 2>&1

        COMMAND >> /path/to/somefile 2>&1

        [[email protected] tmp]# cat /root/anaconda-ks.cfg >> an.cfg 2>&1

        注解:查看anaconda-ks.cfg文件内容追加到an.cfg中,如有错误输出也将追加到an.cfg文             件中;


  提一下特殊设备:/dev/null

    此特殊设备理解为“数据黑洞”,所有的数据扔进去就会被删除


  set为shell内部命令,可以设置禁止覆盖输出重定向至已存在文件;(Centos 6)

   [[email protected] ~]# set -C

   [[email protected] ~]# cat fstab > issue 

   -bash: issue: cannot overwrite existing file

  

  如果将开启后无法使用重定向功能,此时可使用强制覆盖输出:>|:

   [[email protected] ~]# cat fstab >| issue


  关闭上述特性:

   [[email protected] ~]# set -C

   注:set设定只对当前shell生效


 

  输入重定向:<

    输入重定向就是将“数据”作为命令的数据输入源,从而对数据做一些操作


    先来一个命令:

      tr命令:

        tr - translate or delete characters

        格式:

          tr [OPTION]... SET1 [SET2]

            把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通一一对位转换为               SET2出现的字符


        选项:

          -d:删除字符集合

             

        示例1:

          tr SET1 SET2 < /PATH/FROM/SOMEFILE

          [[email protected]_1 sh]# tr S s < ./issue 

          \s

          Kernel \r on an \m


          注解:将issue中出现所有大写S,转换成小写s


        示例2:

          tr -d SET1 < /PATH/FROM/SOMEFILE

          [[email protected]_1 sh]# tr -d S < ./issue

          \

          Kernel \r on an \m

 

        注意:不修改原文件


    Here Document(此处创建文档):<<

    结束符操作两种方式:

      cat << EOF

      cat > /PATH/TO/SOMEFILE << EOF


      示例:

        [[email protected]_1 sh]# cat << EOF

        > hello

        > EOF

        hello


      解释:

        EOF为结束符,当输入的内容中有EOF时会退出



管道:

  连接程序作用,实现将前一个命令的输出直接定向后一个程序当做输入数据流

  可以多级连接:

    COMMAND1 | COMMAND2 | COMMAND3 | ...


  管道符号: |

    [[email protected]_1 sh]# cat /etc/issue | tr COS cos


  tee命令:

    双向管道,意思是输入数据流保留并在次向后一个程序当做输入数据流

    

    格式: 

      COMMAND | tee /PATH/TO/SOMEFILE


    示例:

      [[email protected] ~]# cat /etc/issue | tee kkk | tr -d ‘6.4‘

      CentOS release  (Final)

      Kernel \r on an \m

      [[email protected] ~]# cat kkk

      CentOS release 6.4 (Final)

      Kernel \r on an \m


    练习1:把/etc/passwd文件的前6行的信息转换为大写字符后输出;

       [[email protected] ~]# head -n 6 /etc/passwd | tr ‘a-z‘ ‘A-Z‘



本文出自 “变相怪杰” 博客,请务必保留此出处http://waldenkk.blog.51cto.com/2410270/1929948

以上是关于Linux基础入门--IO重定向及管道的主要内容,如果未能解决你的问题,请参考以下文章

linux基础05-管道及IO重定向

Linux基础管理—— " 标准IO及重定向及管道 "

输入输出重定向及管道

Linux 入门记录:十Linux 多命令协作:管道及重定向

linux基础篇-11,IO重定向和管道

Linux入门-7 Linux管道重定向以及文本处理