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