查找文件-find
?作用
- 按照文件名、大小、時間、權限、類型、所屬者、所屬組來搜索文件
格式
find ?查找路徑 ??查找條件 ?具體條件 ?操作
注意
- find命令默認的操作是print輸出
- find是檢索文件的,grep是過濾文件中字符串
?參數
參數? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?根據文件basename匹配名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-size? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??匹配文件的大小(+50KB為查找超過50KB的文件,而-50KB為查找? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 小于50KB的文件)?
?-mtime [+\|-]n? ? ? ? ? ? ? ? ? ? ? ? ?匹配修改內容的時間(-4指小于等于4天內的文件名;+4,大于等于5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?天前的文件名;4指前4~5那一天的文件)
?-atime [+\|-]n ?????????????????????????匹配訪問文件的時間? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-ctime [+\|-]n ?????????????????????????匹配修改文件權限的時間? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-newer f1 !f2 ?????????????????????????匹配比文件f1新但比f2舊的文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-perm? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配權限(mode為完全匹配,-mode為包含即可)? ? ? ? ? ? ? ? ??
?-user? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配所有者? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-group? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配所有組? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-nouser ????????????????????????????????匹配無所有者的文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-nogroup? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??匹配無所屬組的文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-type b/d/c/p/l/f? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配文件類型(后面的字母參數依次表示塊設備、目錄、字符? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 設備、 管道、鏈接文件、文本文件)
?-depth? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?先從該目錄子目錄下查找,再查找該目錄? ? ? ? ? ? ? ? ? ? ? ? ?
?-maxdepth levels<br />-mindepth levels? ? ? ? ? 最多查找多少層目錄;最少查找多少層目錄? ? ? ??
?-delete? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將找到的文件刪除,如果是目錄只能刪除找到的空目錄。? ?
? ? ? ?
?-exec …… {}\;? ? ? ? ? ? ? ? ? ? ? 后面可跟用于進一步處理搜索結果的命令? ?? ?(類似于管道符)
? ? ? ? ? ? ? ? ?
#### 示例
- 按照文件名搜索
??- -name: 按照文件名搜索
??- -iname: 按照文件名搜索,不區分文件名大小寫
??- -inum: 按照 inode 號搜索
??- 沒有那個文件或目錄:find命令在執行時,在內存中自己產生的臨時文件,執行完既消失
??- 注意:搜索位置越大,消耗系統資源越多,在生產服務器上搜索的時候,盡量不在根目錄下搜索,把搜索的范圍盡量控制在最小
```shell
# /目錄下檢索名為passwd的文件
[root@server ~]# find ?/ ?-name ?"passwd" -print
# /etc下檢索host開頭的文件
[root@server ~]# find /etc -name "host*" -print
# 在/目錄查找以a開頭文件
[root@server ~]# find ?/ ?-name ?"a*"
# 在/目錄中查找以b開頭的不區分大小寫的文件
[root@server ~]# find / -iname "b"
# 在/etc目錄下檢索以b開頭共4個字符的文件
[root@server ~]# find ?/etc ?-name ?"b???"
# 在/etc目錄下檢索第二個字母為c的文件
[root@server ~]# find ?/etc ?-name ?"?c*"
# /目錄下檢索擴展名為.cfg的文件
[root@server ~]# find ?/ ?-name ?"*.cfg"
# /目錄下檢索擴展名為.txt的文件并統計個數
[root@server ~]# find ?/ ?-name ?"*.txt" ?| ?wc ?-l
- 按照文件大小搜索
??- -size [+|-]大小: 按照指定大小搜索文件,“+”的意思是搜索比指定大小還要大的文件, “-”的意思是搜索比指定大小還要小的文件 ?
??- 單位:可以通過man ?find ?查看size參數的單位
????```
????????#這是默認單位,如果單位為b或不寫單位,則按照512 Byte搜索。
????????' b':for 512-byte blocks(this is the default if no suffix is used)
????????
????????#搜索單位是c,按照字節搜索。
????????'c':for bytes
??????
????????#搜索單位是w,按照雙字節(中文)搜索。
????????'w':for two-byte words
?????
????????#按照KB單位搜索,必須是小寫的k。
????????'k':for Kilobytes(units of 1024 bytes)
?????
????????#按照MB單位搜索,必須是大寫的M
????????'M':for Megabytes(units of 1048576 bytes)
?????
????????#按照GB單位搜索,必須是大寫的G
????????' G':for Gigabytes(units of 1073741824 bytes)
????```
```bash
[root@master ~]# find / -size -1k
[root@master ~]# find ?/ ??-size ?+100M
[root@server ~]# find . -empty ?# 空文件
```
- 按照修改時間搜索
??- ?-atime [+|-]時間: 按照文件訪問時間搜索
??- -mtime [+|-]時間: 按照文件數據修改時間搜索
??- -ctime [+|-]時間: 按照文件狀態修改時間搜索
??- -newer file: 把比file修改時間更新的文件列出來
??- 注意:時間范圍問題
????- -5:代表 5 天內修改的文件。
????- 5:代表前 5~6 天那一天修改的文件。
????- +5:代表 6 天前修改的文件。 ?

```bash
[root@master ~]# find ?/ ?-mtime -10 ?-empty ?10天以內的空文件
```
- 按照權限搜索
??- -perm ??權限模式: 查找文件權限剛好等于“權限模式”的文件 ,常用
??- -perm ??-權限模式: 查找文件權限全部包含“權限模式”的文件
??- -perm ??+權限模式: 查找文件權限包含“權限模式”的任意一個權限的文件
??- 如果要在整個系統中搜索權限中包括SUID權限的所有文件,只需使用-4000即可:
```shell
[root@server ~]# find . perm ?755
[root@server ~]# find / -perm -4000
```
- 按照所有者和所屬組搜索 ?
??- -uid 用戶 ID: 按照用戶 ID 查找所有者是指定 ID 的文件
??- -gid 組 ID: 按照用戶組 ID 查找所屬組是指定 ID 的文件
??- -user 用戶名: 按照用戶名查找所有者是指定用戶的文件
??- -group 組名: 按照組名查找所屬組是指定用戶組的文件
??- -nouser: 查找沒有所有者的文件 ,常用,主要用于查找垃圾文件,還有一種情況就是外來
文件,比如光盤和U盤中的文件如果是由Windows復制來的(也就是文件是由windows建立的),在Linux中查看就是沒有所有者的文件;再比如手工源碼包安裝的文件,也有可能沒有所有者(由其他系統打的源碼包)
```bash
[root@server ~]# ?find . -user root
[root@server ~]# ?find ?/ -nouser ??# 查看無所有者的文件
```
- 按照文件類型搜索
??- ?-type d: 查找目錄
??- -type f: 查找普通文件
??- -type l: 查找軟鏈接文件
??- ……
```bash
[root@server ~]# find ?/dev ?-type ?b
[root@server ~]# find ?~ ?-type ?d
[root@server ~]# find ?/dev ?-type ?c ?-size ?-10k
```
-a可以省略? ?代表并且
-o 代表或 不可以省略
查找以d開頭,歸屬于root的賬戶文件
?
?