Linux系統(tǒng)「文件查找」
Linux系統(tǒng)文件中常用屬性為以下內(nèi)容:名稱,大小舰蟆,權(quán)限趣惠,屬主,屬組身害,修改時間味悄,訪問時間等,在龐大的系統(tǒng)中塌鸯,需要在prompt中查詢文件侍瑟,需要借助其查找工具實現(xiàn),以此可以查詢相同或要求指定屬性的文件丙猬,Centos及EHLE類系統(tǒng)實現(xiàn)查詢工具有:Locate涨颜、find工具。
locate工具
`locate`
synopsis: locate [option]…PATTERN….
options:
-b --basename: 只匹配路徑的基名
-c --count: 統(tǒng)計匹配條件的數(shù)量
-r --regexp:支持正則表達式方式查詢
locate工作特性:
優(yōu)點####
- 查詢速度快茧球,基于索引表查詢,索引表時系統(tǒng)計劃或手動使用updatedb命令建立
- 不占用系統(tǒng)資源
缺點####
- 非實時查詢
- 模糊查詢
- 查詢的名稱匹配路徑名稱
- 索引表建立非常耗用系統(tǒng)資源
find工具
一咐低、工作特點
優(yōu)點###
- 實時查找
- 準確查找,遍歷整個目錄下的所有文件
- 可以對查詢到的文件進行指定動作袜腥,即查看,刪除钉汗,移動等操作.
缺點####
- 查詢速度略慢
find命令使用方法
`find` - search for files in a directory hierarhy
sysnopsis: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
查詢條件
查詢條件由選項及測試條件組成:
【 測試條件 】
一羹令、以文件名查找
-
-name pattern
: 以文件名查找 -
-iname pattern
: 不區(qū)分文件名的大小寫,只支持glob風格的查找方式:*,损痰?,[],[^] -
-regex pattern
: 基于正則表達式查找文件福侈,精確匹配文件名
二、以文件從屬關(guān)系查找
-
-user USERNAME
: 以用戶名查找 -
-group GROUPNAME
: 以組名查找 -
-uid UID
:以UID號查找 -
-gid GID
:以GID查找 -
-nouser
: 查找沒有屬主的文件 -
-nogroup
: 查找沒有屬組的文件
三卢未、以文件類型查找
-
-type TYPE
: 以文件類型查找-
f
: 普通文件 -
d
: 目錄文件 -
b
: 塊設(shè)備文件 -
c
: 字符設(shè)備文件 -
l
: 連接文件 -
s
: 套接字文件 -
p
: 管道文件
-
四肪凛、根據(jù)文件大小查找
-
-size [+|-]SIZE
: 以文件大小查詢,大小包含K,M辽社,G的單位-
-size 5M
: 精確查找大小為5M的文件伟墙,大小上面浮動稍微有偏差 -
-size -5M
: 查詢大小小于5M的文件 -
-size +5M
: 查詢大小大于5M的文件
-
五、根據(jù)時間查找
-atime [+|-]TIME
: 以訪問時間(天)查找-mtime [+|-]TIME
: 以數(shù)據(jù)修改時間(天)查找-ctime [+|-]TIME
: 以元數(shù)據(jù)修改時間(天)查找-amin [+|-]TIME
: 以訪問時間(分鐘)查找-mmin [+|-]TIME
: 以數(shù)據(jù)修改時間(分鐘)查找-cmin [+|-]TIME
: 以元數(shù)據(jù)修改時間(分鐘)查找-
-newer FILE
: 以FILE文件為條件滴铅,判斷比它新的文件-
7
: 準確時間戳葵,7表示剛好7(天|分鐘)起始位置 -
+7
: 7(天|分鐘)以前的 -
-7
: 7(天|分鐘)以內(nèi)的
-
六、根據(jù)權(quán)限查找
-
-perm MODE
: 精確權(quán)限查找find . -perm 644
-
-perm /MODE
: 任何一類用戶(u,g,o)中的任何一位(r,w,x)符合條件即滿足汉匙,理解為或關(guān)系-
find . -perm /222
: 查找至少有一個類用戶有寫權(quán)限 -
find . -perm /666
: 查找至少有一個類用戶有讀寫權(quán)限 -
find . -perm /001
:查找其他用戶有執(zhí)行權(quán)限
-
-
-perm -MODE
: 每一類用戶(u,g,o)的權(quán)限中的每一位(r,w,x)同時符合條件即滿足拱烁,理解為與關(guān)系-
find . -perm -222
: 查找三類用戶都有寫權(quán)限 -
find . -not -perm -222
:至少有一類用戶沒有寫權(quán)限
-
七生蚁、 組合條件測試
-
與
:-a
- 默認組合邏輯,可以加
-a
戏自,也可以取消邦投,例:find . -type f -a -user mariadb
,兩個條件同時滿足
- 默認組合邏輯,可以加
-
或
:-o
- 可以加
-o
參數(shù)擅笔,例:find . -type f -o -nouser
,兩個條件只滿足一個即可
- 可以加
-
非
:-not
或者!
表示-
find . -not -type f
,不是普通文件 -
find . ! -type f
,同上
-
八志衣、處理動作
-
-print
: 默認為打印,不需要添加剂娄,輸出入屏幕 -
-ls
: 以ls長文件的格式形式輸出 -
-delete
: 刪除查找到的文件 -
-fls /PATH/TO/SOMEFILE
:把查詢到的文件以ls詳細信息格式保存到SOMEFILE文件中 -
-ok COMMAND {} \;
: 查找到的文件傳遞給COMMAND命令蠢涝,提每步都給用戶提示確認操作 -
-exec COMMAND {} \;
: 查找到的文件傳遞給COMMAND命令,直接修改完成阅懦,不給用戶確認
注意:find將查找到的文件路徑一次性傳遞給后面的命令和二,但有很多的命令不能接受過長的參數(shù),導(dǎo)致命令的執(zhí)行失敗耳胎,使用如下方式可避免此錯誤的發(fā)生:
find /etc -type f | xargs -i COMMAND
: -i參數(shù)是由find的結(jié)果傳給xargs命令后惯吕,由-i指定結(jié)果代替符
find /etc -type f | xargs -i cp {} /tmp : -i 指定代替符為{}
選項
一、指定查找目錄范圍
-
-maxdepth NUM
: 指定最多搜索目錄層級到NUM層 -
-mindepth NUM
: 指定最少搜索目錄NUM層級
二怕午、查找空文件
-
-empty
: 查詢內(nèi)容為空的文件-
find ./ -empty
: 查找當前目錄下的所有空文件
-
三废登、排除符號連接
-
-follow
: 排除符號連接
Find與xagrs的命令結(jié)合
Usage:
find /etc -type f | xargs -i cp {} /tmp/
-i : 由xargs接收的參數(shù),由-i聲名由后一個命令{}代替
==============
示例
- 找出/tmp目錄下屬主為非root,且文件名包含fstab字符串的文件
find /tmp -not -user root -a -name *fstab*
- 找出/tmp目錄下文件名中不包含fstab字符串的文件
find /tmp -not -name *fstab*
- 找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件
find /tmp -not -user root -a -not -name *fstab*
find /tmp -not \(-user root -o -name *fstab*\)
- 至少有一周沒有訪問過的文件
find /etc -atime +7 -ls
- 24小時內(nèi)修改過的文件
find /etc -mtime -1 -ls
- 查找 /var目錄下屬主為root郁惜,且屬組為mail的所有文件或目錄
find /var/ -user root -group mail
- 查找/usr目錄下不屬于root,bin,或者hadoop的所有文件或目錄堡距,用兩種方法
find ./ -not -user bin -not -user user3 -not -user user4
find ./ -not \( -user bin -o -user user3 -o -user user4 \)
- 查找/etc目錄下最近一周其內(nèi)容修改過, 且屬主不是root用戶也不是hadoop用戶的文件或目錄
find /etc -mtime -7 -not -user root -not -user hadoop
- 查找當前系統(tǒng)上沒有屬主或?qū)俳M兆蕉,且最近一周內(nèi)曾被訪問過的文件或目錄
find / -atime -7 -nouser -o -nogroup
- 查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc/ -size +1M -type f -ls
- 查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
find /etc/ -type f -not -perm /222 -ls
- 查找/etc目錄至少有一類用戶沒有執(zhí)行權(quán)限的文件
find /etc/ -not -perm -111 -ls
- 查找/etc/init.d目錄下羽戒,所有用戶都有執(zhí)行權(quán)限,且其它用戶有寫權(quán)限的所有文件
find /etc/ -perm -111 -perm -002
find /etc/ -perm -113
摩根定律:
** !A -a !B = !(A -o B)**
** !A -o !B = !(A -a B)**