find
(精準遞歸搜索)find
是Linux中最強大的文件搜索工具,通過遍歷文件系統實現精準查找,支持按名稱、類型、大小、時間、權限等多條件組合。
基本語法:find [搜索路徑] [條件] [動作]
(默認搜索當前目錄及子目錄,動作默認為-print
輸出結果)。
常用示例:
find /home -name "*.log"
(在/home
目錄下查找所有.log
后綴的文件,區分大小寫);find /var -iname "error*"
(在/var
目錄下查找以error
開頭的文件,忽略大小寫);find /etc -type d -name "nginx"
(在/etc
目錄下查找名為nginx
的目錄,-type d
表示目錄,-type f
表示普通文件);find /tmp -size +100M
(在/tmp
目錄下查找大于100MB的文件,+
表示大于,-
表示小于,單位支持k
(KB)、M
(MB)、G
(GB));find /home -mtime -7
(在/home
目錄下查找7天內修改過的文件,-mtime -n
表示n天內修改,-mtime +n
表示n天前修改);find . \( -name "*.txt" -o -name "*.md" \)
(在當前目錄下查找.txt
或.md
文件,-o
表示“或”,-a
表示“與”,括號需用\
轉義);find /tmp -name "*.tmp" -delete
(刪除/tmp
目錄下所有.tmp
文件,謹慎使用;-exec command {} \;
可將匹配文件傳遞給其他命令,如find . -type f -exec chmod 644 {} \;
批量修改權限)。locate
(快速數據庫檢索)locate
通過預建的文件數據庫(mlocate.db
)實現快速查找,速度遠快于find
,但不支持實時更新(需手動或定時更新數據庫)。
基本語法:locate [選項] [搜索模式]
。
常用示例:
locate nginx.conf
(查找所有包含nginx.conf
的文件路徑);locate -i "*.jpg"
(查找所有.jpg
或.JPG
等格式的文件);locate "*.log"
(查找所有.log
后綴的文件);locate -r "\.conf$"
(查找所有以.conf
結尾的文件,-r
表示使用正則表達式)。sudo updatedb
(強制刷新數據庫,使新文件或刪除文件能及時反映到搜索結果中);crontab -e
修改/etc/crontab
調整更新頻率,如每小時更新一次:5 * * * * root updatedb
)。/tmp
默認不索引,需修改/etc/updatedb.conf
中的PRUNEPATHS
參數)、不支持按文件大小/時間等條件過濾。grep
(文本模式匹配)grep
用于在文件內容中搜索指定的字符串或正則表達式,支持遞歸搜索目錄,是運維和開發中常用的文本分析工具。
基本語法:grep [選項] "搜索模式" [文件...]
(若未指定文件,則從標準輸入讀取數據,如cat file.txt | grep "pattern"
)。
常用示例:
grep "error" /var/log/syslog
(在/var/log/syslog
文件中查找包含error
的行);grep -i "warning" file.txt
(查找file.txt
中不區分大小寫的warning
行);grep -r "404" /var/www/
(在/var/www/
目錄下遞歸查找所有包含404
的文件);grep -n "GET /api" access.log
(顯示匹配行的行號,便于定位);grep --color=auto "pattern" file
(用顏色高亮匹配的文本,提升可讀性);grep -v "debug" log.txt
(顯示不包含debug
的行,過濾無關信息);grep -c "timeout" error.log
(統計error.log
中包含timeout
的行數);grep -A 2 -B 1 "error" syslog
(顯示匹配行及后面2行、前面1行,便于查看上下文)。-E
選項支持擴展正則表達式(ERE),如grep -E "error|fail" log.txt
(查找包含error
或fail
的行),更靈活地匹配復雜模式。which
/whereis
/type
這三個命令用于查找命令的可執行文件路徑、源碼或幫助文檔,適用于快速定位命令的安裝位置。
which
:查找命令的可執行文件路徑基本語法:which [命令名]
(僅搜索$PATH
環境變量中的目錄)。
示例:which ls
(輸出/bin/ls
,顯示ls
命令的可執行文件路徑);which python3
(輸出python3
的安裝路徑,如/usr/bin/python3
)。
whereis
:查找命令的二進制、源碼和幫助文檔基本語法:whereis [命令名]
(快速查找命令的相關文件,如二進制文件、源碼、man手冊)。
示例:whereis python3
(輸出python3
的二進制路徑、源碼路徑和man手冊路徑,如/usr/bin/python3 /usr/lib/python3.10 /usr/share/man/man1/python3.1.gz
)。
type
:判斷命令類型(內置/別名/外部命令)基本語法:type [命令名]
(顯示命令的類型,幫助區分內置命令(如cd
)、別名(如ll
)或外部命令(如ls
))。
示例:type cd
(輸出cd is a shell builtin
,表示cd
是Shell內置命令);type ll
(輸出ll is aliased to 'ls -alF'
,表示ll
是ls -alF
的別名)。
ack
/ag
(The Silver Searcher):高性能代碼搜索ack
和ag
是專為代碼搜索設計的工具,比grep
更快,支持忽略版本控制目錄(如.git
)、自動遞歸搜索、高亮顯示等功能。
安裝:sudo apt-get install ack
(Debian/Ubuntu);sudo yum install ack
(Red Hat/CentOS);ag
同理。
示例:ack "function" /path/to/code
(在/path/to/code
目錄下查找包含function
的代碼行,自動忽略.git
等目錄);ag -i "TODO" src/
(忽略大小寫查找src/
目錄下的TODO
注釋)。
find /path -type f -name "*.tmp" -exec rm {} \;
(刪除/path
目錄下所有.tmp
文件);find src/ -name "*.py" | xargs wc -l
(統計src/
目錄下所有.py
文件的代碼行數)。which ls
(顯示ls
命令路徑);whereis python3
(顯示python3
的相關文件路徑)。grep -rn "error" /var/log/ | grep -v "debug"
(遞歸搜索/var/log/
目錄下的error
行,并過濾掉包含debug
的行)。