新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一篇對大家學習,理解linux很有用的文章

        一篇對大家學習,理解linux很有用的文章

        作者: 時間:2016-09-12 來源:網絡 收藏

        由于大多數命令都以參數的形式在命令行上指定輸入文件的文件名,所以輸入重定向并不經常使用。盡管如此,當要使用一個不接受文件名作為輸入參數的命令,而需要的輸入內容又存在一個文件里時,就能用輸入重定向解決問題。

        1. 輸出重定向

        輸出重定向是指把命令(或可執行程序)的標準輸出或標準錯誤輸出重新定向到指定文件中。這樣,該命令的輸出就不顯示在屏幕上,而是寫入到指定文件中。

        輸出重定向比輸入重定向更常用,很多情況下都可以使用這種功能。例如,如果某個命令的輸出很多,在屏幕上不能完全顯示,那么將輸出重定向到一個文件中,然后再用文本編輯器打開這個文件,就可以查看輸出信息;如果想保存一個命令的輸出,也可以使用這種方法。還有,輸出重定向可以用于把一個命令的輸出當作另一個命令的輸入(還有一種更簡單的方法,就是使用管道,將在下面介紹)。

        輸出重定向的一般形式為:命令>文件名。例如:

        $ ls > directory.out

        $ cat directory.out

        ch1.doc ch2.doc ch3.doc chimp config mail/ test/

        $

        將ls命令的輸出保存為一個名為directory.out的文件。

        注:如果>符號后邊的文件已存在,那么這個文件將被重寫。

        為避免輸出重定向中指定文件只能存放當前命令的輸出重定向的內容,shell提供了輸出重定向的一種追加手段。輸出追加重定向與輸出重定向的功能非常相似,區別僅在于輸出追加重定向的功能是把命令(或可執行程序)的輸出結果追加到指定文件的最后,而該文件原有內容不被破壞。

        如果要將一條命令的輸出結果追加到指定文件的后面,可以使用追加重定向操作符>>。形式為:命令>>文件名。例如:

        $ ls *.doc>>directory.out

        $ cat directory.out

        ch1.doc ch2.doc ch3.doc chimp config mail/ test/

        ch1.doc ch2.doc ch3.doc

        $

        和程序的標準輸出重定向一樣,程序的錯誤輸出也可以重新定向。使用符號2>(或追加符號2>>)表示對錯誤輸出設備重定向。例如下面的命令:

        $ ls /usr/tmp 2> err.file

        可在屏幕上看到程序的正常輸出結果,但又將程序的任何錯誤信息送到文件err.file中,以備將來檢查用。

        還可以使用另一個輸出重定向操作符(>)將標準輸出和錯誤輸出同時送到同一文件中。例如:

        $ ls /usr/tmp > output.file

        利用重定向將命令組合在一起,可實現系統單個命令不能提供的新功能。例如使用下面的命令序列:

        $ ls /usr/bin > /tmp/dir

        $ wc –w /tmp/dir

        459

        統計了/usr/bin目錄下的文件個數。

        管 道

        將一個程序或命令的輸出作為另一個程序或命令的輸入,有兩種方法,一種是通過一個臨時文件將兩個命令或程序結合在一起,例如上個例子中的/tmp/dir文件將ls和wc命令聯在一起;另一種是Linux所提供的管道功能。這種方法比前一種方法更好。

        管道可以把一系列命令連接起來,這意味著第一個命令的輸出會作為第二個命令的輸入通過管道傳給第二個命令,第二個命令的輸出又會作為第三個命令的輸入,以此類推。顯示在屏幕上的是管道行中最后一個命令的輸出(如果命令行中未使用輸出重定向)。

        通過使用管道符“|”來建立一個管道行。用管道重寫上面的例子:

        $ ls /usr/bin|wc -w

        1789

        再如:

        $ cat sample.txt|grep High|wc -l

        管道將cat命令(列出一個文件的內容)的輸出送給grep命令。grep命令在輸入里查找單詞High,grep命令的輸出則是所有包含單詞High的行,這個輸出又被送給wc命令,wc命令統計出輸入中的行數。假設sample.txt文件的內容如下:

        Things to do today:

        Low:Go grocery shopping

        High:Return movie

        High:Clear level 3 in Alien vs. Predator

        Medium:Pick up clothes from dry cleaner

        那么該管道行的結果是2。

        命令替換

        命令替換和重定向有些相似,但區別在于命令替換是將一個命令的輸出作為另外一個命令的參數。常用命令格式為:

        command1 `command2`

        其中,command2的輸出將作為command1的參數。需要注意的是這里的`符號,被它括起來的內容將作為命令執行,執行后的結果作為command1的參數。例如:

        $ cd `pwd`

        該命令將pwd命令列出的目錄作為cd命令的參數,結果仍然是停留在當前目錄下。

        第二十二課 在Bash中的操作      2000年/5月/29日

        命令和文件名擴展特性

        Bash命令行具有命令和文件名擴展特性。當輸入一個還沒完成的命令或文件名時,只需鍵入Tab鍵就能激活命令和文件名擴展特性,從而完成該命令的剩余輸入。如果有多個命令或文件的前綴相同,Bash將響鈴并等待用戶輸入足夠的字符,以便選擇唯一的命令或文件名,如果找到,系統將自動補齊搜索到的命令或文件名,用戶按回車鍵后,系統將執行這條指令。例如:

        $ cat pre

        $ cat preface

        Bash也能列出當前目錄下部分匹配的文件名來完成文件名擴展。如果鍵入Esc,然后鍵入?,shell將列出所有與輸入的字符串相匹配的文件名。例如下例,在沒有完成的輸入后鍵入Esc ?,shell將列出所有與輸入的字符串相匹配的字符串,然后shell回顯命令行,根據列出的文件名,可以鍵入要輸入的文件名或按下Tab鍵來完成文件名擴展。例如:

        $ ls

        document docudrama

        $ cat doc

        document

        docudrama

        $ cat docudrama

        [例】下面是一個目錄包含的文件列表:

        Firebird2.7.tgz Firebird.README Firebird2.60.tgz

        FireBird Firebird2.60.tgz.README

        現在要刪除Firebird2.60.tgz.README文件,鍵入:

        $ rm –f Fi

        系統會發出警報聲,并且自動將命令行補全為:

        $ rm –f Fire

        并等待用戶進一步輸入文件名的后面部分?,F在再鍵入:

        b



        關鍵詞: 學習 linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 积石山| 奇台县| 定安县| 隆林| 凤冈县| 交城县| 平武县| 鹤岗市| 遂宁市| 台南县| 泉州市| 宣汉县| 柯坪县| 宁波市| 增城市| 林芝县| 宁强县| 漾濞| 台东县| 板桥市| 曲麻莱县| 富蕴县| 昌宁县| 衡山县| 民权县| 大同县| 嘉义市| 黄冈市| 三门县| 寻甸| 鹤山市| 太谷县| 佛山市| 抚宁县| 淮滨县| 西充县| 新竹县| 临海市| 郯城县| 班戈县| 广宗县|