首頁 > 環境與工具程式 > pipe(|)

完全掌握管道(|):命令連接的核心工具

管道(pipe)是 Linux/Unix Shell 中用於連接兩個或多個命令的機制,它將一個命令的標準輸出傳遞給下一個命令的標準輸入。當將複雜的任務分解為多個簡單的命令並按順序處理時,它是 Shell 的核心功能之一。就像水管一樣,數據單向流動。

管道概述

管道在 Linux/Unix Shell 中表示為 '|' 符號,它將左側命令的結果傳遞給右側命令的輸入。通過它,用戶可以組合多個命令,構建強大而靈活的數據處理管道。

管道的運作方式

第一個命令的標準輸出(stdout)由 Shell 儲存到一個臨時緩衝區中,然後該緩衝區的內容被傳遞給第二個命令的標準輸入(stdin)。這個過程可以連接多個命令形成一個管道。

管道的特點

  • 單向流動: 數據總是從左到右,單向流動。
  • 數據重用: 前一個命令的結果可以立即作為下一個命令的輸入使用。
  • 模組化: 可以將龐大複雜的任務分解為小而簡單的命令來處理。
  • 效率: 無需創建臨時文件,直接在內存中處理數據,因此效率很高。

管道應用範例

通過使用管道組合多個命令的實用範例,體驗其強大功能。

在文件列表中搜尋特定模式

ls -l | grep json

使用 `ls -l` 命令列出當前目錄的文件,然後使用 `grep` 搜尋包含 'json' 字串的行。這個管道將 `ls -l` 的輸出傳遞給 `grep` 的輸入。

在進程列表中查找特定進程

ps aux | grep nginx | grep -v grep

使用 `ps aux` 命令查看所有進程列表,然後使用 `grep` 過濾出 'nginx' 進程。由於 `grep` 本身也是一個進程,因此需要排除 `grep nginx` 進程。

查找最大的 5 個文件

ls -lh | sort -rh | head -5

使用 `ls -lh` 詳細列出文件,然後使用 `sort -rh` 根據大小(由於 `-h` 選項,以人類可讀的單位排序)進行逆序(`-r`)排序。最後使用 `head -5` 輸出前 5 個結果。

計算當前目錄中 .txt 文件的數量

ls | grep '.txt' | wc -l

使用 `ls` 列出文件,然後使用 `grep` 過濾出 '.txt' 擴展名的文件。最後使用 `wc -l` 計算過濾後的行數(`-l` 選項)以獲取文件的總數量。

組合管道和 xargs 刪除文件

find . -name '*.log' | xargs rm

使用 `find` 命令查找具有特定模式的文件,然後通過 `xargs` 將找到的文件列表作為參數傳遞給 `rm` 命令進行刪除。由於僅用管道難以將參數傳遞給 `rm`,因此與 `xargs` 一起使用。

與重定向 (Redirection) 的區別

重定向與管道一樣常用於控制數據流,但兩者在方式上存在重要差異。

管道 vs. 重定向

  • 管道 (`|`): 將一個命令的**輸出**連接到另一個命令的**輸入**。
  • 重定向 (`>`, `>>`): 將命令的**輸出**發送到文件,或將文件的內容作為命令的**輸入**。

重定向範例

ls -l > file_list.txt

將 `ls -l` 的結果儲存到 `file_list.txt` 文件中。這不會作為其他命令的輸入,而是直接寫入文件。


相關命令

功能上相似或經常一起使用的命令。


相同類別命令