which、whereis、locate跟find這四個都是查詢的指令。
which是找指令,所以它只會到$PATH環境變數設定下的路徑去尋找。
whereis跟locate是找檔案,但是這兩個指令並非直接在硬碟上做搜尋,而是尋找已經建立好的「/var/lib/slocate.db」的資料庫做搜尋。可以直接下updatedb更新資料庫,或是在/etc/cron.daily/slocate.cron設定更新排程。linux剛安裝好時資料庫尚未建立,若是沒有執行updatedb的動作的話,locate指令是找不到任何資料。此外whereis只會找到名稱完全符合的檔案,locate則會找出含有搜尋字串的檔案。find就很花時間,會整個硬諜搜尋檔案,因此也很傷硬諜。
========================================================
find
locate
這個指令和其他三個指令不同的地方是,locate 指令並不是宜的去搜尋檔案,而是去搜尋由 updatedb 指令所建立和更新的資料庫並讀入記憶體中,所以,locate 指令的搜尋速度遠比其他的指令來的快,因此,當阿舍執行 locate hosts 指令後,幾乎是馬上就列出檔案名稱裡有 hosts 這個四個字的所有檔案出來哩 ! 不過,通常優點都是來自弱點,只要是安裝之後,在還沒有執行updatedb 之前,這些新的檔案用 locate 指令是找不到的。
whereis
這個指令只會搜尋幾個特定的路徑,像是 /usr、/bin 或 /etc 等,適合用來搜尋 Ubuntu 的執行檔和原始檔及 man 說明,如果用 whereis host 來搜尋 host 檔,就能夠找出需要的結果,如果用來搜尋家目錄的檔案,就會找不到的。
which
這個指令搜尋的範圍比前一個的 whereis 更小,which 指令只用來搜尋 Ubuntu/Linux 的指令程式,如果,阿舍用 which hosts 的指令來找 hosts 的話,很抱歉喔 ! 一定是找不到的,因為 hosts 不是指令,那麼如果阿舍改成 which which 或 which php5 的話,馬上就會有結果跑出來,因為 which 和 php5 都是指令哩 !
這樣整理下來,阿舍的結論是,要快就用 locate,要準就用 find,要查系統檔案就用 whereis,要查指令就用 which,怕麻煩的話,就只要好好學會 find 指令就可以了。
=========================================================
資料出處: