文件查找命令find
Find:在文件上查找符合條件的文件,是個實時的查找工具,通過遍歷指定路徑完成文件查找
工作特點:
l 查找速度慢
l 精度查找
l 實時查找
l 可能只搜索用戶具有讀取和執行權限的目錄
語法:
find [option]…[查找路徑][查找條件][處理動作]
查找條件:
-name “文件名稱”:支持使用glob *,?,[],[^]
-iname “文件名稱”:忽略大小寫
-inum n:按照節點號查找
-samefile name:相同節點號的文件
-links n:鏈接數為n的文件
-regex ”PATTERN“:以pattern匹配整個文件路徑字符串,而不僅僅是文件名稱
-user 查找屬主為指定的用戶(uid)的文件
-group 查找屬組為指定的用戶組(gid)的文件
-uid 查找屬主為指定的uid號的文件
-gid 查找屬組為指定gid號的文件
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
查找條件
-type TYPE:
l f 普通文件
l d 目錄文件
l l 符號鏈接文件
l s 套接字文件
l b 塊設備文件
l c 字符設備文件
l p 管道文件
查找條件
組合查找:
u 與: -a
u 或: -o
u 非: -not ,!
德.摩根定律
(非 P)或(非 Q)= 非(P且Q)
(非 P)且(非 Q)= 非(P或Q)
示例
!P –a !Q = !(P –o Q)
!P –o !Q = !(P –a Q)
非P或非Q 表明這兩者只要有一個為非就可以滿足條件,它的所有情況是
1.非P 真Q
2 真P 非Q
3 非P 非Q
這三種情況否符合非P或非Q,那么它的反面就是
真P且真Q,那么上述三種情況就可以直接表示為
取真P且真Q的補集,也就是不是真P且真Q的情況
則可以表示為 !(真P且真Q)即非(真P且真Q)
同樣,非P且非Q就可以表示為!(真P或真Q)即非(真P或真Q)
find /tmp \( -not –user root –a –not –name “f*” \) –ls
find /tmp –not \( -user root –o –name “f*” \) –ls
查找/etc目錄下,除/etc/sane.d目錄的其他所有.conf后綴的文件
find /etc/ -path “/etc/sane.d” –a –prune –o –name “*.conf” –print
根據文件大小查找
-size [+|-]#num
常用單位 K M G
u #num: (#-1,#]
u -#num:[0,#-1]
u +#num:(#,正無窮)
以時間為單位
-atime [+|-]#
n #:[#,#+1)
n +#:[#+1,正無窮)
n -#:[0,#)
-mtime
-ctime
根據權限查找
-perm [-|/]MODE
mode:精確權限匹配
/mode:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,Centos7中舍棄了+
-mode:每一類對象都必須同時擁有指定的權限,與關系
0:表示不關注
排除/root目錄下的.mozilla目錄,然后查找文件中ugo任意一位有執行權限的文件并顯示出來
排除/root目錄下的.mozilla目錄,然后查找文件中ugo三者都有執行權限的文件,這三者條件必須都滿足的才能被匹配,否則不匹配
只看組g有沒有執行的權限,有就滿足匹配,其他的u,o不考慮
find -perm 755 匹配權限為755的文件,其他文件不匹配
find -perm /222 當u,g,o中任意一個有寫權限該文件就能匹配
find -perm -222 只有文件中u,g,o權限位都有寫權限的文件才可以被匹配
find -perm -002 文件中只要其他人有寫權限,該文件就可以被匹配
處理動作
u -print 默認處理動作,輸出至屏幕
u -ls 類似于對查找到的文件執行那個ls -l命令
u -delete 刪除查找到的文件
u -fls file 查找到的文件以長格式形式保存到指定文件中
u -ok command {} \; 對查找到的文件執行由command指定的命令
u -exec command {} \; 對查找到的文件執行command指定的命令
{} 用于引用查找到的文件自身
有些命令不能接受過多參數,此時命令執行會失敗,可以使用
find | xargs command
注:{}表示的是完整的文件路徑,所有如果要備份到其他目錄要注意路徑的正確書寫
find –name “.conf” –exex cp {} {}.org \;
備份含有.conf字符串的文件,備份的名稱后綴加上.org擴展名
find /data –type f –perm 644 –name “*.sh” –exec chmod 755 {} \;
找出data目錄下包含.sh字符串的權限是644的普通文件,并將這些文件賦予755的權限
find /home –type d –ls
找出家目錄下所有的目錄并顯示
習題
1、寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息
?2、寫一個腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息
?3、寫一個腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
?4、寫一個腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否為正整數
?5、查找/var目錄下屬主為root,且屬組為mail的所有文件
?6、查找/var目錄下不屬于root、lp、gdm的所有文件
?7、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
?8、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
?9、查找/etc目錄下大于1M且類型為普通文件的所有文件
?10、查找/etc目錄下所有用戶都沒有寫權限的文件
?11、查找/etc目錄下至少有一類用戶沒有執行權限的文件
?12、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
原創文章,作者:Stupid_L,如若轉載,請注明出處:http://www.www58058.com/36033