今天我將學到的文件查找心得寫出來和大家共同分享,請大家多多指點
文件查找是當我們只知道文件某一些屬性而不知道具體所在位置時所要進行的一項搜索,在Linux系統中的文件查找有全局模糊查找和局部精確查找,今天學習局部精確查找——find
Find查找文件時是遍歷指定目錄中的所有文件完成查找,實時精確查找,速度較慢,支持衆多查找標準(如:按文件名,權限,屬主,屬組等)
Find命令的使用方法:
find+[查找路徑]+查找標準+[查找到之後的動作]
查找路徑,所要查找文件所在的絕對路徑,如果不寫系統默認爲當前工作目錄
查找標準,查找指定目錄下的那種文件,如果不寫默認爲所有文件
查找到所要文件之後的動作,找到文件之後要進行那些處理,如果不指定默認爲顯示
查找標準有:
-name filename:基於文件名查找
-iname filename:基於文件名查找時不區分大小寫
-regex:基於正則表達式進行查找,此時需要完整匹配
-user username:基於文件屬主進行查找
-group groupname:基於文件屬組進行查找
-uid n:基於屬主id進行查找,當用戶被刪除時,原有屬於此用戶的文件屬主將更改爲原用戶的id
-gid n:基於屬組id進行查找,同上
-nouser:查找沒有屬主的文件,系統管理員應經常執行此命令,並將查找到的文件屬主更改爲root,以確保系統的安全性
-nogroup:查找沒有屬組的文件,作用同上
-type:基於文件類型進行查找,Linux文件系統將文件類型分爲(f,d,b,c,g,l,s等)
-size +nM -nM:基於文件大小進行查找,+nM表示大於nM的所有文件;-nM表示小於nM的所有文件;nM表示大小爲nM的文件;Linux系統匹配文件大小時,以約等進行匹配,11M的文件表示大於10M,小於等於11M(此處可使用常用單位K,M,G;如果不寫單位默認爲K)
-o :條件一或者條件二,或;只要滿足一個條件即可,執行優先級最低
-a :條件一和條件二,與;必須滿足同時滿足兩個纔可以,執行優先級比o高
-not :不是,非;只要不滿足條件纔可以,執行優先級最高
-mtime [+-] n :以文件修改時間查找,+n表示至少n天沒有修改過的文件;-n表示n天以內沒有修改過的文件;n表示到查找這一刻剛好n天沒有修改過的文件,基本不容易碰到
-ctime [+-] n :以文件改變時間查找,+n表示至少n天沒有改變過的文件;-n表示n天以內沒有改變過的文件;n表示到查找這一刻剛好n天沒有改變過的文件
-atime [+-] n :以文件訪問時間查找,+n表示至少n天沒有訪問過的文件;-n表示n天以內沒有訪問過的文件;n表示到查找這一刻剛好n天沒有訪問過的文件
-mmin [+-] n :以文件修改時間查找,+n表示至少n分鐘沒有訪問過的文件;-n表示n分鐘以內沒有訪問過的文件;n表示到查找這一刻剛好n分鐘沒有訪問過的文件
-cmin [+-] n :以文件改變時間查找,+n表示至少n分鐘沒有改變過的文件;-n表示n分鐘以內沒有改變過的文件;n表示到查找這一刻剛好n分鐘沒有改變過的文件
-amin [+-] n :以文件訪問時間查找,+n表示至少n分鐘沒有訪問過的文件;-n表示n分鐘以內沒有訪問過的文件;n表示到查找這一刻剛好n分鐘沒有訪問過的文件
# 修改指的是修改的文件屬性,名字等,並不改變文件元數據;而改變指的是對文件的元數據進行了改變
-perm [-/]nnn :以文件訪問權限進行查找,-nnn表示只要權限能完全包含nnn即可顯示;/nnn表示只要文件權限包含一個n即可顯示;nnn表示文件權限剛好爲nnn纔可以
-print :將查找到的文件顯示出來,系統默認爲顯示
-ls :將查找到的文件的詳細信息以列表形式顯示出來,類似* -exec ls -l {} \;
-ok command {} \;:查找到文件之後進行command動作,並與用戶進行交互式操作,花括號表示引用前面查找到的文件,最後以反斜槓和分號結尾
-exec command {} \;:查找到文件之後進行command動作,不與用戶進行交互式操作,而是直接完成,花括號表示引用前面查找到的文件,最後以反斜槓和分號結尾
實例:# find /etc -name pass*
查找etc下名字以pass開頭,後面跟任意字符的文件
# find /etc -iname passwd
查找etc下名字爲passwd的文件,並且不管名字是大小寫
# find /etc -regex “ass*” 此時可能查找不到任何文件,使用正則表達式需要完整匹配
# find /etc -regex “.*ass.*”
查找etc下文件名中以任意個任意字符開頭,後面跟ass,又以任意個任意字符結尾的文件
# find /etc -user user1
查找etc下屬主是user1的文件
# find /etc -group mygroup
查找etc下屬組是group的文件
# find / -nouser -exec chown root {} \;
查找根目錄下沒有屬主的文件,並將這些文件的屬主更改爲root;因爲沒有屬主的文件是很容易被***所使用,對系統造成威脅
# find / -nogroup -exec chown :root {} \;
查找根目錄下沒有屬組的文件,並將這些文件的屬組更改爲root
# find /etc -uid 503
查找etc下文件屬主爲503的文件,當文件屬主被刪除時,所屬這個用戶的屬主更改爲這個用戶的id
# find /etc -gid 526
查找etc下文件屬組爲526的文件
# find /etc -type f -ls
查找etc下類型是普通文件的文件,並將這些文件的詳細屬性以列表形式顯示出來
# find /etc -size +10M
查找etc下大於10M的文件
# find /etc -size -10M
查找etc下小於10M的文件,小於10M表示大於9M,小於10M
# find /etc -size -10M -a -type d
查找etc下文件大小小於10M並且是目錄的文件
# find /etc -user user1 -o -group mmm
查找etc下文件屬主是user1或者屬組是mmm的文件
# find /etc -not \( -user user1 -o -type d\)
查找etc下屬主不是user1且不是目錄的文件
# find /etc -mtime -4
查找etc下四天以內沒有修改過的文件
# find /etc -ctime +6
查找etc下至少六天沒有改變過的文件
# find /etc -atime 2
查找etc下到現在爲止剛好兩天沒有訪問過的文件
amin mmin cmin 用法和意思類似,只是時間單位以分鐘計
# find /etc -perm -644
查找etc下文件權限爲644或者文件權限大於644的文件,如654,755,754都可以
# find /etc -perm /644
查找etc下文件權限中有包含644中任何一個權限的文件,如600,040,004都可以
# find /etc -perm 400
查找etc下文件權限剛好爲400的文件,此時只有權限爲400才顯示
# find /etc -perm /001 -print
查找etc下其他用戶具有執行權限的文件,並將其顯示出來;Linux默認find命令將查找到的文件顯示出來,管理員也要經常使用這個命令,將文件的其他用戶擁有的執行權限刪除
# find /etc -type f -ls
查找etc下文件類型爲普通文件的文件,並將其詳細屬性以列表形式顯示出來
在平時的工作中,find通常和xargs一起使用,xargs的作用使得顯示出來的內容之間以空格隔開,而不是每行顯示一個
如:# find /etc -user halt | xargs
將etc下屬主爲halt的文件顯示出來,並且兩個結尾之間以空格隔開
# find /etc -perm /644 | xargs echo > /tmp/wc
將etc下權限包含有644中的一個的文件顯示出來,並將結尾覆蓋輸出到/tmp/wc中,每個結果之間用空格隔開