Linux中常用的查找文件的命令
? ? 我們經常在linux要查找某個文件,但不知道放在哪里了,可以使用下面的一些命令來搜索。這些是從網上找到的資料(參考資料1),因為有時很長時間不會用到,當要用的時候經常弄混了,所以放到這里方便使用。?
- which???????查看可執行文件的位置?
- whereis ? ?查看文件的位置?
- locate ? ? ? 配合數據庫查看文件位置?
- find ? ? ? ? ?實際搜尋硬盤查詢文件名稱?(find也可以根據文件大小-size 時間-atime 正則表達式-regex)
1、which?
語法:??
[root?@redhat?~]# which 可執行文件名稱??
例如:??
[root?@redhat?~]# which passwd??
/usr/bin/passwd??
which是通過?PATH環境變量?到該路徑內查找可執行文件,所以基本的功能是尋找可執行文件??
2、whereis?
語法:??
[root?@redhat?~]# whereis [-bmsu] 文件或者目錄名稱??
參數說 明:??
-b : 只找二進制文件??
-m: 只找在說明文件manual路徑下的文件??
-s : 只找source源文件??
-u : 沒有說明文檔的文件??
例如:??
[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系統會將系統內的所有文件都記錄在一個?數據庫文件?(?參考資料1以及大多數文章中都是這樣描述的,whereis會在一個數據庫文件中查找,在參考資料2中找到這個數據庫文件目錄?/var/lib/slocate/slocate.db,我在服務器中并沒有找到這個目錄,原因應該是我沒有裝locate命令,那么whereis到底是怎么查找的呢??找了很久沒有,從參考資料3中有一種個人比較相信的答案,從?/{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}?中查找,也沒有去看whereis的源碼,如果有確定的可以交流一下?)中,當使用whereis和下面即將介紹的locate時,會從數據庫中查找數據,而不是像find命令那樣,通過遍歷硬盤來查找,效率自然會很高。??
但是?該數據庫文件并不是實時更新,默認情況下時一星期更新一次,因此,我們在用whereis和locate 查找文件時,有時會找到已經被刪除的數據,或者剛剛建立文件,卻無法查找到,原因就是因為數據庫文件沒有被更新。??
3、 locate??
語法:??
[root@redhat ~]# locate 文件或者目錄名稱??
例 如:??
[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??
語法:??
[root@redhat ~]# find 路徑 參數??
參 數說明:??
時間查找參數:??
-atime n :將n*24小時內存取過的的文件列出來??
-ctime n :將n*24小時內改變、新增的文件或者目錄列出來??
-mtime n :將n*24小時內修改過的文件或者目錄列出來??
-newer file :把比file還要新的文件列出來??
名稱查找參數:??
-gid n?????? :尋找群組ID為n的文件??
-group name? :尋找群組名稱為name的文件??
-uid n?????? :尋找擁有者ID為n的文件??
-user name?? :尋找用戶者名稱為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??
當我們用whereis和locate無法查找到我們需要的文件時,可以使用find,但是find是在硬盤上遍歷查找,因此非常消耗硬盤的資源,而且效率也非常低,因此建議大家優先使用whereis和locate。??
locate 是在數據庫里查找,數據庫大至每天更新一次。??
whereis 可以找到可執行命令和man page??
find 就是根據條件查找文件。??
which 可以找到可執行文件和別名(alias)?
參考資料:
1.?http://312788172.iteye.com/blog/730280
2. http://bbs.csdn.net/topics/320154707
3.?http://zhidao.baidu.com/question/122024300.html
?
?
?
?
?
?
這五個命令也可以參考下面的內容:
?
linux中查找命令find、locate、whereis、which、type區別
1. find
www.2cto.com?
Java代碼?
find是最常見和最強大的查找命令,你可以用它找到任何你想找的文件。與查詢數據庫(/var/lib/locatedb)文件不同,find查找磁盤空間?
find的使用格式如下:?
$ find <指定目錄> <指定條件> <指定動作>?
- <指定目錄>: 所要搜索的目錄及其所有子目錄。默認為當前目錄。?
- <指定條件>: 所要搜索的文件的特征。?
- <指定動作>: 對搜索結果進行特定的處理。?
www.2cto.com?
如果什么參數也不加,find默認搜索當前目錄及其子目錄,并且不過濾任何結果(也就是返回所有文件),將它們全都顯示在屏幕上。?
find的使用實例:?
$ find . -name 'my*'?
搜索當前目錄(含子目錄,以下同)中,所有文件名以my開頭的文件。?
$ find . -name 'my*' -ls?
搜索當前目錄中,所有文件名以my開頭的文件,并顯示它們的詳細信息。?
$ find . -type f -mmin -10?
搜索當前目錄中,所有過去10分鐘中更新過的普通文件。如果不加-type f參數,則搜索普通文件+特殊文件+目錄。?
2. locate
Java代碼?
locate命令其實是“find -name”的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫(/var/lib/locatedb),這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。?
locate命令的使用實例:?
$ locate /etc/sh?
搜索etc目錄下所有以sh開頭的文件。?
$ locate ~/m?
搜索用戶主目錄下,所有以m開頭的文件。?
$ locate -i ~/m?
搜索用戶主目錄下,所有以m開頭的文件,并且忽略大小寫。?
3. whereis
Java代碼?
whereis命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。同locate一樣,查詢數據庫(/var/lib/locatedb)文件?
whereis命令的使用實例:?
$ whereis grep?
4. which
Java代碼?
which命令的作用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,并且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。?
which命令的使用實例:?
$ which grep?
5. type
Java代碼?
type命令其實不能算查找命令,它是用來區分某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的。如果一個命令是外部命令,那么使用-p參數,會顯示該命令的路徑,相當于which命令。?
www.2cto.com?
type命令的使用實例:?
$ type cd?
系統會提示,cd是shell的自帶命令(build-in)。?
$ type grep?
系統會提示,grep是一個外部命令,并顯示該命令的路徑。?
$ type -p grep?
加上-p參數后,就相當于which命令。
轉載于:https://www.cnblogs.com/xiohao/p/5509755.html
總結
以上是生活随笔為你收集整理的Linux中常用的查找文件的命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式陷阱
- 下一篇: 一时技痒 不用模拟第一印象的构造 通过三