Linux中常用的查找文件的命令
? ? 我們經(jīng)常在linux要查找某個(gè)文件,但不知道放在哪里了,可以使用下面的一些命令來(lái)搜索。這些是從網(wǎng)上找到的資料(參考資料1),因?yàn)橛袝r(shí)很長(zhǎng)時(shí)間不會(huì)用到,當(dāng)要用的時(shí)候經(jīng)常弄混了,所以放到這里方便使用。?
- which???????查看可執(zhí)行文件的位置?
- whereis ? ?查看文件的位置?
- locate ? ? ? 配合數(shù)據(jù)庫(kù)查看文件位置?
- find ? ? ? ? ?實(shí)際搜尋硬盤(pán)查詢(xún)文件名稱(chēng)?(find也可以根據(jù)文件大小-size 時(shí)間-atime 正則表達(dá)式-regex)
1、which?
語(yǔ)法:??
[root?@redhat?~]# which 可執(zhí)行文件名稱(chēng)??
例如:??
[root?@redhat?~]# which passwd??
/usr/bin/passwd??
which是通過(guò)?PATH環(huán)境變量?到該路徑內(nèi)查找可執(zhí)行文件,所以基本的功能是尋找可執(zhí)行文件??
2、whereis?
語(yǔ)法:??
[root?@redhat?~]# whereis [-bmsu] 文件或者目錄名稱(chēng)??
參數(shù)說(shuō) 明:??
-b : 只找二進(jìn)制文件??
-m: 只找在說(shuō)明文件manual路徑下的文件??
-s : 只找source源文件??
-u : 沒(méi)有說(shuō)明文檔的文件??
例如:??
[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文件相關(guān)的文件都查找出來(lái)??
[root?@redhat?~]# whereis -b passwd??
passwd: /usr/bin/passwd /etc/passwd??
只將二進(jìn)制文件查找出來(lái)??
和find相比,whereis查找的速度非常快,這是因?yàn)閘inux系統(tǒng)會(huì)將系統(tǒng)內(nèi)的所有文件都記錄在一個(gè)?數(shù)據(jù)庫(kù)文件?(?參考資料1以及大多數(shù)文章中都是這樣描述的,whereis會(huì)在一個(gè)數(shù)據(jù)庫(kù)文件中查找,在參考資料2中找到這個(gè)數(shù)據(jù)庫(kù)文件目錄?/var/lib/slocate/slocate.db,我在服務(wù)器中并沒(méi)有找到這個(gè)目錄,原因應(yīng)該是我沒(méi)有裝locate命令,那么whereis到底是怎么查找的呢??找了很久沒(méi)有,從參考資料3中有一種個(gè)人比較相信的答案,從?/{bin,sbin,etc} ?/usr{lib,bin,old,new,local,games,include,etc,src,man,sbin,X386,TeX,g++-include}?
/usr/local/{X386,TeX,X11,include,lib,man,etc,bin,games,emacs}?中查找,也沒(méi)有去看whereis的源碼,如果有確定的可以交流一下?)中,當(dāng)使用whereis和下面即將介紹的locate時(shí),會(huì)從數(shù)據(jù)庫(kù)中查找數(shù)據(jù),而不是像find命令那樣,通過(guò)遍歷硬盤(pán)來(lái)查找,效率自然會(huì)很高。??
但是?該數(shù)據(jù)庫(kù)文件并不是實(shí)時(shí)更新,默認(rèn)情況下時(shí)一星期更新一次,因此,我們?cè)谟脀hereis和locate 查找文件時(shí),有時(shí)會(huì)找到已經(jīng)被刪除的數(shù)據(jù),或者剛剛建立文件,卻無(wú)法查找到,原因就是因?yàn)閿?shù)據(jù)庫(kù)文件沒(méi)有被更新。??
3、 locate??
語(yǔ)法:??
[root@redhat ~]# locate 文件或者目錄名稱(chēng)??
例 如:??
[root@redhat ~]# locate passwd??
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp??
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp??
/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/lib/ruby/1.8/webrick/httpauth/htpasswd.rb??
/usr/bin/vncpasswd??
/usr/bin/userpasswd??
/usr/bin/yppasswd??
…………??
4、 find??
語(yǔ)法:??
[root@redhat ~]# find 路徑 參數(shù)??
參 數(shù)說(shuō)明:??
時(shí)間查找參數(shù):??
-atime n :將n*24小時(shí)內(nèi)存取過(guò)的的文件列出來(lái)??
-ctime n :將n*24小時(shí)內(nèi)改變、新增的文件或者目錄列出來(lái)??
-mtime n :將n*24小時(shí)內(nèi)修改過(guò)的文件或者目錄列出來(lái)??
-newer file :把比f(wàn)ile還要新的文件列出來(lái)??
名稱(chēng)查找參數(shù):??
-gid n?????? :尋找群組ID為n的文件??
-group name? :尋找群組名稱(chēng)為name的文件??
-uid n?????? :尋找擁有者ID為n的文件??
-user name?? :尋找用戶(hù)者名稱(chēng)為name的文件??
-name file?? :尋找文件名為file的文件(可以使用通配符)??
例 如:??
[root@redhat ~]# find / -name zgz??
/home/zgz??
/home/zgz/zgz??
/home/weblogic/bea/user_projects/domains/zgz??
/home/oracle/product/10g/cfgtoollogs/dbca/zgz??
/home/oracle/product/10g/cfgtoollogs/emca/zgz??
/home/oracle/oradata/zgz??
[root@redhat ~]# find / -name '*zgz*'??
/home/zgz??
/home/zgz/zgz1??
/home/zgz/zgzdirzgz??
/home/zgz/zgz??
/home/zgz/zgzdir??
/home/weblogic/bea/user_projects/domains/zgz??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008??
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005??
當(dāng)我們用whereis和locate無(wú)法查找到我們需要的文件時(shí),可以使用find,但是find是在硬盤(pán)上遍歷查找,因此非常消耗硬盤(pán)的資源,而且效率也非常低,因此建議大家優(yōu)先使用whereis和locate。??
locate 是在數(shù)據(jù)庫(kù)里查找,數(shù)據(jù)庫(kù)大至每天更新一次。??
whereis 可以找到可執(zhí)行命令和man page??
find 就是根據(jù)條件查找文件。??
which 可以找到可執(zhí)行文件和別名(alias)?
參考資料:
1.?http://312788172.iteye.com/blog/730280
2. http://bbs.csdn.net/topics/320154707
3.?http://zhidao.baidu.com/question/122024300.html
?
?
?
?
?
?
這五個(gè)命令也可以參考下面的內(nèi)容:
?
linux中查找命令find、locate、whereis、which、type區(qū)別
1. find
www.2cto.com?
Java代碼?
find是最常見(jiàn)和最強(qiáng)大的查找命令,你可以用它找到任何你想找的文件。與查詢(xún)數(shù)據(jù)庫(kù)(/var/lib/locatedb)文件不同,find查找磁盤(pán)空間?
find的使用格式如下:?
$ find <指定目錄> <指定條件> <指定動(dòng)作>?
- <指定目錄>: 所要搜索的目錄及其所有子目錄。默認(rèn)為當(dāng)前目錄。?
- <指定條件>: 所要搜索的文件的特征。?
- <指定動(dòng)作>: 對(duì)搜索結(jié)果進(jìn)行特定的處理。?
www.2cto.com?
如果什么參數(shù)也不加,find默認(rèn)搜索當(dāng)前目錄及其子目錄,并且不過(guò)濾任何結(jié)果(也就是返回所有文件),將它們?nèi)硷@示在屏幕上。?
find的使用實(shí)例:?
$ find . -name 'my*'?
搜索當(dāng)前目錄(含子目錄,以下同)中,所有文件名以my開(kāi)頭的文件。?
$ find . -name 'my*' -ls?
搜索當(dāng)前目錄中,所有文件名以my開(kāi)頭的文件,并顯示它們的詳細(xì)信息。?
$ find . -type f -mmin -10?
搜索當(dāng)前目錄中,所有過(guò)去10分鐘中更新過(guò)的普通文件。如果不加-type f參數(shù),則搜索普通文件+特殊文件+目錄。?
2. locate
Java代碼?
locate命令其實(shí)是“find -name”的另一種寫(xiě)法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個(gè)數(shù)據(jù)庫(kù)(/var/lib/locatedb),這個(gè)數(shù)據(jù)庫(kù)中含有本地所有文件信息。Linux系統(tǒng)自動(dòng)創(chuàng)建這個(gè)數(shù)據(jù)庫(kù),并且每天自動(dòng)更新一次,所以使用locate命令查不到最新變動(dòng)過(guò)的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動(dòng)更新數(shù)據(jù)庫(kù)。?
locate命令的使用實(shí)例:?
$ locate /etc/sh?
搜索etc目錄下所有以sh開(kāi)頭的文件。?
$ locate ~/m?
搜索用戶(hù)主目錄下,所有以m開(kāi)頭的文件。?
$ locate -i ~/m?
搜索用戶(hù)主目錄下,所有以m開(kāi)頭的文件,并且忽略大小寫(xiě)。?
3. whereis
Java代碼?
whereis命令只能用于程序名的搜索,而且只搜索二進(jìn)制文件(參數(shù)-b)、man說(shuō)明文件(參數(shù)-m)和源代碼文件(參數(shù)-s)。如果省略參數(shù),則返回所有信息。同locate一樣,查詢(xún)數(shù)據(jù)庫(kù)(/var/lib/locatedb)文件?
whereis命令的使用實(shí)例:?
$ whereis grep?
4. which
Java代碼?
which命令的作用是,在PATH變量指定的路徑中,搜索某個(gè)系統(tǒng)命令的位置,并且返回第一個(gè)搜索結(jié)果。也就是說(shuō),使用which命令,就可以看到某個(gè)系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個(gè)位置的命令。?
which命令的使用實(shí)例:?
$ which grep?
5. type
Java代碼?
type命令其實(shí)不能算查找命令,它是用來(lái)區(qū)分某個(gè)命令到底是由shell自帶的,還是由shell外部的獨(dú)立二進(jìn)制文件提供的。如果一個(gè)命令是外部命令,那么使用-p參數(shù),會(huì)顯示該命令的路徑,相當(dāng)于which命令。?
www.2cto.com?
type命令的使用實(shí)例:?
$ type cd?
系統(tǒng)會(huì)提示,cd是shell的自帶命令(build-in)。?
$ type grep?
系統(tǒng)會(huì)提示,grep是一個(gè)外部命令,并顯示該命令的路徑。?
$ type -p grep?
加上-p參數(shù)后,就相當(dāng)于which命令。
轉(zhuǎn)載于:https://www.cnblogs.com/xiohao/p/5509755.html
總結(jié)
以上是生活随笔為你收集整理的Linux中常用的查找文件的命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 正则表达式陷阱
- 下一篇: 在 Linux 中查找和删除重复文件