天天看點

通過26個執行個體徹底掌握 linux find 指令的使用

作者:鸠摩智首席音效師
通過26個執行個體徹底掌握 linux find 指令的使用

find 指令有什麼用 ?

find 指令在 Linux 和 UNIX 系統中用于查找檔案和目錄,并可對其執行後續操作。

在 find 指令的幫助下,系統管理者可以根據一些搜尋條件查找所需的檔案。我們可以使用單個或組合多個标準,然後可以對獲得的結果執行操作。可選搜尋條件:檔案名稱、目錄名稱、建立日期、修改日期、屬主、權限。

find 指令文法格式:

$ find <path> {file-or-directory-name} <options> <action-on-result>
           

<action-on-result> 可選項:

  • – delete : 删除檔案或目錄
  • -exec command {}; : 根據 find 指令的結果執行指令
  • -ok command : 它将運作與 -exec 相同的指令,但它将在實際執行之前提示

(1) 查找目前工作目錄下的所有檔案和目錄

若要隻查找目錄,請運作

$ find . -type d
           

若要隻查找檔案,請運作

$ find . -type f
           

(2) 列出特定目錄下的所有檔案

假設我們要列出 /home/linuxtechi/Downlods 目錄下的所有檔案和目錄,運作

$ find /home/linuxtechi/Downloads
           

如果隻查找檔案,請運作

$ find /home/linuxtechi/Downloads -type f
           

如果隻查找目錄,請運作

$ find /home/linuxtechi/Downloads -type d
           
通過26個執行個體徹底掌握 linux find 指令的使用

(3) 從目錄中按檔案名查找檔案

要在特定目錄中按名稱查找檔案,請運作

$ sudo find /home -type f -name cleanup.sh
           

上面的指令将在 /home 檔案夾中查找 cleanup.sh 檔案。我們還可以在 /var/log 目錄中查找擴充名為 .log 的所有檔案,運作

$ sudo find /var/log -type f -name *.log
           
通過26個執行個體徹底掌握 linux find 指令的使用

(4) 在多個目錄中查找檔案

假設我們想在 /home 和 /root 檔案夾中找到 .sh 擴充名的檔案,請運作

$ sudo find /home /root -type f -name '*.sh'
           
通過26個執行個體徹底掌握 linux find 指令的使用

(5) 忽略檔案名大小寫

為了查找檔案名不受大小寫影響,我們可以在 find 指令中使用 -iname 選項

$ sudo find /home -type f -iname CleanUP.SH
/home/linuxtechi/automation/cleanup.sh
$
           

(6) 查找除上述類型之外的所有檔案類型

假設我們要查找所有不是上述類型的檔案,為此可以在 find 指令中使用 -not 選項,如下所示

$ sudo find /home -type f -not -name '*.mp3'
           

(7) 使用多個條件查找檔案

我們還可以組合多個條件來使用正規表達式搜尋檔案。假設我們想在主目錄中搜尋擴充名為 .sh 和 .mp3 的檔案,運作

$ find $HOME -regex ".*\.\(sh\|mp3\)#34;
           
通過26個執行個體徹底掌握 linux find 指令的使用

(8) 使用 OR 條件查找檔案

我們還可以組合多個搜尋條件,然後使用 OR 操作符根據一個條件中的任何一個條件的滿足來查找檔案

$ find $HOME -name "*.sh" -o -name "jumpscripts"
/home/linuxtechi/automation/cleanup.sh
/home/linuxtechi/dumpdata.sh
$
           

9) 根據權限查找檔案

要根據權限查找檔案,請在查找指令中使用 - perm 選項。

例如在 /home 目錄中查找具有 0777 權限的所有檔案,運作

$ sudo find /home -type f -perm 0777
           

在使用者目錄查找所有可執行檔案

$ find $HOME -type f -perm /a+x
           

(10) 查找是以隐藏檔案

要搜尋使用者主目錄中的所有隐藏檔案,請運作指令

$ find $HOME -type f -name ".*"
           

(11) 找到所有具有 SGID 的檔案

要定位所有具有 SGID 位的檔案,我們可以使用

$ sudo find / -perm /g=s
           

(12) 找到所有帶有 SUID 的檔案

要定位所有 SUID 位的檔案,運作

$ sudo find / -perm /u=s
           

(13) 查找所有可讀但沒有執行權限的檔案

若要隻查找所有人都可讀但任何人都不能執行的檔案,請運作

$ find $HOME -perm -a+r \! -perm /a+x
           

(14) 搜尋幾種檔案類型

在一個查找指令中,我們可以搜尋多種檔案類型

$ find $HOME -type f,d,l
           

(15) 查找使用者擁有的所有檔案

