bash的重定向

一、簡介

        bash的數據流重定向(redirect)是將程序的執結果重新定向到另一文件或者設備?;蛘甙岩晃募囟ㄏ蚪o一程序作為數據來源。默認情況下,命令的執行結果顯示在屏幕上。文件系統中,分為:標準輸入,標準輸出,錯誤輸出。

二、用法

        通常輸入一個命令,命令運行過程傳輸情況通常如下:

        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.www58058.com/6882

(0)
成吉思汗成吉思汗
上一篇 2015-08-11 15:05
下一篇 2015-08-13 10:19

相關推薦

  • N28-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令:cp、mv、rm 1.1 cp命令 用法: cp [OPTIONS]…[-T] SOURCE DEST cp SRC DEST而言,SRC是文件時 如果目標不存在: 新建DEST,并將SRC中內容填充至DEST中 如果目標存在: 如果DEST是文件:將SRC中的內容覆蓋至DE…

    Linux干貨 2017-12-15
  • bash功能特性一 變量

    一、什么是shell     shell是為了使用戶能夠操作應用程序的接口程序。如經常使用的圖形界面及命令行界面都是shell。下面來介紹一下bash這個shell的功能。 二、變量的概念     被命名的內存空間即為變量,Linux中內置了許多變量,我們可以通過修改這些變量的值…

    Linux干貨 2015-04-19
  • java基礎篇—內存分析

    Java的并發采用的是共享內存模型(而非消息傳遞模型),線程之間共享程序的公共狀態,線程之間通過寫-讀內存中的公共狀態來隱式進行通信。多個線程之間是不能直接傳遞數據交互的,它們之間的交互只能通過共享變量來實現 同步是顯式進行的。程序員必須顯式指定某個方法或某段代碼需要在線程之間互斥執行。 1、多線程通信 1.1 內存模型 Java線程之間的通信由Java內存…

    Linux干貨 2015-03-16
  • 自定義命令別名及引用結果

    自定義命令別名及引用結果 alias alias命令用來設置指令的別名。我們可以使用該命令可以將一些較長的命令進行簡化。 語法 alias(選項)(參數) 選項 -p:打印已經設置的命令別名。 參數 命令別名設置:定義命令別名,格式為“命令別名=‘實際命令’” 實例 顯示已設置的別名 [root@localhost ~]# alias alias cp=’c…

    Linux干貨 2018-03-11
  • N25期第四周作業

    1.復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 cp -r /etc/skel /home/tuser1 chmod -R go= /home/tuser1 2.編輯/etc/group文件,添加組hadoop echo “hadoop:x:1080” >> /…

    Linux干貨 2016-12-26
  • diy自己的linux

    準備一臺liunx的機器,我用的是liunx虛擬機 單獨加載一塊硬盤,我加載了一塊20G的硬盤,然后用fdisk /dev/sdb進行分區,sdb1用來作為將來系統的/boot分區,所有100M就可以了,sdb2用來作為將來系統的/分區,我給了10G。然后將兩個分區格式化為ext4系統。 mkdir /mnt/boot mkdir /mnt/sdc2 mou…

    Linux干貨 2016-09-14
欧美性久久久久