文件查找
本章節內容:
使用locate命令
使用find命令
使用Gnome搜索工具
一、文件的查找(find和locate的對比):
文件查找:是在文件系統上查找符合條件的文件。
locate |
find |
|
查找時效性 |
非實時查找 |
實時查找 |
文件索引數據庫 |
需要依賴查詢系統上預建的文件索引數據庫;索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手動更新數據庫(updatedb);索引構建過程需要遍歷整個根文件系統,極消耗資源。 |
無須依賴;實時查找工具,通過遍歷指定路徑完成文件查找。 |
工作特點 |
查找速度快; 模糊查找; 非實時查找 搜索的是文件的全路徑,不僅僅是文件名 可能只搜索用戶具備讀取和執行權限的目錄 |
查找速度略慢 精確查找 實時查找 可能只搜索用戶具備讀取和執行權限的目錄 |
命令使用格式 |
locate KEYWORD |
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression] |
查找條件(使用選項) |
-i執行區分大小寫的搜索 -n X只列舉前X個匹配項目 |
詳見下面的查找條件學習??! |
事例 |
locate foo :搜索名稱或路徑中帶有“foo”的文件 locate -r ‘\.foo$’ :使用Regex來搜索以“.foo”結尾的文件 |
詳見下面的查找條件事例!! |
二、find的查詢條件學習:
文件名和inode查找 |
屬主、屬組查找 |
文件類型查找 -type TYPE: |
文件大小來查找 |
時間戳 |
權限查找 |
組合條件 |
-name "文件名稱":支持使用glob *, ?, [], [^] ; -iname"文件名稱":不區分字母大小寫 -inumn 按inode號查找; -samefilename 相同inode號的文件; -links n 鏈接數為n的文件; -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱。 |
-user USERNAME:查找屬主為指定用戶(UID)的文件; -group GRPNAME: 查找屬組為指定組(GID)的文件; -uidUserID:查找屬主為指定的UID號的文件; -gidGroupID:查找屬組為指定的GID號的文件; -nouser:查找沒有屬主的文件; -nogroup:查找沒有屬組的文件。 |
f: 普通文件 d: 目錄文件 l: 符號鏈接文件 s:套接字文件 b: 塊設備文件 c: 字符設備文件 p: 管道文件 |
-size [+|-]#UNIT 常用單位:k, M, G #UNIT: (#-1, #],如:6k -#UNIT:[0,#-1], 如:-6k +#UNIT:(#,∞), 如:+6k |
以“天”為單位; -atime[+|-]#, #: [#,#+1) +#: [#+1,∞] -#: [0,#) -mtime -ctime
|
-perm [/|-]MODE: MODE: 精確權限匹配 /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰; -MODE:每一類對象都必須同時擁有指定權限,與關系; 0 表示不關注; 例: ?find-perm755會匹配權限模式恰好是755的文件 ?只要當任何人有寫權限時,find-perm+222就會匹配 ?只有當每個人都有寫權限時,find-perm-222才會匹配 ?只有當其它人(other)有寫權限時,find-perm-002才會匹配 |
與:-a 或:-o 非:-not, ! 德·摩根定律: 非(P 且Q) = (非P) 或(非Q) 非(P 或Q) = (非P) 且(非Q) !A -a !B = !(A -o B) !A -o !B = !(A -a B) |
以“分鐘”為單位: -amin -mmin -cmin |
三、find查找的處理動作:
選項 |
使用說明 |
-print: |
默認的處理動作,顯示至屏幕 |
-ls: |
類似于對查找到的文件執行“ls -l”命令 |
-delete: |
刪除查找到的文件 |
-flsfile: |
查找到的所有文件的長格式信息保存至指定文件中 |
-ok COMMAND {} \: |
對查找到的每個文件執行由COMMAND指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認。 |
-exec COMMAND {} \: |
對查找到的每個文件執行由COMMAND指定的命令 |
{}: |
用于引用查找到的文件名稱自身 |
find |
傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令 |
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題: find | xargsCOMMAND |
四、find的事例:
1、find -namesnow.png 搜索名為snow.png的文件
2、find -inamesnow.png 不分大小寫地搜索名為snow.png、Snow.png、SNOW.PNG等等的文件
3、find / -name *.txt 搜索以txt為后綴的所有文件
4、find /var –name *log* 搜索含有log為關鍵字的所有文件
5、find -user joe -groupjoe 搜索被用戶joe 以及組群joe所擁有的文件
6、find -user joe -not -group joe 搜索用戶joe,且該用戶不屬于joe組
7、find -user joe -o -user jane 搜索用戶joe或用戶jane
8、find -not\( -user joe -o -user jane\) 搜索用戶既不是joe并且也不是jance
9、find / -user joe -o -uid500 搜索搜索一個用戶名是joe或uid是500的用戶
10、find /tmp \( -not -user root -a -not -name 'fstab' \) –ls 找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件
11、find /tmp-not \( -user root -o -name 'fstab' \) –ls ?排除目錄
12、find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print 在/etc目錄下,排除/etc/sane.d目錄,查找帶有conf后綴的文件,并加以顯示
13、find -name “*.conf” -exec cp {} {}.org \ 備份配置文件,添加.orig這個擴展名
14、find /tmp -ctime +3 -user joe -o krm{}\ 提示刪除存在時間超過3天以上的joe的臨時文件
15、find ~-perm-002 -exec chmod o-w {}\ 在你的主目錄中尋找可被其它用戶寫入的文件
16、find /data -type f -perm 644 -name *.sh -exec chmod 755 {} \ 在data目錄下查找權限為644、后綴是.sh的普通文件,將其的權限修改為755
17、find /home -type d -ls 在home的目錄下查找塊設備
練習:
1、 查找/var目錄下屬主為root,且屬組為mail的所有文件
# find /var/ -user root -a -group mail
2、查找/var目錄下不屬于root、lp、gdm的所有文件
# find /var/ -not \( -user root -o -user lp -o -user gdm \) –ls
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
# find /var/ -mtime -7 -not \( -user root -o -user postfix \) -ls
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
# find / \( -nouser -o -nogroup -atime -7 \) -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
# find /etc/ -size +1M -type f -ls
6、查找/etc目錄下所有用戶都沒有寫權限的文件
# find /etc/ -not -perm /222 –ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
# find /etc/ -not -perm -111 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
# find /etc/init.d/ -perm /113 -ls
作業:
德·摩根定律
非(P 且Q) = (非P) 或(非Q)
非(P 或Q) = (非P) 且(非Q)
非(P 且Q) |
|
兩者相等 |
(非P) 或(非Q) |
|
|
非(P 或Q) |
|
兩者相等 |
(非P) 且(非Q) |
|
原創文章,作者:Aaron_wang,如若轉載,請注明出處:http://www.www58058.com/34333
從文章可以看出是在用心總結了,總結的也很全面,通過表格,看起來更直觀,find命令在筆試中經常會問道,所以需要多多練習,達到熟練掌握。