linux 命令 which whereis whatis locate find
whatis:使用mkwhatis命令可將當前系統上所有的幫助手冊及與之對應的關鍵字創建為一個數據庫
1、which?
語法:which ??[-a] ??cmdname1 cmdname2 ......
作用:locate a command,從環境變量PATH中,定位/返回與指定名字相匹配的 命令/可執行文件 所在的路徑
原理:執行which命令時,which會在當前環境變量PATH中依次尋找能夠匹配所找命令名字的可執行文件名,不加-a選項,返回第一個匹配的可執行文件的路徑,否則依次返回滿足條件的所有可執行文件的路徑名。
適用場合:一般用于查找 命令/可執行文件 所在的路徑。有時候可能在多個路徑下存在相同的命令,該命令可用于查找當前所執行的命令到底是哪一個位置處的命令。?
例如:?[root@redhat ~]# which passwd?
/usr/bin/passwd
?
2、whereis?
語法:?whereis [-bmsu] 文件或者目錄名稱?
參數說明:?
- -b : 只找二進制文件?
- -m: 只找在說明文件manual路徑下的文件?
- -s : 只找source源文件?
- -u : 沒有說明文檔的文件?
作用:locate the binary, source, and manual page files for a command,定位/返回與指定名字匹配的二進制文件、源文件和幫助手冊文件所在的路徑。
原理:whereis命令首先會去掉filename中的前綴空格和以.開頭的任何字符,然后再在數據庫(var/lib/slocate/slocate.db)中查找與上述處理后的filename相匹配的二進制文件、源文件和幫助手冊文件,使用之前可以使用updatedb命令手動更新數據庫。
適用場合:二進制文件、源文件和幫助手冊文件路徑的查找。
例如:?
[root@redhat ~]# whereis passwd?
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz?
將和passwd文件相關的文件都查找出來?
[root@redhat ~]# whereis -b passwd?
passwd: /usr/bin/passwd /etc/passwd?
只將二進制文件 查找出來?
和find相比,whereis查找的速度非常快,這是因為linux系統會將系統內的所有文件都記錄在一個數據庫文件中,當使用whereis和locate時,會從數據庫中查找數據,而不是像find命令那樣,通過遍歷硬盤來查找,效率自然會很高。?
但是該數據庫文件并不是實時更新,默認情況下每天更新一次,因此,我們在用whereis和locate查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。?(使用updatedb命令進行更新)
3、 locate?
語法:?locate 文件或者目錄名稱?
作用:find files by name from one or more databases prepared by updatedb. 同whereis指令一樣,也是從數據庫建立的索引中查找,不同的是該命令查找所有部分匹配的文件,使用之前可以使用updatedb命令手動更新數據庫。
原理:默認情況下(當filename中不包含通配符*),locate會給出所有與*filename*相匹配的文件的路徑。
適用場合:沒有文件類型性質的模糊查找(你只記得某個文件的部分名稱)。
個人感覺locate和whereis差不多,locate比較適合與數據庫一起配合著用,locate命令可以在搜尋數據庫時快速找到檔案
[root@redhat ~]# locate passwd?
/lib/security/pam_unix_passwd.so?
/lib/security/pam_passwdqc.so?
/usr/include/rpcsvc/yppasswd.x?
/usr/include/rpcsvc/yppasswd.h?
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph?
/usr/lib/kde3/kded_kpasswdserver.la?
/usr/lib/kde3/kded_kpasswdserver.so?
/usr/bin/vncpasswd?
/usr/bin/userpasswd?
/usr/bin/yppasswd?
?
4、 find?
find有一點復雜,參考博客:https://blog.csdn.net/yucan1001/article/details/8451351
語法:?find 路徑 參數?
參數說明:?
作用:search for files in a directory hierarchy. 從當前目錄遞歸的搜索文件。
原理:遍歷當前工作目錄及其子目錄,find命令是在硬盤上遍歷查找,非常耗硬盤資源,查找效率相比whereis和locate較低。
適用場合:能用which、whereis和locate的時候盡量不要用find.
?
例 如:?
[root@redhat ~]# find / -name zgz?
/home/zgz?
/home/zgz/zgz?
/home/weblogic/bea/user_projects/domains/zgz?
......
?
?
總結:
find,遍歷硬盤查找,通常使用 find / -name Filename。耗內存。locate和whereis是根據數據庫查找,無法實時查找文件。有可能找到剛才刪除的文件和無法找到新增的文件。which根據path找可執行文件。whereis 可以用來找相關安裝路徑和二進制文件,可執行文件。
當我們用whereis和locate無法查找到我們需要的文件時,可以使用find,但是find是在硬盤上遍歷查 找,因此非常消耗硬盤的資源,而且效率也非常低,因此建議大家優先使用whereis和locate。?
總結
以上是生活随笔為你收集整理的linux 命令 which whereis whatis locate find的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: protobuf android 编译,
- 下一篇: 从零开始学习Linux笔记