重定向和管道

2021-06-19 02:46:17 字數 1837 閱讀 9691

重定向和管道

第 3 章 命令列簡介

程序(包括圖形應用程式,但不包括絕大多數守護程式)至少使用三個檔案描述符:標準輸入、標準輸出和標準錯誤輸出

。它們相應的序號是 0、1 和 2。一般來說,這三個描述符與該程序啟動的終端相關聯,其中輸入為鍵盤。重定向和管道的目的是重定向這些描述符。本節中的例項將幫助您更好地了解這些概念。

假設您想要一張 images 目錄中所有以 .png 結尾的檔案[6]列表。該列表非常長,因此您會想把它先放到乙個檔案中,然後在有空的時候檢視。您可以輸入下述命令:

$ ls images/*.png 1>file_list

這表示把該命令的標準輸出(1)重定向到(>)file_list 檔案。其中的 > 操作符是輸出重定向符。如果要重定向到的檔案不存在,它將被建立;不過如果它已經存在,那麼它先前的內容將被覆蓋。不過,該操作符預設的描述符就是標準輸出,因此就不用在命令列上特意指出。所以,上述命令可以簡化為:

$ ls images/*.png >file_list

其結果是一樣的。然後您就可以用某個文字檔案檢視器(比如 less)來檢視。

現在,假定您想要知道這樣的檔案有多少。不用手工計數,您可以使用 wc (單詞計數(word count)

)這個工具。使用其 -l 選項將在標準輸出上顯示檔案的行數。所以,您可以:

wc -l 0

就可以得到期望的結果。其中的 < 操作符是輸入重定向符,並且其預設重定向描述符是標準輸入(即 0)。因此您只需:

wc -l

假定您又想去掉其中所有檔案的「副檔名」,並將結果儲存到另乙個檔案。要完成這一功能可以使用 sed (流編輯器(stream editor)

)。您只要將 sed 的標準輸入重定向為 file_list,並將其輸出重定向到結果檔案 the_list。

sed -e 's/\.png$//g' the_list

您所需要的就已被建立,並等待您在有空的時候用任何檢視器檢視。

重定向標準錯誤輸出也很有用。例如:您會想要知道在 /shared 中有哪些目錄您不能夠訪問。乙個辦法是遞迴地列出該目錄並重定向錯誤輸出到某個檔案,並且不要顯示標準輸出:

ls -r /shared >/dev/null 2>errors

這表示標準輸出將被重定向到(>)/dev/null(所有輸出到此特殊檔案的東西都將被丟棄,即不顯示標準輸出),並將標準錯誤輸出(2)重定向到(>)errors 檔案。

管道在某種程度上是輸入和輸出重定向的結合。其原理同物理管道類似:乙個程序向管道的一端傳送資料,而另乙個程序從該管道的另一端讀取資料。管道符是 |。讓我們再來看看上述檔案列表的例子。假設您想直接找出有多少對應的檔案,而不想先將它們儲存到乙個臨時檔案,您可以:

ls images/*.png | wc -l

這表示將 ls 命令的標準輸出(即檔案列表)重定向到 wc 命令的輸入。這樣您就直接得到了想要的結果。

您也可以使用下述命令得到「除去副檔名」的檔案列表:

ls images/*.png | sed -e 's/\.png$//g' >the_list

或者,如果您想要直接檢視結果而不想儲存到某個檔案:

ls images/*.png | sed -e 's/\.png$//g' | less

管道和重定向不僅僅只能用於人類可以閱讀的文字檔案。例如下述來自 終端 的命令:

xwd -root | convert - ~/my_desktop.png

將把您桌面的截圖儲存到您個人目錄中的 my_desktop.png 檔案[7]。

下也一樣!

管道和重定向

重定向輸出 ls l 1.txt 這條命令,把本應該在標準輸出 檔案描述符為1 裝置上顯示的內容重定向到了 1.txt 檔案中,而在標準輸出中不會有任務顯示 如果當前目錄下,1.txt檔案存在,則新內容會覆蓋1.txt裡的所有內容.不存在則會在當前目錄中新建乙個1.txt ls l 2.txt 這條...

管道和重定向

重定向 將標準輸出重定向到檔案 覆蓋 如 echo wudi outfile 將標準輸出重定向到檔案 追加到後面 如 echo jiaying outfile 2 將標準錯誤重定向到檔案 覆蓋 2 1 將標準輸出和標準錯誤結合 重定向標準輸入,如 grep root etc passwd 在pass...

重定向和管道

linux給程式提供三種i o裝置 標準輸入 stdin 0 預設接受來自鍵盤的輸入 標準輸出 stdout 1 預設輸出到終端視窗 標準錯誤 stderr 2 預設輸出到終端視窗 由於linux提供給我們的三種標準io裝置並不能滿足所有的情況,於是有了io重定向,將檔案輸出流定向至指定的檔案 終端...