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個命令的比較如下表所示:
Linux下4個查找命令which、whereis、locate、find的總結