如何使用 Find 和 Locate 在 Linux 中搜尋檔案

roc_guo發表於2021-12-29
按名稱查詢

搜尋檔案最直接的方法就是按名稱搜尋,要使用 find 命令按名稱查詢檔案,可以用以下語法:

find -name "query"

這種方式搜尋會區分大小寫。如果要按名稱查詢檔案但忽略大小寫,請使用  -iname 選項:

find -iname "query"

如果要查詢不匹配某個關鍵字的所有檔案,可以使用  -not或者 ! 反轉搜尋:

find -not -name "query_to_avoid"
find ! -name "query_to_avoid"
按型別查詢

也可以使用  -type 選項指定要查詢的檔案型別。如下操作,搜尋 /dev目錄錄下的 b(塊裝置):

[root@Master ~]# find /dev -type b

如何使用 Find 和 Locate 在 Linux 中搜尋檔案如何使用 Find 和 Locate 在 Linux 中搜尋檔案
以下是一些可用於指定檔案型別的選項:

  • f: 常規檔案
  • d: 目錄
  • l: 符號連結
  • c: 字元裝置
  • b: 塊裝置

可以使用如下命令搜尋所有以 .conf 結尾的檔案。該示例在 /etc 目錄中搜尋匹配的檔案:

[root@Master ~]# find /etc -type f -name "*.conf"

如何使用 Find 和 Locate 在 Linux 中搜尋檔案如何使用 Find 和 Locate 在 Linux 中搜尋檔案

按時間和大小過濾

find 提供了多種按檔案大小和時間過濾結果的方法。

檔案大小

可以使用  -size 引數按檔案大小過濾檔案。為此,必須在數值的末尾新增一個特殊的字尾,表示按位元組、兆位元組、千兆位元組還是其他大小來計算大小。以下是一些常用的尺寸字尾:

  • c: bytes
  • k: kilobytes
  • M: megabytes
  • G: gigabytes
  • b: 512-byte blocks

為了說明這一點,以下命令將查詢 /usr 目錄中正好為 50c 的每個檔案、大於20M的檔案、小於1M的檔案:

[root@Master ~]# find /usr -size 50c
[root@Master ~]# find /usr -size +20M
[root@Master ~]# find /usr -size -1M
時間

對於系統上的每個檔案,  都儲存有關訪問時間、修改時間和更改時間的時間資料。

  • -atimeAccess Time, 檔案最後一次被讀寫的時間.
  • -mtimeModification Time, 檔案內容最後一次被修改的時間.
  • -ctimeChange Time, 檔案的inode後設資料最後一次更改的時間.

例如,要查詢 /usr 目錄中最近一天內修改過的檔案,請執行以下命令:

[root@Master ~]# find /usr -mtime 1

如果查詢最近兩天內訪問過的檔案,可以執行以下命令:

[root@Master ~]# find /usr -atime -2

要查詢上次更改元資訊超過 3 天的檔案,可以執行以下操作:

[root@Master ~]# find /usr -ctime +3

這些選項還具有可用於指定分鐘而不是天的配套引數,這將給出在一分鐘內修改過的檔案。:

[root@Master ~]# find /var/log -mmin -1
按所有者和許可權查詢

還可以分別使用  -user 和  -group 引數按擁有檔案的使用者或組搜尋檔案。若要查詢  chrony 使用者在 /var 目錄中擁有的檔案,請執行以下命令:

[root@Master ~]# find /var -user chrony

同樣,可以通過鍵入以下命令指定 kmem組在 /etc目錄中擁有的檔案 :

[root@Master ~]# find / -group kmem

也可以使用 -perm選項搜尋指定許可權的檔案:

[root@Master ~]# find /var/log -perm 644
對查詢結果執行命令

你可以使用以下語法使用  -exec 引數對找到匹配項的所有內容執行任意操作。 {} 用作查詢匹配檔案的佔位符。這  \;讓 find 知道命令在哪裡結束。

例如,查詢 /etc目錄中的 *.conf檔案,並使用 ls -l列出檔案資訊:

[root@Master ~]# find /etc -name "*.conf" -exec ls -l {} \;

如何使用 Find 和 Locate 在 Linux 中搜尋檔案如何使用 Find 和 Locate 在 Linux 中搜尋檔案

使用 locate 查詢檔案

使用 find 的替代方法是 locate 命令。此命令通常更快,並且可以輕鬆搜尋整個檔案系統。在 8中,可以使用yum包管理器來安裝 mlocate包:

[root@Master ~]# yum -y install mlocate

locate 比 find 快的原因是它依賴於列出檔案系統上所有檔案的資料庫。該資料庫通常每天使用 cron  更新一次,但也可以使用  updatedb 命令手動更新它。下面執行此命令:

[root@Master ~]# updatedb

例如搜尋關鍵字"anaconda",會快速的顯示出匹配的檔案:

[root@Master ~]# locate anaconda

如何使用 Find 和 Locate 在 Linux 中搜尋檔案如何使用 Find 和 Locate 在 Linux 中搜尋檔案
可以使用 -S 選項檢索有關 locate 已儲存資訊的統計:

[root@Master ~]# 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 在 Linux 中搜尋檔案如何使用 Find 和 Locate 在 Linux 中搜尋檔案

總結

find 和 locate 命令都是在系統上查詢檔案的有用工具。兩者都是強大的命令,可以通過管道將它們與其他實用程式結合來加強。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2849825/,如需轉載,請註明出處,否則將追究法律責任。

相關文章