linux操作之重定向問題怎么解決

    一、概述

    (1)重定向命令列表

    命令 說明
    command > file 將輸出重定向到 file
    command 將輸入重定向到 file
    command >> file 將輸出以追加的方式重定向到 file
    n > file 將文件描述符為 n 的文件重定向到 file
    n >> file 將文件描述符為 n 的文件以追加的方式重定向到 file
    n >& m 將輸出文件 m 和 n 合并
    n 將輸入文件 m 和 n 合并
    將開始標記 tag 和結束標記 tag 之間的內容作為輸入

    (2)文件描述符

    • 0:通常是標準輸入(STDIN)

    • 1:是標準輸出(STDOUT)

    • 2:是標準錯誤輸出(STDERR)

    二、輸出重定向

    (1)命令解析

    command?>?file #執行command然后將輸出的內容存入file。

    注意:  

    file中的內容將會被新內容代替掉,如果不想被全部替代掉而是追加到文件末尾,那就使用>>操作符。

    (2)實例解析

    [root@localhost?~]#?w ?20:41:36?up?55?days,??5:17,??1?user,??load?average:?0.00,?0.01,?0.05 USER?????TTY??????FROM?????????????LOGIN@???IDLE???JCPU???PCPU?WHAT root?????pts/0????223.166.20.53????20:24????0.00s??0.05s??0.00s?w [root@localshost?~]#?w?>?users?#w命令執行后的結果輸出到users文件中 [root@localshost?~]#?ll -rw-r--r--?1?root?root??204?Jan??3?20:41?users [root@localshost?~]#?cat?users?#查看users文件內容,正是w命令執行后的輸出結果 ?20:41:58?up?55?days,??5:17,??1?user,??load?average:?0.00,?0.01,?0.05 USER?????TTY??????FROM?????????????LOGIN@???IDLE???JCPU???PCPU?WHAT root?????pts/0????223.166.20.53????20:24????6.00s??0.05s??0.00s?w [root@localshost?~]#?who root?????pts/0????????2021-01-03?20:24?(223.166.20.53) [root@localshost?~]#?who?>?users?#將who命令執行結果輸出重定向到users文件 [root@localshost?~]#?cat?users?#發現users文件中原先w命令的輸出內容被who命令覆蓋了 root?????pts/0????????2021-01-03?20:24?(223.166.20.53) [root@localshost?~]#?echo?"Hello?world"?>>?users?#使用>>操作符則會追加在后面輸出 [root@localshost?~]#?cat?users root?????pts/0????????2021-01-03?20:24?(223.166.20.53) Hello?world [root@localshost?~]#

    注意:

    上面實例中很多命令行出現了兩個#:

    • 第一個#表示的是當前用戶為root用戶(當是其他用戶時這里會是$符)

    • 第二個#在上面則表示的是注釋的意思。

    三、輸入重定向

    1、命令解析

    unix命令也可以從文件中獲取輸入,語法為:

    command?<p><strong>注意:</strong>  </p><p>輸出重定向是大于號(&gt;),輸入重定向是小于號(</p><h4>2、實例解析</h4><pre class="brush:bash;">[root@localhost?~]#?wc?-l?users 2?users #wc指令可以計算文件的Byte數、字數、或是行/列數,若不指定文件名稱、或是所給予的文件名為"-",則wc指令會從標準輸入設備讀取數據。 [root@localhost?~]#?wc?-l?<p><strong>注意:</strong>  </p><p>第一個例子,會輸出文件名;  </p><p>第二個不會,因為它僅僅知道從標準輸入讀取內容。</p><pre class="brush:bash;">command??outfile #同時替換輸入和輸出,執行command,從文件infile讀取內容,然后將輸出寫入到outfile中。 #理解成,從標準輸入中獲取內容(輸入重定向到infile)作為標準輸出(輸出重定向到outfile)。

    四、深入理解重定向

    上面文件描述符中已經簡單介紹過標準輸入、標準輸出和標準錯誤輸出等,下面再詳細講解。

    1、簡介

    一般情況下,每個 Unix/linux 命令運行時都會打開三個文件:

    1)標準輸入文件(stdin):

    stdin的文件描述符為0,Unix程序默認從stdin讀取數據。

    2)標準輸出文件(stdout):

    stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。

    3)標準錯誤文件(stderr):

    stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。

    默認情況下,command > file 將 stdout 重定向到 file,command

    2、命令詳解

    command?2&gt;file #stderr?重定向到?file command?2&gt;&gt;file #stderr?追加到?file?文件末尾  command?&gt;?file?2&gt;&amp;1 command?&gt;&gt;?file?2&gt;&amp;1 #stdout?和?stderr?合并后重定向到?file  command?file2 #對?stdin?和?stdout?都重定向 #command?命令將?stdin?重定向到?file1,將?stdout?重定向到?file2

    五、Here Document

    Here Document 是 Shell 中的一種特殊的重定向方式,用來將輸入重定向到一個交互式 Shell 腳本或程序。

    1、語法

    它的基本的形式如下:

    command?<p><strong>注意:</strong></p><p>結尾的delimiter 一定要頂格寫,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 縮進。</p><p>開始的delimiter前后的空格會被忽略掉。</p><h4>2、實例解析</h4><p>EOF是END Of File的縮寫,表示自定義終止符。既然可以自定,因此EOF并非具有固定值,可以隨意設置別名,例如在Linux中,按下Ctrl-D可作為EOF代替。</p><p>EOF一般會配合cat能夠多行文本輸出。</p><p><strong>實例如下:</strong></p><pre class="brush:bash;">[root@localhost?~]#?wc?-l??a &gt;?b &gt;?c &gt;?d &gt;?e &gt;?EOF 5?#輸入內容為5行 [root@localhost?~]#?cat??a &gt;?b &gt;?c &gt;?d &gt;?e &gt;?f &gt;?EOF a b c d e f

    EOF也是可以自定義如下所示:

    [root@iZ2ze95cxr3kx9il409khtZ?~]#?cat??a &gt;?b &gt;?c &gt;?d &gt;?CCC a b c d

    執行腳本輸入的時候就可以用如下形式:

    #擁有大量輸入的時候可以用下面的形式,將標準輸入的內容重定向到(輸入到)test.sh文件中。 [root@localhost?~]#?cat?test.sh? &gt;?123123123 &gt;?3452354345 &gt;?asdfasdfs &gt;?EOF [root@localhost?~]#?cat?test.sh? 123123123 3452354345 asdfasdfs [root@localhost?~]#

    ? 版權聲明
    THE END
    喜歡就支持一下吧
    點贊14 分享