Unix 哲學核心:「做一件事,做好它;輸出作為下一個程式的輸入。」管道 (|) 將獨立工具串聯成強大資料流水線。本文系統講解管道機制、三大經典過濾器 grep/sort/pg/more 參數與組合實戰。
cmd1 | cmd2:cmd1 標準輸出 → cmd2 標準輸入grep [選項] 模式 [檔案...]
| 選項 | 功能 |
|---|---|
-v | 反向匹配 (輸出不含模式的行) |
-n | 顯示行號 |
-l | 僅列出匹配的檔案名 |
-c | 統計匹配行數 |
-i | 忽略大小寫 |
-r | 遞歸目錄 |
-E | 擴展正則 (ERE) |
-F | 固定字串 (fgrep),速度最快 |
--line-buffered | 行緩衝,配合管道即時輸出 |
# 列出 8 月修改的檔案
ls -l | grep "Aug"
# 管道鏈:過濾 8 月 → 按大小排序 (第 5 欄數值)
ls -l | grep "Aug" | sort -k5 -n
# 遞歸搜尋含 "error" 的 .log 檔,忽略大小寫,顯示行號
grep -rin "error" /var/log/*.log
# 固定字串搜尋 (最快)
grep -F "TODO" src/*.c
sort [選項] [檔案...]
| 選項 | 功能 |
|---|---|
-n | 數值排序 (10 > 2) |
-r | 反向 (降序) |
-f | 忽略大小寫 |
-k N | 指定第 N 欄 (1-based) |
-t 字元 | 指定分隔符 (預設空白) |
-u | 去重 (配合 uniq) |
+N 語法對照sort +4n # 等同 sort -k5 -n (第 5 欄數值升序)
sort +1 -2 # 第 2 欄至第 3 欄
more:向下翻頁 (Space)、向上 (b)、搜尋 (/) —— 僅前向less:雙向捲動、搜尋、標記、F 尾部追蹤 (如 tail -f) —— **推薦**pg:System V 風格,較少見ls -lR /etc | grep "\.conf$" | sort -k5 -nr | less
# 或直接
less +F /var/log/syslog # 即時尾部追蹤
# 找出 404 錯誤最多的前 10 個 URL
awk '$9 == 404 {print $7}' access_log | sort | uniq -c | sort -rn | head -10
# 統計各 IP 請求數前 20
awk '{print $1}' access_log | sort | uniq -c | sort -rn | head -20
# 即時監控 5xx 錯誤
tail -f access_log | awk '$9 ~ /^5/ {print strftime("%H:%M:%S"), $0}'
管道將「小工具」組裝成「大系統」。熟記
grep -v反濾、sort -kNn多欄數值排、less +F即時看,日誌分析無往不利。