日期: 2015年08月30日
文件查找:在文件系統上查找符合條件的文件的過程
Linux系統上常用的兩個文件查找工具:
locate:
依賴於實現構建的索引,索引的構建是在系統較爲空閒時自動進行(週期性任務)生成的。
必要時,可手動執行updatedb命令
優點:速度快
缺點:非實時查找、模糊查找
find:
通過遍歷指定的目標目錄,實時查找符合指定實屬性的文件
優點:實時查找、精確匹配
缺點:遍歷文件系統、速度慢
find命令
格式:
find [OPTIONS] [查找路徑] [查找條件] [處理動作]
查找路徑:默認爲當前路徑
查找條件:默認爲指定路徑下的所有文件
處理動作:默認顯示到屏幕
查找條件:
根據文件名查找:
-name "文件名",文件名支持使用globbing
# find /etc/ -name "passwd*"#在/etc目錄下搜索名爲passwd的文件
-iname "文件名" 不區分大小寫
-regex 'PATTERN',以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名
根據文件的屬主或屬組查找:
-user USERNAME: 根據文件屬主查找
-group GROUPNAME: 根據文件屬組查找
根據文件的屬主或屬組的ID號查找:
-uid UID: 根據指定的UID查找
-gid GID: 根據指定的GID查找
查找沒有屬主或屬組的文件:
-nouser: 查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件
組合查找條件:
組合多個條件查找運用邏輯運算:與、或、非
與:-a 查找條件1 -a 查找條件2 -a ... (-a可省略)
所有條件必須同時滿足
# find /tmp/ -nouser -a -name "*centos*"
或:-o 查找條件1 -o 查找條件2 -o ...
滿足其中一個條件即可
# find /tmp/ -name "*centos*" -o -uid 500
非:-not or !
-not 查找條件不滿足指定條件的(相反)
# find / -not -user root | xargs ls -ld
# find / ! -user root | xargs ls -ld
與: 重疊部分:既屬於A,又屬於B
或: A+B-重疊部分(減去與的部分)
非: 除A之外,或除B之外
!A -o !B | = | !( A -a B ) |
!A -a !B | = | !( A -o B ) |
實例1:
//查找/tmp/下非php與非txt結尾的文件
# find /tmp -not -name "*php" -a -not -name"*txt"
//查找/tmp/下非php或非txt結尾的文件
# find /tmp -not \( -name "*.php" -o -name"*.txt" \)
根據文件類型查找:
-type 文件類型
f 普通文件
d 目錄文件
l 符號鏈接文件
b 塊設備
c 字符設備文件
p 命名管道文件
s 套接字文件
根據文件大小查找:
-size [+|-] #UNIT
常用單位有:k,M,G
不帶+|- 表示精確匹配
實例1:
//查找/etc目錄下2k的文件
#UNIT: #-1 < x <= #
find /etc/ -size 2k -exec ls -lh {} \;
(2k: 匹配範圍是1.1k - 1.9k)
//查找/etc目錄下-2k的文件
-#UNIT: x <= #-1
find /etc/ -size -2k -exec ls -lh {} \;
(-2k: 匹配範圍是小於等於1k)
//查找/etc目錄下+2k的文件
+#UNIT: x >#
find /etc/ -size +2k -exec ls -lh {} \;
(+2k: 匹配範圍是大於2.1k以上)
根據時間戳查找:(過去的某個時間節點)
以“天”爲單位
-atime [+|-]#: 根據訪問時間查找
-mtime [+|-]#: 根據修改時間查找
-ctime [+|-]#: 根據改變時間查找
實例2:
//查找/etc目錄下訪問時間爲3天的文件
#: # =< x < #+1
find /etc/ -atime 3 -exec stat {} \;
(3: 匹配範圍是從3天 - 4天之間)
//查找/etc目錄下3天之內訪問過的文件
-#: x < #
find /etc/ -atime -3 -exec stat {} \;
(-3: 匹配範圍是小於3天之內的)
//查找/etc目錄下3天以前訪問過的文件
+#:# x >= #+1
find /etc/ -atime +3 -exec stat {} \;
(+3: 匹配範圍是等於或大於3天以上的)
以“分鐘”爲單位
-amin [+|-]#: 根據訪問時間查找
-mmin [+|-]#: 根據修改時間查找
-cmin [+|-]#: 根據改變時間查找
find /tmp/ -amin -5 查找範圍是小於5分鐘內
find /tmp/ -mmin +5 查找範圍是大於或等於5分鐘以上
根據權限查找:
-perm [+|-]MODE
MODE: 不帶+|- 表示與MODE精確匹配
find /etc/ -perm 644 查找權限爲644的文件
+MODE: 任何一類用戶的權限只要能包括對其指定的任何一位權限即可
find /etc/ -perm +555 任何一類用戶有任何一位權限即匹配
-MODE: 每一類對象指定的每一位權限都必須同時存在方爲符合條件;隱含與條件。
find /etc/ -perm -111 -ls 查找所有人都有執行權限
find /etc/ -perm -222 -ls 查找所有人都有寫權限
find /etc/ -perm -666 -ls 查找所有人都有讀和寫權限
權限計算:
3=2+1
4=read
5=4+1
6=4+2
7=4+2+1
處理動作:
-print 默認動作:打印至屏幕
-ls 顯示找到的文件的詳細屬性
-exec COMMAND {} \; 對找到的文件執行期望的操作
刪除/tmp下沒有屬組的文件
find /tmp -nogroup -a -type f -exec rm {} \;
-ok COMMAND {}\; 執行命令之前提示確認
注意:
find命令會一次性找到所有符合條件的文件,並一同傳遞給後面的命令;但有些命令不能接收過長的參數
解決辦法: find | xargs COMMAND