bash的重定向

一、简介

        bash的数据流重定向(redirect)是将程序的执结果重新定向到另一文件或者设备。或者把一文件重定向给一程序作为数据来源。默认情况下,命令的执行结果显示在屏幕上。文件系统中,分为:标准输入,标准输出,错误输出。

二、用法

        通常输入一个命令,命令运行过程传输情况通常如下:

        1438930313497043.jpg

        执行一个命令的时候,这个命令可以从文件中传入数据,经过处理之后,正确的数据输出到文件或者设备上,错误的数据也输出到文件或者设备,输出到这两个文件或者设备可以相同或者不同。

    2.1、输入重定向

        格式:command < position  or command << position

            [root@dns ~]# cat < /etc/issue        #/etc/issue作为cat的标准输入来源
            CentOS release 6.5 (Final)
            Kernel \r on an \m
            
            [root@dns ~]# cat <<EOF                #从键盘键入数据作为cat的标准输入来源
            > hello,i'm leon                       #从EOF之后键入数据
            > write by leon
            > thanks
            > EOF                                  #EOF此处结束输入,EOF中间的数据为输入来源
            hello,i'm leon
            write by leon
            thanks
            [root@dns ~]#

    2.2、输出重定向

        2.2.1、标准输出

                        标准输出中,通常在‘>’或者‘>>’号前面加数字1(默认为1,可省略)

                           '>'为覆盖模式,'>>'为追加模式         

            [root@dns ~]# cat /etc/issue > /tmp/issue    #重定向到/tmp/issue
            [root@dns ~]# echo $?                        #查看上条命令状态执行结果
            0
            [root@dns ~]# cat /tmp/issue
            CentOS release 6.5 (Final)
            Kernel \r on an \m
            
            
            [root@dns ~]# cat /etc/shadow >> /tmp/issue     #/etc/shadow内容追加到/tmp/issue文件中
            [root@dns ~]# echo $?                           #查看上条命令状态执行结果
            0
            [root@dns ~]# cat /tmp/issue 
            CentOS release 6.5 (Final)
            Kernel \r on an \m
            
            root:$6$jMs2qfrQ.sqYe71o$hbnsy97.LY3G.kFQGKCGDDIg5XVbNroZiT/f/pzfEUsw.lDxyZuLwnNp32MreoQZZ7G0AErZerCp/9oxjJLSQ0:16620:0:99999:7:::
            bin:*:15980:0:99999:7:::
            daemon:*:15980:0:99999:7:::
            adm:*:15980:0:99999:7:::
            ......
            named:!!:16620::::::
            mysql:!!:16620::::::

         2.2.2、错误输出        
                         错误输出中,通常在‘>’或者‘>>’号前面加数字2(不可省略)

                           '2>'为覆盖模式,'2>>'为追加模式

            [leon@dns ~]$ find / -name "passwd" 2> /tmp/error         #错误输出重定向到/tmp/error
            /selinux/class/passwd
            /selinux/class/passwd/perms/passwd
            /usr/bin/passwd
            /etc/pam.d/passwd
            /etc/passwd
            /tmp/mytest2/pam.d/passwd
            /tmp/mytest1/pam.d/passwd
            /tmp/mytest1/passwd
            [leon@dns ~]$ cat /tmp/error 
            find: `/proc/tty/driver': Permission denied
            find: `/proc/1/task/1/fd': Permission denied
            find: `/proc/1/task/1/fdinfo': Permission denied
            find: `/proc/1/task/1/ns': Permission denied
            find: `/proc/1/fd': Permission denied
            find: `/proc/1/fdinfo': Permission denied
            find: `/proc/1/ns': Permission denied
            ......
            find: `/tmp/mytest1/pki/rsyslog': Permission denied
            find: `/tmp/mytest1/pki/CA/private': Permission denied
            find: `/lost+found': Permission denied
            [leon@dns ~]$ hehe / -name "passwd" 2>> /tmp/error 
            [leon@dns ~]$ tail /tmp/error 
            find: `/etc/named': Permission denied
            find: `/etc/dhcp': Permission denied
            find: `/etc/audisp': Permission denied
            find: `/etc/cups/ssl': Permission denied
            find: `/tmp/mytest2/sudoers.d': Permission denied
            find: `/tmp/mytest1/pki/rsyslog': Permission denied
            find: `/tmp/mytest1/pki/CA/private': Permission denied
            find: `/lost+found': Permission denied
            -bash: hehe: command not found
            -bash: hehe: command not found
            [leon@dns ~]$

        2.2.3、合并重定向

                   command &> position or command &>> position or command >position 2>&1   or command >position 1>&2 

            [leon@dns ~]$ find / -name "passwd" &> /tmp/errorAndright    #错误和正确输出都重定向到/tmp/errorAndright
            [leon@dns ~]$ cat /tmp/errorAndright
            find: `/proc/tty/driver': Permission denied                   #错误输出
            find: `/proc/1/task/1/fd': Permission denied
            find: `/proc/1/task/1/fdinfo': Permission denied
            find: `/proc/1/task/1/ns': Permission denied
            find: `/proc/1/fd': Permission denied
            find: `/proc/1/fdinfo': Permission denied
            find: `/proc/1/ns': Permission denied
            ......
            find: `/proc/3570/task/3570/ns': Permission denied
            find: `/proc/3570/fd': Permission denied
            find: `/proc/3570/fdinfo': Permission denied
            find: `/proc/3570/ns': Permission denied
            find: `/boot/lost+found': Permission denied
            /selinux/class/passwd                                        #标准输出
            /selinux/class/passwd/perms/passwd
            find: `/root': Permission denied
            find: `/usr/lib64/audit': Permission denied
            [leon@dns ~]$ wc -l /tmp/errorAndright                         #查看原文件有多少行
            746 /tmp/errorAndright
            [leon@dns ~]$ find / -name "passwd" &>> /tmp/errorAndright     #以追加模式合并到errorAndright
            [leon@dns ~]$ wc -l /tmp/errorAndright                         #查看追加后文件有多少行
            1492 /tmp/errorAndright
            [leon@dns ~]$

        2.2.4、分别重定向

                      command > position1 2> position2   在指定了正确输出的时候再在后面指定错误输出或者前面错误输出后面正确输出                

             [leon@dns ~]$ find / -name "passwd"  > /tmp/error 2>&1             
            find: `/proc/1731/fd': Permission denied
            find: `/proc/1731/fdinfo': Permission denied
            find: `/proc/1731/ns': Permission denied
            find: `/proc/1735/task/1735/fd': Permission denied
            find: `/proc/1735/task/1735/fdinfo': Permission denied
            find: `/proc/1735/task/1735/ns': Permission denied
            ......
            /tmp/mytest1/pam.d/passwd
            /tmp/mytest1/passwd
            find: `/lost+found': Permission denied

    三、总结

        输入输出重定向分 标准输出,标准输入,错误输出,无论标准输出或者错误输出都可以以追加或者覆盖模式。

        

原创文章,作者:成吉思汗,如若转载,请注明出处:http://www.178linux.com/6882

(0)
成吉思汗成吉思汗
上一篇 2015-08-11
下一篇 2015-08-13

相关推荐

  • rpm管理包

    rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。接下来聊一聊如何安装、卸载、查询、检验rpm类的软件。 安装:…

    2017-08-19
  • 堡垒机-麒麟开源堡垒机内置SSL VPN使用指南

      一、安装 (一)确定服务器的操作系统位数 Windws xp、2000、2003系统,在我的电脑属性里,可以很明显地看到标识。如果没有注明是64位的,那么默认就是32位的 Windows 7 系统在控制面板,点击系统,在系统类型里,标注有操作系统位数 (二)安装VPN客户端 VPN客户端分为32位系统和64位系统二…

    Linux干货 2016-05-29
  • HAProxy 入门及基础负载应用

    A、首介 。。。         HAProxy——开放源代码软件,是一款代理服务器和伪4层的负载均衡软件解决方案。基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持高并发链接,它的工作模式可以将其简单而安全地整合到当前的服务架构中,同时可以保护你的WEB服务器不暴露到…

    Linux干货 2017-05-17
  • linux系统故障排除总结

    常见的系统故障 1.确定文体的故障特征 2.重现故障 3.使用工具收集进一步信息,确定根源在何处 4.排除不可能的原因 5.定位故障:             从简单的问题入手      &…

    Linux干货 2016-09-15
  • 运维必备的”武器库”

    作者总结的干货,拿来分享给大家,满满的全是干货 Blog:http://www.simlinux.comWeibo:http://weibo.com/geekwolf Bootstrapping: Kickstart、Cobbler、rpmbuild/xen、kvm、lxc、Openstack、 Cloudstack、Opennebula、Eucalyplu…

    Linux干货 2015-03-13
  • yum安装报错

    我的系统是centos 6.8 x86 安装bind时出错如下: [root@Ams ~]# yum install bind -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from…

    Linux干货 2016-08-02