Linux搜索文件的5個高效命令的正確使用方法
1. 前言
本文主要講解Linux系統(tǒng)里最常用的5個高效搜索文件的命令,他們分別是which,type,whereis,locate,find
他們的使用分別是:
- which:在PATH路徑變量中,搜索系統(tǒng)命令對應(yīng)文件的目錄位置
- type:用于顯示哪些命令是shell自帶的,哪些命令是外部命令。如何使用選項-p,會顯示外部命令的保存位置,相當(dāng)于which命令。
- whereis:只能用于搜索程序名,選項-b用于搜索二進制文件,即編譯好的文件、選項-m用于搜索用戶手冊文件和選項-s用于搜索源代碼文件
- locate:基于數(shù)據(jù)庫緩存信息顯示文件位置,并不是實時查找,如果想要實時查找,使用前需要手動更新數(shù)據(jù)庫。
- find:Linux系統(tǒng)最常用和最強大的查找命令,用于實時查找硬盤上的文件。
注意:
在這5個命令中,find命令是最慢的,原因是它可以搜索任意類型的文件,并且是實時查找的。
通常先使用whereis或者locate查找文件,如果沒有找到目標(biāo)文件,再用find命令
這是因為whereis與locate通過查詢數(shù)據(jù)庫來定位文件路徑的,所以相當(dāng)快速,比較節(jié)省時間。而find命令是通過實時搜索硬盤的文件的。
locate命令是mlocte軟件套件的一個子命令集,通過以下命令安裝mlocate套件
- [root@CentOS7 ~]# yum -y install mlocate
總下載量:113 k
安裝大小:379 k
Downloading packages:
mlocate-0.26-8.el7.x86_64.rpm | 113 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安裝 : mlocate-0.26-8.el7.x86_64 1/1
驗證中 : mlocate-0.26-8.el7.x86_64 1/1
已安裝:
mlocate.x86_64 0:0.26-8.el7
完畢!
執(zhí)行以下命令手動更新數(shù)據(jù)庫:
- [root@CentOS7 ~]# updatedb
updatedb命令通過讀取/etc/updatedb.conf中的配置,然后搜索整個Linux文件系統(tǒng)的文件,然后更新數(shù)據(jù)庫文件,查找文件直接讀取該數(shù)據(jù)庫
2. 搜索系統(tǒng)命令位置-`which`命令
which命令在PATH變量指定的路徑中,搜索某個系統(tǒng)命令的位置,并且返回第一個搜索結(jié)果。
which命令的格式如下:
- which [-a] command
which命令的參數(shù)如下:
- -a:將所有由PATH目錄中可以找到的命令均列出來,而不是只列出第一個被找到的命令。
使用案例,通過which命令查找wget程序文件所在的目錄位置:
- [root@zcwyou ~]# which wget
/usr/bin/wget
可以看出wget的程序位置
3. 搜索程序相關(guān)的文件命令`whereis`
whereis命令的使用格式如下:
- whereis [-bmsu] 文件或目錄名
whereis命令的選項作用如下:
選項備注-b只搜索程序二進制文件-m只搜索程序?qū)?yīng)的使用手冊-s只搜索程序源文件-u查找不在上述三個選項當(dāng)中的其他特殊文件
使用locate搜索案例:
搜索locate這個命令程序所在的位置:
- [root@CentOS7 ~]# whereis locate
搜索結(jié)果如下,可以看出locate程序的程序文件和手冊文件所在的位置
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
搜索chmod程序的使用手冊文件
- [root@zcwyou ~]# whereis -m chmod
chmod: /usr/share/man/man1/chmod.1.gz
搜索程序相關(guān)的文件命令之whereis
4. 通過`locate`命令搜索文件
locate命令的格式如下:
- locate [-ir] keyword
locate命令的參數(shù)如下:
- -i:忽略大小寫差異;
- -r:后面可接正則表達式的實現(xiàn)方式。
使用案例:
- [root@zcwyou ~]# locate useradd
/etc/default/useradd
/usr/sbin/luseradd
/usr/sbin/useradd
/usr/share/man/de/man8/useradd.8.gz
/usr/share/man/fr/man8/useradd.8.gz
/usr/share/man/id/man8/useradd.8.gz
/usr/share/man/it/man8/useradd.8.gz
/usr/share/man/ja/man8/useradd.8.gz
/usr/share/man/man1/luseradd.1.gz
/usr/share/man/man8/useradd.8.gz
/usr/share/man/ru/man8/useradd.8.gz
/usr/share/man/tr/man8/useradd.8.gz
/usr/share/man/zh_CN/man8/useradd.8.gz
/usr/share/man/zh_TW/man8/useradd.8.gz
5. 使用Linux最強大的搜索命令工具`find`
可以通過find命令查找Linux系統(tǒng)文件上的任何文件
使用Linux最強大的搜索命令工具find
find命令的使用格式如下:
- find [PATH] [option] [action]
5.1 `find`命令基于文件名的搜索
與文件名有關(guān)的參數(shù)如下:
-name filename:查找文件名為filename的文件。filename可使用正則表達式表示。
使用案例:
- [root@CentOS7 ~]# find / -name sz
/usr/bin/sz
查找文件名為sz的文件。
5.2 `find`命令之基于文件大小的搜索
如果想通過文件大小做為搜索條件的話,可以使用以下參數(shù):
- -size xxx:查找剛好等于xxx大小的文件;
- -size -xxx:查找大于xxx的文件;
- -size +xxx:查找小于xxx的文件。
其中,xxx的單位有:
-c字節(jié)byte;
-w 表示漢字(2字節(jié));
-b塊(512字節(jié));
- k表示千字節(jié);
- M 表示兆字節(jié);
- G 表示吉字節(jié)。
find使用案例:
搜索當(dāng)前目錄下大于99KB的文件
- [root@zcwyou ~] # find . -type f -size +99k
搜索當(dāng)前目錄下等于88KB的文件
- [root@zcwyou ~] # find . -type f -size 88k
5.3 `find`命令之基于文件類型的搜索
與文件類型有關(guān)的選項如下:
選項-type 表示定義查找目標(biāo)文件的類型。
TYPE的參數(shù)列表有:
-f :普通文件;
-l:符號連接;
-d:目錄;
-c :字符設(shè)備;
-b :塊設(shè)備;
-s :套接字;
- p:FIFO。
使用案例:
查找/proc目錄下所有類型為socket的文件。
- [root@zcwyou ~] # find /proc -type s
5.4 `find`命令之基于文件時間進行搜索
與時間有關(guān)的參數(shù)共有 -atime、-ctime、-mtime。下面以-mtime說明:
- -mtime n: n為數(shù)字,列出在n天之前的“一天之內(nèi)”被更改過的文件名;
- -mtime +n:列出在n天之前(不含第n天本身)被更改過的文件名;
- -mtime -n:列出在n天之內(nèi)(不含第n天本身)被更改過的文件名;
- -newer file:file為一個存在的文件,列出比file還要新的文件名。
下面以幾個實際寫法解釋此用法:
-mtime +2,表示2天以外的,即從距離當(dāng)前時間的2天前開始算起,往更早的時間推移。
-mtime +1,表示1天以外的,即從距當(dāng)前時間的1天前算起,往更早的時間推移。
-mtime 1, 距離當(dāng)前時間第1天的文件,因此以此為時間點。
使用案例:
查找從現(xiàn)在開始到24小時前,/etc目錄下所有改動過內(nèi)容的文件都會被列出來。
- [root@zcwyou ~] # find /etc -mtime 0
查找/etc目錄下,所有比/etc/passwd文件更新的文件。
- [root@zcwyou ~] # find /ect -newer /etc/passwd
其它更多關(guān)于find命令的使用方法請參考本站的教程:
Linux find命令查找文件34個實用案例
6. 總結(jié)
linux搜索文件的命令必須牢記,系統(tǒng)運維頻繁要用到的,掌握這5大命令的用法能極大提升運維效率。