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 :將n24小時內改變、新增的檔案或者目錄列出來 -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最強大也最慢。適合查詢前幾個命令找不到的檔案。