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 15:05
下一篇 2015-08-13 10:19

相关推荐

  • 马哥教育网络班21期第六周作业

    详细总结VIM编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加# cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit :%s/^[[:space:]]\+/#/…

    Linux干货 2016-08-22
  • N26-第四周作业

    一、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 思路:先用递归操作复制文件,再用chmod改变文件及其下目录权限。 方法一: [root@promote ~]# cp -r /etc/skel /home/tuser1 #复制文件并改名 [root@promote ~]#…

    2017-05-07
  • 进程的基本动作机制

    进程 我们知道硬件到用户使用分为:硬件,内核(系统),软件。 硬件也就是我们常见到的计算机等等,就相当于我们的身体,内核就相当于是我们的大脑,软件就相当于我们的动作。而进程就相当于我们怎么去实现这些动作。 进程是程序的一个具体实现,同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。 进程…

    Linux干货 2016-06-01
  • shell脚本编程 4

    Shell脚本编程4 一、杂项知识整理 1、数组赋值方法: declare -a files files=(/var/log/*.log)通配所有文件也可 2、创建临时文件: mktemp命令:创建的临时文件可避免冲突 mktemp  NAME.XXXX(x至少要出现三个) -d 创建临时目录 –tmpdir=/DIR 指明临时文件所存…

    Linux干货 2016-08-24
  • N23-卡卡琦-第二周

    1、文件管理类命令 常规命令:copy、mv、rm (1).copy 文件复制 用法: 注意:复制文件只是复制文件的数据而不是元数据,但是可以保留元数据的信息。 单源复制:目录是否存在都可以 多源复制:目录必须是存在的 -i:提醒用户操作确认(交互式) -f:强行覆盖 -r:递归复制目录 -p:保留源数据 -a:用于实现归档,做备份 -d:不跟踪符号链接所指…

    Linux干货 2016-12-11
  • 根分区伸缩实验

    众所周知LVM是Linux环境下对 磁盘进行管理的一种机制。用户在安装Linux操作系统时,难以分配合适的硬盘空间,当一个分区存放不下某个文件时,这个文件因为文件系统的限制,也不能 跨越多个分区来存放。而遇到出现某个分区耗尽时,只有使用调整分区大小的工具。随着LVM功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方 便…

    Linux干货 2015-05-27