To locate all the file that are owned by a particular user in /home directory, run following command,

要找到 /home 目錄中屬于特定使用者的所有檔案,請運作以下指令

$ sudo find $HOME -user linuxtechi
           

(16) 找到一個組擁有的所有檔案

下面的指令将搜尋 apache 組擁有的所有檔案。

$ sudo find / -group apache
           

(17) 按檔案大小查找所有檔案

Use ‘-size’ option in find command to search files based on the size.

Run following command to find all files whose size is exactly 50MB.

使用 -size 選項根據檔案大小進行搜尋

查找等于 50MB 的檔案

$ find $HOME -size 50M
/home/linuxtechi/dbstuff
$
           

查找大于 50MB 的檔案

$ find $HOME -size +50M
           

查找小于 50MB 的檔案

$ find $HOME -size -50M
           

查找大小在 40MB 到 500MB 之間的檔案

$ find $HOME -size +40M -size -500M
           

(18) 不下行目錄到其他檔案系統

-xdev 選項列出了另一個檔案系統中的挂載點或分區,但它不會向下查找它們。

下面的指令将在 / 目錄中搜尋大于 100MB 的所有檔案,排除其他挂載的檔案系統,重定向錯誤消息到 /dev /null

$ find / -xdev -size +100M 2>/dev/null
           
通過26個執行個體徹底掌握 linux find 指令的使用

(19) 查找 N 天前修改過的檔案

假設我們想要定位 10 天前修改過的所有檔案。我們可以使用 -mtime 選項來實作這一點

$ sudo find / -mtime 10 2>/dev/null
           

(20) 找出 N 天前被通路過的檔案

假設我們想要定位 10 天前被通路過的所有檔案。我們可以使用 -atime 選項來實作這一點

$ sudo find / -atime 30 2>/dev/null
           

(21) 找到所有的空檔案和目錄

要在使用者主目錄中搜尋所有空檔案,請運作

$ find $HOME -type f -empty
or 
$ find $HOME -type f -size 0
           

類似地,定位所有空目錄

$ find $HOME -type d -empty
           

(22) 搜尋和删除檔案

使用 find 指令,我們在單個指令中搜尋和删除檔案,-delete 選項可以删除檔案。

在下面的例子中,我們正在從使用者的主目錄中搜尋并删除 mp3 檔案

$ find $HOME -type f -name "*.mp3" -delete
           
通過26個執行個體徹底掌握 linux find 指令的使用

注意: 上面是破壞性指令,執行它時要小心。

(23) 查找最大和最小的檔案

To find largest and smallest file, we will combine sort command with find command & if we further want to list top three of those largest files, we will combine head

為了找到最大和最小的檔案,我們将結合 sort 指令和 find 指令,如果我們進一步想列出最大檔案中的前三個,我們将結合 head 指令列出使用者主目錄中前三個檔案

$ find $HOME -type f -exec ls -s {} \; | sort -n -r | head -3
51200 /home/linuxtechi/dbstuff
8276 /home/linuxtechi/.cache/gnome-software/appstream/components.xmlb
2764 /home/linuxtechi/.local/share/gnome-photos/tracker3/private/meta.db-wal
$
           

我們同樣可以在使用者的主目錄中找到最小的檔案

$ find $HOME -type f -exec ls -s {} \; | sort -n | head -3
           

(24) 找到所有日志檔案并将它們重定向到一個檔案

To run command on find command result use -exec option, it’s syntax given below,

要在查找結果上運作指令,使用 -exec 選項,其文法如下所示

$ find -exec {} ;

以下指令将找到所有檔案,并将其名稱重定向到 /tmp/logsfiles.txt

$ sudo find /var -type f -name '*.log' -exec ls -lah {} \; > /tmp/logfiles.txt
           
通過26個執行個體徹底掌握 linux find 指令的使用

(25) 搜尋檔案并更改其權限

假設我們想要搜尋權限為 777 的所有檔案,并将其權限更改為 644

$ find $HOME -type f -perm 777 -exec chmod 644 {} \;
           

(26) 從檔案中搜尋文本

Let’s assume we want to search error word in all log files, run following command

假設我們要在所有日志檔案中搜尋帶有 error 關鍵字的檔案,運作以下指令

$ sudo find /var -type f -name '*.log' -exec grep -i 'error' {} \;
           

在上面的指令中,我們結合了 find 和 grep 指令來完成任務。

我的開源項目

通過26個執行個體徹底掌握 linux find 指令的使用
  • course-tencent-cloud(酷瓜雲課堂 - gitee 倉庫)
  • course-tencent-cloud(酷瓜雲課堂 - github 倉庫)

繼續閱讀