1. 程式人生 > >whereis與which find locate 區別

whereis與which find locate 區別

linux下的查詢命令有很多,常用的有which、whereis、locate、find。但是它們既然都是查詢,為什麼要用到這麼多種命令?所以今天特意寫一篇文章來分析下這三者的特點和區別。

which 檢視可執行檔案的位置
whereis 檢視檔案的位置
locate 配 合數據庫檢視檔案位置
find 實際搜尋硬碟查詢檔名稱

1、which
這條命令主要是用來查詢系統PATH目錄下的可執行檔案。說白了就是查詢那些我們已經安裝好的可以直接執行的命令。比如:
在這裡插入圖片描述

其中的alias代表的是命令別名。這裡需要說明的是which是可以分辨出命令的別名的,你也可以通過which 命令別名查詢到命令的位置。這點下面要介紹的命令是做不到的。
2、whereis


這個命令可以用來查詢二進位制(命令)、原始檔、man檔案。與which不同的是這條命令可以是通過檔案索引資料庫而非PATH來查詢的,所以查詢的面比which要廣。
引數說明:
-b : 只找二進位制檔案
-m: 只找在說明檔案manual路徑下的檔案
-s : 只找source原始檔
-u : 沒有說明文件的檔案
例如:
在這裡插入圖片描述
將和passwd檔案相關的檔案都查找出來
在這裡插入圖片描述
只將二進位制檔案 查找出來

和find相比,whereis查詢的速度非常快,這是因為linux系統會將系統內的所有檔案都記錄在一個數據庫檔案中,當使用whereis和下面即將介紹的locate時,會從資料庫中查詢資料,而不是像find命令那樣,通過遍歷硬碟來查詢,效率自然會很高。
但是該資料庫檔案並不是實時更新,預設情況下時一星期更新一次,因此,我們在用whereis和locate 查詢檔案時,有時會找到已經被刪除的資料,或者剛剛建立檔案,卻無法查詢到,原因就是因為資料庫檔案沒有被更新。
3、locate


語法:
[[email protected] ~]# whereis [-bmsu] 檔案或者目錄名稱
引數說明:
-b : 只找二進位制檔案
-m: 只找在說明檔案 manual 路徑下的檔案
-s : 只找 source 原始檔
-u : 沒有說明文件的檔案

locate 尋找的資料是由『已建立的資料庫 /var/lib/mlocate/』
裡面的資料所搜尋到的,所以不用直接在去硬碟中存取資料,因此
很快。

4、find
find命令要比前邊幾條複雜的多,功能也強大的多。這條命令是通過直接搜尋硬碟的方式查詢的,所以可以保證查詢的資訊絕對可靠。並且支援各種查詢條件。但是功能強大肯定是有代價的,那就是搜尋速度慢。所以一般前邊幾種找不出來的情況下才會使用find。另外如果要實現某些特殊條件的查詢,比如找出某個使用者的size最大的檔案,那就只能用find了。
語法:
[

[email protected] ~]# find 路徑 引數
引數說明:
時間查詢引數:
-atime n :將n24小時記憶體取過的的檔案列出來
-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的檔案(可以使用萬用字元)

例:搜尋 /home 底下屬於 john 的檔案

總結:

which主要用來查詢可直接執行的命令,可以查詢別名。
whereis比which的搜尋範圍大了一些,同時可以查詢原始檔和man檔案。這兩個命令適用於查詢安裝好的命令。
locate的查詢範圍更大,可以查詢任意型別檔案。適合快速查詢指定檔案。
find最強大也最慢。適合查詢前幾個命令找不到的檔案。