小白干貨:使用 Find 和 Locate 命令在 Linux 中搜索文件
?本指南將介紹如何使用 find 命令。這將幫助您使用各種過(guò)濾器和參數(shù)搜索系統(tǒng)上的文件。并簡(jiǎn)要介紹 locate 命令,該命令可用于以不同方式搜索文件。
按名稱查找
搜索文件最直接的方法就是按名稱搜索,要使用 find 命令按名稱查找文件,可以用以下語(yǔ)法:
find -name "query"
這種方式搜索會(huì)區(qū)分大小寫。如果要按名稱查找文件但忽略大小寫,請(qǐng)使用 -iname 選項(xiàng):
find -iname "query"
如果要查找不匹配某個(gè)關(guān)鍵字的所有文件,可以使用 -not?或者! 反轉(zhuǎn)搜索:
find -not -name "query_to_avoid"
find ! -name "query_to_avoid"
按類型查找
也可以使用 -type? 選項(xiàng)指定要查找的文件類型。如下操作,搜索/dev目錄錄下的 b(塊設(shè)備):
[root@LinuxProbe ~]# find /dev -type b
以下是一些可用于指定文件類型的選項(xiàng):
f: 常規(guī)文件
d: 目錄
l: 符號(hào)鏈接
c: 字符設(shè)備
b: 塊設(shè)備
可以使用如下命令搜索所有以 .conf 結(jié)尾的文件。該示例在 /etc 目錄中搜索匹配的文件:
[root@LinuxProbe ~]# find /etc -type f -name "*.conf"
按時(shí)間和大小過(guò)濾
find 提供了多種按文件大小和時(shí)間過(guò)濾結(jié)果的方法。
文件大小
可以使用 -size 參數(shù)按文件大小過(guò)濾文件。為此,必須在數(shù)值的末尾添加一個(gè)特殊的后綴,表示按字節(jié)、兆字節(jié)、千兆字節(jié)還是其他大小來(lái)計(jì)算大小。以下是一些常用的尺寸后綴:
c: bytes
k: kilobytes
M: megabytes
G: gigabytes
b: 512-byte blocks
為了說(shuō)明這一點(diǎn),以下命令將查找 /usr 目錄中正好為 50c 的每個(gè)文件、大于20M的文件、小于1M的文件:
[root@LinuxProbe ~]# find /usr -size 50c
[root@LinuxProbe ~]# find /usr -size +20M
[root@LinuxProbe ~]# find /usr -size -1M
時(shí)間
對(duì)于系統(tǒng)上的每個(gè)文件,Linux 都存儲(chǔ)有關(guān)訪問(wèn)時(shí)間、修改時(shí)間和更改時(shí)間的時(shí)間數(shù)據(jù)。
-atime: Access Time, 文件最后一次被讀寫的時(shí)間.
-mtime: Modification Time, 文件內(nèi)容最后一次被修改的時(shí)間.
-ctime: Change Time, 文件的inode元數(shù)據(jù)最后一次更改的時(shí)間.
例如,要查找 /usr 目錄中最近一天內(nèi)修改過(guò)的文件,請(qǐng)運(yùn)行以下命令:
[root@LinuxProbe ~]# find /usr -mtime 1
如果查找最近兩天內(nèi)訪問(wèn)過(guò)的文件,可以運(yùn)行以下命令:
[root@LinuxProbe ~]# find /usr -atime -2
要查找上次更改元信息超過(guò) 3 天的文件,可以執(zhí)行以下操作:
[root@LinuxProbe ~]# find /usr -ctime +3
這些選項(xiàng)還具有可用于指定分鐘而不是天的配套參數(shù),這將給出在一分鐘內(nèi)修改過(guò)的文件。:
[root@LinuxProbe ~]# find /var/log -mmin -1
按所有者和權(quán)限查找
還可以分別使用 -user? 和 -group? 參數(shù)按擁有文件的用戶或組搜索文件。若要查找 chrony? 用戶在/var 目錄中擁有的文件,請(qǐng)運(yùn)行以下命令:
[root@LinuxProbe ~]# find /var -user chrony
同樣,可以通過(guò)鍵入以下命令指定kmem?組在/etc目錄中擁有的文件 :
[root@LinuxProbe ~]# find / -group kmem
也可以使用-perm選項(xiàng)搜索指定權(quán)限的文件:
[root@LinuxProber ~]# find /var/log -perm 644
對(duì)查找結(jié)果執(zhí)行命令
你可以使用以下語(yǔ)法使用 -exec? 參數(shù)對(duì)找到匹配項(xiàng)的所有內(nèi)容執(zhí)行任意操作。{}? 用作查找匹配文件的占位符。這 \;讓 find 知道命令在哪里結(jié)束。
例如,查找/etc?目錄中的*.conf?文件,并使用ls -l列出文件信息:
[root@LinuxProbe ~]# find /etc -name "*.conf" -exec ls -l {} \;
使用 locate 查找文件
使用 find 的替代方法是 locate 命令。此命令通常更快,并且可以輕松搜索整個(gè)文件系統(tǒng)。在centos8中,可以使用yum包管理器來(lái)安裝mlocate包:
[root@LinuxProbe ~]# yum -y install mlocate
locate 比 find 快的原因是它依賴于列出文件系統(tǒng)上所有文件的數(shù)據(jù)庫(kù)。該數(shù)據(jù)庫(kù)通常每天使用 cron 腳本更新一次,但也可以使用 updatedb 命令手動(dòng)更新它。下面運(yùn)行此命令:
[root@LinuxProbe ~]# updatedb
例如搜索關(guān)鍵字"anaconda",會(huì)快速的顯示出匹配的文件:
[root@LinuxProbe ~]# locate anaconda
可以使用 -S 選項(xiàng)檢索有關(guān) locate 已存儲(chǔ)信息的統(tǒng)計(jì):
[root@LinuxProbe ~]# locate -S
Database /var/lib/mlocate/mlocate.db:
8,393 directories
73,262 files
4,632,907 bytes in file names
1,948,600 bytes used to store database
總 結(jié)
find 和 locate 命令都是在系統(tǒng)上查找文件的有用工具。兩者都是強(qiáng)大的命令,可以通過(guò)管道將它們與其他實(shí)用程序結(jié)合來(lái)加強(qiáng)。?