whereis命令只能用於程式名的搜索,而且只搜索二進位文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。 和find相比,whereis查找的速度非常快,這是因為linux系統會將 系統內的所有文件都記錄在一個資料庫文件中,當使用whereis和下
whereis命令只能用於程式名的搜索,而且只搜索二進位文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。
和find相比,whereis查找的速度非常快,這是因為linux系統會將系統內的所有文件都記錄在一個資料庫文件中,當使用whereis和下麵即將介紹的locate時,會從資料庫中查找數據,而不是像find命令那樣,通過遍歷硬碟來查找,效率自然會很高。
但是該資料庫文件並不是實時更新,預設情況下時一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為資料庫文件沒有被更新。
命令格式:
whereis [-bmsu] [BMS 目錄名 -f ] 文件名
命令功能:
whereis命令是定位可執行文件、源代碼文件、幫助文件在文件系統中的位置。這些文件的屬性應屬於原始代碼,二進位文件,或是幫助文件。
whereis 程式還具有搜索源代碼、指定備用搜索路徑和搜索不尋常項的能力。
命令參數:
-b 定位可執行文件。
-m 定位幫助文件。
-s 定位源代碼文件。
-u 搜索預設路徑下除可執行文件、源代碼文件、幫助文件以外的其它文件。
-B 指定搜索可執行文件的路徑。
-M 指定搜索幫助文件的路徑。
-S 指定搜索源代碼文件的路徑。
whereis 使用舉例:
1. 查找 date 命令的可執行文件、源代碼和man手冊的位置,輸入:
$ whereis date
輸出如下圖:
whereis-command-demo.gif
Animated gif 01: whereis command running on my Debian based server
1.1 如何只搜索二進位文件的位置?
使用 -b 參數 :
$ whereis -b date
1.2 如何只搜索man手冊的位置?
使用 -m 參數:
$ whereis -m date
1.3 如何只搜索源代碼文件的位置?
使用 -s 參數:
$ whereis -s date
2. 如何限制搜索的路徑?
使用下麵的參數限制對應的搜索路徑:
-B /path/to/dir : 限制在指定的目錄搜索二進位文件.
-M /path/to/dir : 限制在指定的目錄搜索man手冊文件.
-S /path/to/dir : 限制在指定的目錄搜索二進位文件.
在使用了-B , -M , -S 任意一個參數時,必須加上 -f 參數, 然後指定要搜索的文件名.
2.1 只在 /bin 目錄下搜索 ls 和gcc。
$ whereis -B /bin -f ls gcc
結果如下:
gcc: /usr/share/man/man1/gcc.1.gz
ls: /usr/share/man/man1/ls.1.gz /bin/ls
2.2 查找所有/usr/bin目錄下的,其man文檔不在 /usr/man/man1/ ,且其源代碼文件不在/usr/src/ 的 文件。
# cd /usr/bin
# whereis -u -M /usr/man/man1 -S /usr/src -f *
關於whereis 的 -u參數的功能,因為不知道whereis的版本,不好查找對應版本的whereis的源代碼,
whereis在git上的代碼地址:https://github.com/karelzak/util-linux/blob/master/misc-utils/whereis.c#L96
反正 -u 參數實際很少使用的,有興趣的可以看下這代碼。
參考地址:http://www.poluoluo.com/server/201502/338955.html
Chocoo
2016.3.9
------------------------------------------------------------------------------------------------------------------------------------------------
Linux新人,歡迎各種指點。
感謝鋒哥指點迷津!