linux查詢命令which、whereis、find比較解析
阿新 • • 發佈:2018-11-17
which
命令格式
which --help
Usage: /usr/bin/which [options] [--] COMMAND [...]
Write the full path of COMMAND(s) to standard output.
作用
locate a command,從環境變數PATH中,定位/返回與指定名字相匹配的可執行檔案所在的路徑
原理
執行which命令時,which會在當前環境變數PATH中依次尋找能夠匹配所找命令名字的可執行檔名,不加-a選項,返回第一個匹配的可執行檔案的路徑,否則依次返回滿足條件的所有可執行檔案的路徑名。
適用場合
一般用於查詢命令/可執行檔案所在的路徑。有時候可能在多個路徑下存在相同的命令,該命令可用於查詢當前所執行的命令到底是哪一個位置處的命令。
whereis
用法: whereis [選項] 檔案 選項: -b 只搜尋二進位制檔案 -B <目錄> 定義二進位制檔案查詢路徑 -m 只搜尋 man 手冊 -M <目錄> 定義 man 手冊查詢路徑 -s 只搜尋原始碼 -S <目錄> 定義原始碼查詢路徑 -f 終止 <目錄> 引數列表 -u 搜尋不常見記錄 -l 輸出有效查詢路徑
原理:whereis命令首先會去掉filename中的字首空格和以.開頭的任何字元,然後再在資料庫(var/lib/slocate/slocate.db)中查詢與上述處理後的filename相匹配的二進位制檔案、原始檔和幫助手冊檔案,使用之前可以使用updatedb命令手動更新資料庫。
適用場合:二進位制檔案、原始檔和幫助手冊檔案路徑的查詢。
find
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 預設路徑為當前目錄;預設表示式為 -print 表示式可能由下列成份組成:操作符、選項、測試表達式以及動作: 操作符 (優先順序遞減;未做任何指定時預設使用 -and): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 positional options (always true): -daystart -follow -regextype normal options (always true, specified before other expressions): -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race 比較測試 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N -cnewer 檔案 -ctime N -empty -false -fstype 型別 -gid N -group 名稱 -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式 -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 檔案 -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN -readable -writable -executable -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N -used N -user NAME -xtype [bcdpfls] -context 文字 操作: -delete -print0 -printf 格式 -fprintf 檔案 格式 -print -fprint0 檔案 -fprint 檔案 -ls -fls 檔案 -prune -quit -exec 命令 ; -exec 命令 {} + -ok 命令 ; -execdir 命令 ; -execdir 命令 {} + -okdir 命令 ;
作用
search for files in a directory hierarchy. 從當前目錄遞迴的搜尋檔案。
原理
遍歷當前工作目錄及其子目錄,find命令是在硬碟上遍歷查詢,非常耗硬碟資源,查詢效率相比whereis和locate較低。
適用場合
能用which、whereis和locate的時候儘量不要用find.