Linux多命令協作 管道 重定向

2021-09-12 17:24:06 字數 2046 閱讀 4694

感謝linuxcast,感謝蘇勇(nash_su)老師!

開源文化的核心理念之一就是不要重**明輪子,很多的開源軟體都是現有軟體、**、功能的重新組合,就好像通過零件裝配機器一樣,源**的開放和共享讓這成為了可能,同時也大大提高了效率和生產力。

在linux系統中,大多數命令都很簡單,很少出現複雜功能的命令,每個命令往往只實現乙個或者幾個很簡單的功能,我們可以通過將不同的功能的命令組合在一起使用,以達到完成某個複雜功能的目的。

linux下,幾乎所有命令的返回資料都是純文字的(因為命令都是執行在cli下),而純文字形式的資料又是大多數命令的輸入格式,這就讓多命令協作成為可能。

linux的命令行為我們提供了管道和重定向機制,多命令協作就是通過管道和重定向完成的。

命令列shell的資料流有以下定義:

命令通過stdin接收引數或資料,通過stdout輸出結果或通過stderr輸出錯誤。

通過管道和重定向我們可以控制cli的資料流。

示例:

上圖中可以看到,命令的返回結果存到了檔案中,而且新的返回資訊會覆蓋舊的資訊。

這個我們可以看到,命令的返回結果也是儲存在檔案當中,而且新的返回結果追加到原來檔案的結尾,而沒有覆蓋掉。

上圖中輸出的錯誤資訊,通過2>儲存在檔案中,而且也是覆蓋。這樣做檔案會只儲存輸出的錯誤資訊,正常的輸出結果不會顯示,所以我們藉此實現錯誤日誌的功能。

而如果我們既想儲存命令的正常結果,又想儲存錯誤的結果,我們可以使用2>&|,這裡就不在以具體的例項展示了。

上圖中,我們重定向了輸入流,將/etc/passwd檔案的內容傳給前面的命令,實現了查詢/etc/passwd檔案中哪一行含有關鍵字「veeja」的功能。

而在實際應用中,我們用的最多的其實是管道「|」,藉此我們可以實現多命令協作的功能。

比如以下這兩個例項:

我們將第乙個命令的輸出結果作為第二個命令的輸入,實現了查詢ls -l命令列出的文字中含有關鍵字veeja的一行,並將其列出。

上面的例子中,我們查詢根分割槽下所有使用者為「veeja」的檔案,並查詢其中檔名包含video的檔案,我們可以看到,命令輸出了大量的錯誤資訊,所以我們做一些改進,我們將這些錯誤的資訊進行重定向,我們把它重定向到/dev/null中,所有被重定向到/dev/null的資訊都會被丟棄。我們重新執行這個命令:

可以看到我們預期的結果。

that』s all.

環境:軟體版本:virtualbox 4.3.12 r93733

linux系統版本:centos 7 ×86_64 1511

如有紕漏,望不吝指出,不勝感激。

Linux多命令協作 管道及重定向

1.不要重 明輪子 開源文化的核心理念之一就是不要重 明輪子,很多的開源軟體 都是現有軟體 功能的重新組合,就好像通過零件裝配機器一樣,源 的開放和共享讓著這成為了可能,同時也大大的提高了效率和生產力 2.管道和重定向 在linux系統當中,大多數名列都很簡單,很少出現複雜功能的命令,每個 命令往往...

linux多命令協作 管道及重定向

linux 幾乎所有命令的返回資料都是純文字的,多命令協作稱為可能 cat 檢視檔案內容 more 以翻頁形式檢視檔案內容 向下翻頁 less 以翻譯形式檢視檔案內容 上下翻頁 head 檢視檔案的開始10行 或指定行數 tail 檢視檔案結束10行 或指定行數 名稱 說明編號 預設stdin標準輸...

Linux多命令協作 管道及重定向

管道和重定向 命令通過stdin接收引數或資料,通過stdout輸出結果或通過stderr輸出錯誤 通過管道和重定向我們可以控制cli的資料流標準輸入 標準輸出 標準錯誤 將stdout重定向到檔案 追加 注意只能儲存標準輸出資訊,錯誤資訊不可以儲存 2 2代表標準錯誤的編號將stderr重定向到檔...