grep 專注文件**內容**模式匹配,find 專注文件**元數據**(名稱、類型、權限、時間等)查找。兩者結合可解決 90% 以上的 Linux 搜索場景。本文系統整理核心參數、正則語法、實戰範例與組合技巧,適合作為桌邊速查手冊。
grep [選項]... 模式 [文件]...
| 選項 | 說明 |
|---|---|
-i | 忽略大小寫(僅單字符生效) |
-r | 遞歸遍歷子目錄 |
-w | 整詞匹配 |
-l | 僅輸出包含匹配行的文件名 |
-c | 僅輸出匹配行計數 |
-n | 顯示匹配行號 |
-s | 抑制不存在/無匹配錯誤輸出 |
-h | 多文件查詢時不顯示文件名 |
-v | 反向匹配(輸出不包含模式的行) |
\:轉義特殊字符^:行首錨定$:行尾錨定\<:詞首邊界\>:詞尾邊界[...]:字符集合,如 [A][x-y]:字符範圍,如 [A-Z].:任意單字符*:前導字符出現 0 次或多次# 忽略大小寫搜索
grep -i "androiD" logcat.txt
# 遞歸搜索並靜默錯誤
grep -rs "android" .
# 整詞匹配單詞或多選
grep -w "android" logcat.txt
grep -w "android\|ios" logcat.txt
# 僅列出文件名
grep -l "android" .
# 統計出現次數
grep -c "android" .
# 顯示行號
grep -n "android" .
find [路徑] [選項] [動作]
find /data -name dalvi* # 區分大小寫
find /data -iname dalvi* # 忽略大小寫
find /data -name dalvik?cache # ? 匹配單字符
find /data -name dalvik-cach[abe] # [] 匹配任一字符
-type f 普通文件-type d 目錄-type l 符號鏈接-type b/c/p/s 塊/字符設備、管道、socketfind -maxdepth 3 -name "*.conf" # 最大 3 層
find -mindepth 2 -type d # 最小 2 層
find -size +10M # 大於 10MB
find -size -2k # 小於 2KB
find -empty # 空文件/空目錄
單位:c(byte) k(KiB) M(MiB) G(GiB)
find -perm 777
find -user nginx
find -group www
find -uid 500
find -gid 1000
find -mtime -7 # 7 天內修改過
find -mtime +30 # 30 天前修改
find -mmin -60 # 60 分鐘內修改
-atime 訪問時間,-ctime 狀態改變時間。
find -name "a*" -not -name "*b" # 以 a 開頭且不以 b 結尾
find -name "*.log" -a -size +10M # 同時滿足(AND)
find -name "*.tmp" -o -name "*.bak" # 滿足其一(OR)
find -name "app" -print # 默認輸出路徑
find -name "app" -ls # ls -l 風格詳細信息
find -name "app" -ok cat {} \; # 逐個確認執行
find -name "app" -exec ls {} \; # 直接批量執行
注意 {} 前後需空格,\; 結尾不可省略。
# 在當前目錄下所有 .c 文件中搜索 TODO 註釋
find . -name "*.c" -exec grep -n "TODO" {} \;
# 遞歸查找包含 "error" 的日志文件並顯示行號
find /var/log -name "*.log" -exec grep -Hn "error" {} \;
grep 搜內容,find 搜屬性。熟練掌握兩者核心參數與組合用法,能將「大海撈針」轉化為精準定位,大幅提升排障與開發效率。