Linux下4個查詢命令which、whereis、locate、find的總結
本人是Linux的初學者,由於在使用Linux的過程中經常受到各種相似命令工具使用的困擾,遂萌生寫此總結。Linux下查詢相關命令主要有以下4個:which、whereis、locate、find。
(1)which [-a] cmdname1 cmdname2 ......
作用:locate a command,從環境變數PATH中,定位/返回與指定名字相匹配的可執行檔案所在的路徑
原理:執行which命令時,which會在當前環境變數PATH中依次尋找能夠匹配所找命令名字的可執行檔名,不加-a選項,返回第一個匹配的可執行檔案的路徑,否則依 次返回滿足條件的所有可執行檔案的路徑名。
適用場合:一般用於查詢命令/可執行檔案所在的路徑。有時候可能在多個路徑下存在相同的命令,該命令可用於查詢當前所執行的命令到底是哪一個位置處的命令。
(2)whereis [-bmsu] filename1 filename2 .......
作用:locate the binary, source, and manual page files for a command.即:定位/返回與指定名字匹配的二進位制檔案、原始檔和幫助手冊檔案所在的路徑。
原理:whereis命令首先會去掉filename中的字首空格和以.開頭的任何字元,然後再在資料庫(var/lib/slocate/slocate.db)中查詢與上述處理後的filename相匹配的二進 制檔案、原始檔和幫助手冊檔案,使用之前可以使用updatedb命令手動更新資料庫。
適用場合:二進位制檔案、原始檔和幫助手冊檔案路徑的查詢。
(3)locate [option] filename1 filename2 ......
作用:find files by name from one or more databases prepared by updatedb. 同whereis指令一樣,也是從資料庫建立的索引中查詢,不同的是該命令查詢所有部分匹配的檔案,使用之前可以使用updatedb命令手動更新資料庫。
原理:預設情況下(當filename中不包含萬用字元*),locate會給出所有與*filename*相匹配的檔案的路徑。
適用場合:沒有檔案型別性質的模糊查詢(你只記得某個檔案的部分名稱)。
(4)find [option] [path1 path2 ......] [filename]
引數說明:
時間查詢引數:
-atime n: 將n*24小時內access過的檔案列出來
-ctime n: 將n*24小時內狀態發生改變的檔案列出來
-mtime n: 將n*24小時內被修改過的檔案列出來
-newer file: 把比file還要新的檔案列出來
名稱查詢引數:
-gid n: 尋找群組ID為n的檔案
-group name: 尋找群組名稱為name的檔案
-uid n: 尋找擁有者ID為n的檔案
-user name: 尋找擁有者名稱為name的檔案
-name file: 尋找檔名為file的檔案(可以使用萬用字元)
作用:search for files in a directory hierarchy. 從當前目錄遞迴的搜尋檔案。
原理:遍歷當前工作目錄及其子目錄,find命令是在硬碟上遍歷查詢,非常耗硬碟資源,查詢效率相比whereis和locate較低。
適用場合:能用which、whereis和locate的時候儘量不要用find.
4個命令的比較如下表所示: