管道

基本概念

管道可以把一個命令嘅輸出作為下一個命令嘅輸入, 喺命令行環境中通過符號 | 嚟表示,係一種進程間嘅單向通信形式,基於文件描述符實現。

工作原理

管道會創建咗內存緩衝區,兩個進程(命令)通過呢個緩衝區通信。

創建管道

使用 | 創建管道時,Shell 會調用 pipe() 嚟創建管道,包含兩個文件描述符。

  • 寫入端文件描述符:A
  • 讀取端文件描述符:B

命令連接

  • 左側命令:把標準輸出(文件描述符 1)重定向到管道嘅寫入端 A
  • 右側命令:把標準輸入(文件描述符 0)重定向到管道嘅讀取端 B

數據流動

  • 實時數據傳輸:兩邊嘅命令會並行執行,唔會等前一個命令結束。
  • 無臨時文件:數據喺內存中傳遞。
  • 緩衝區大小:取決於系統。

查看緩衝區大小

cat /proc/sys/fs/pipe-max-size
1048576

局限性

  • 單向通信:雙向通信需要使用其他機制,如命名管道(FIFO)或套接字。
  • 緩衝區大小:如果緩衝區滿咗,上游命令會暫停。