重新導向與管線
每個程式預設有三條資料通道:
| 名稱 | 編號 | 預設接到哪 |
|---|---|---|
| 標準輸入 stdin | 0 | 鍵盤 |
| 標準輸出 stdout | 1 | 螢幕 |
| 標準錯誤 stderr | 2 | 螢幕 |
重新導向改變的是「接到檔案還是接到另一個程式」,不是指令本身。
寫進檔案:> 與 >>
>會覆蓋目標檔(檔不存在就新建)>>在檔尾追加
> 會立刻把舊內容清掉
即使指令失敗,檔案也可能已經被清空。重要輸出先寫到新檔名,確認無誤再取代舊檔。
錯誤訊息: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 走」。兩個都丟掉:
/dev/null 是無底洞,寫進去的東西直接消失。
管線:|
左邊的 stdout 變成右邊的 stdin。中間過程不必落地成檔,適合即時過濾。
常見搭配:
xargs:把行變成參數
管線傳的是「標準輸入」,有些指令卻堅持要「命令列參數」,這時用 xargs:
檔名可能有空白時,改用:
總結
> 存檔、>> 追加、2> 抓錯誤、| 把指令串起來。下一步用 find 與 grep 在檔案與內容裡搜尋。