1、簡介
node
在文件系統上經常須要根據文件的各類屬性去查找符合條件的文件,文件查找工具備兩個,locate和find。
數據庫
2、分類
centos
文件查找分爲:
bash
實時查找:遍歷全部文件進行條件匹配(find);
ide
非實時查找:又叫數據庫查找,根據索引查找(locate);
工具
3、locateui
1.查詢系統上預建的文件索引數據庫:/var/lib/mlocate/mlocate.db;
centos7
2.依賴於事先構建的索引:
spa
索引的構建是在系統空閒時由系統自動進行(週期性任務);管理員手動更新數據庫使用updatedb命令;
3d
3.索引構建過程須要遍歷整個根文件系統,極消耗資源;
4.工做特色:
查找速度快、非精確查找、模糊查找、搜索的是文件全路徑,不單單是文件名、可能只搜索用戶具有讀取和執行權限的目錄;
5.格式:locate KEYWORD
搜索名稱或路徑帶有「issue」的文件
OPTION:
-i:忽略大小寫的搜索;
-n X:只列舉前X個匹配項目;
eg1:使用Regex來搜索以「.sh」結尾的文件
4、find
1.find屬於實時查找工具,經過遍歷指定路徑下的文件系統完成文件查找;
2.工做特色:
精確查找、查找速度略慢、可能只搜索用戶具有讀取和執行權限的目錄;
3.語法:find [OPTION]... [查找路徑] [查找條件] [處理動做]
查找路徑:制定具體目標路徑,默認爲當前目錄;
查找條件:指定的查找標準,能夠文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的全部文件;
處理動做:對符合條件的文件作操做,默認輸出至屏幕;
4.查找條件
根據文件名和inode查找:
-name "文件名稱":支持使用glob *, ?, [], [^]
搜索名爲root的全部文件;
-iname "文件名稱":不區分字母大小寫
-inum n:按inode號查找
-samefile name:相同inode號的文件
-links n:連接數爲n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不單單是文件名稱
根據屬主、屬組查找:
-user USERNAME:查找屬主爲指定用戶(UID)的文件
-group GRPNAME: 查找屬組爲指定組(GID)的文件
-uid UserID:查找屬主爲指定的UID號的文件
-gid GroupID:查找屬組爲指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號連接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
根據組合條件查找:
與:-a
或:-o
非:-not,!,條件取反
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
-not(A -a B)=-not A -o -not B:不是A或者不是B;
-not(A -o B)=-not A -a -not B:不是A也不是B;
eg1:查找屬主是tom且不是普通文件的文件;
eg2:查找屬主是tom和bash的全部文件;
eg3:查找屬主是tom且屬組不是tom的文件
eg4:查找屬主是tom或者屬主是bash的文件
eg5:查找屬主不是tom也不是bash的文件
eg6:查找數值是bash或者屬主UID號爲4010的文件
eg7:找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件
eg8:排除目錄:find /etc -path ‘/etc/sane.d’ -a -prune -o-name *.conf
根據文件大小來查找:
-size [+|-]#UNIT
經常使用單位:k, M, G
#UNIT: (#-1, #],如:10k
-#UNIT:[0,#-1], 如:-10k
+#UNIT:(#,∞), 如:+10k
根據時間戳查找:
以「天」爲單位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#:[0,#)
-mtime;
-ctime;
以「分鐘」爲單位:
-amin;
-mmin;
-cmin;
根據權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配;
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係,+ 從centos7開始淘汰;
表示任何一類用戶的權限中包含寫權限就OK;
-MODE:每一類對象都必須同時擁有指定權限,與關係;
0:表示不關注;
find -perm 755 會匹配權限模式剛好是755的文件;
find -perm /222,只要當任意人有寫權限時,就會匹配;
find -perm -222,只有當每一個人都有寫權限時,纔會匹配;
find -perm -002,只有當其它人(other)有寫權限時,纔會匹配;
處理動做:
-print:默認的處理動做,顯示至屏幕;
-ls:相似於對查找到的文件執行「ls-l」命令;
-delete:刪除查找到的文件;
-fls file:查找到的全部文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令;
對於每一個文件執行命令以前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每一個文件執行由 COMMAND指定的命令;
{}: 用於引用查找到的文件名稱自身;
find傳遞查找到的文件至後面指定的命令時,查找到全部符合 條件的文件一次性傳遞給後面的命令;
有些命令不能接受過多參數,此時命令執行可能會失敗,下 面方式可規避此問題 find |xargs COMMAND;
示例: find -name 「*.conf」 -exec cp {} {}.org \; ##備份配置文件,添加.orig這個擴展名 find /tmp -ctime +3 -user joe -ok rm {} \; ##提示刪除存在時間超過3天以上的joe的臨時文件 find ~ -perm -002 -exec chmod o-w {} \; ##在你的主目錄中尋找可被其它用戶寫入的文件 find /data –type f -perm 644 -name *.sh – exec chmod 755 {} \; ##查找.sh結尾權限爲644的普通文件,把644文件權限改成755 find /home –type d -ls ##查找/home目錄下的目錄文件並以長格式顯示;