跳轉到

建立 2026-09-14 更新 2026-09-14

重新導向與管線

每個程式預設有三條資料通道:

名稱 編號 預設接到哪
標準輸入 stdin 0 鍵盤
標準輸出 stdout 1 螢幕
標準錯誤 stderr 2 螢幕

重新導向改變的是「接到檔案還是接到另一個程式」,不是指令本身。

寫進檔案:>>>

ls /etc > etc-list.txt
echo "第一行" > notes.txt
echo "第二行" >> notes.txt
  • >覆蓋目標檔(檔不存在就新建)
  • >> 在檔尾追加

> 會立刻把舊內容清掉

即使指令失敗,檔案也可能已經被清空。重要輸出先寫到新檔名,確認無誤再取代舊檔。

錯誤訊息:2>

ls /no-such-dir 2> errors.txt
ls /etc /no-such-dir > out.txt 2> err.txt
ls /etc /no-such-dir > all.txt 2>&1

2>&1 的意思是「讓 stderr 跟著 stdout 走」。兩個都丟掉:

command > /dev/null 2>&1

/dev/null 是無底洞,寫進去的東西直接消失。

管線:|

ls /etc | less
dmesg | tail -n 20
cat /etc/passwd | cut -d: -f1 | sort

左邊的 stdout 變成右邊的 stdin。中間過程不必落地成檔,適合即時過濾。

常見搭配:

ps aux | grep nginx
journalctl -u ssh | grep Failed

xargs:把行變成參數

管線傳的是「標準輸入」,有些指令卻堅持要「命令列參數」,這時用 xargs

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

檔名可能有空白時,改用:

find . -name '*.tmp' -print0 | xargs -0 rm

總結

> 存檔、>> 追加、2> 抓錯誤、| 把指令串起來。下一步用 find 與 grep 在檔案與內容裡搜尋。