文件查找node
locate命令正則表達式
locate 查詢系統上預建的文件索引數據庫
數據庫路徑:/var/lib/mlcate/mlocate.db
由於數據庫是週期性更新,因此新建的文件有可能查詢不到,這時候須要手動更新數據庫(命令:updatedb)
更新數據庫時,會消耗很大的資源,覺得過程當中要遍歷整個根文件系統
特色: 查找速度快;能夠模糊查找;搜索的文件是全路徑,不單單是文件名;可能只搜索用戶具有讀取和執行權限的目錄;不是實時查找。
-i 不區分大小寫的搜索
-n NUM 只列舉前多少個匹配項目
-r 使用正則表達式數據庫
實時查找工具,經過遍歷指定路徑完成文件查找
特色:查找速度略慢;精確查找;實時查找;只搜索用戶具有讀取和執行權限的目錄。
用法 : find 選項 查找路徑 查找條件 處理動做
查找路徑:指定具體目標路徑;默認爲當前目錄
查找條件:指定的查找標準,能夠文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的全部文件
處理動做:對符合條件的文件作操做,默認輸出至屏幕ide
(1)查找條件
指定搜索層級工具
-maxdepth NUM 最大搜索目錄深度,指定目錄爲第一級
-mindepth NUM 最小搜索目錄深度
例:指定搜索第二層
fing /ect/profile.d/ -maxdepth 2 -mindepth 2 post
根據文件名和inode查找:ui
-name "文件名稱":支持使用glob *, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum NUM 按inode號查找
-samefile name 相同inode號的文件 find -samefile f1
-links n 連接數爲n的文件
-path 搜索路徑
-prune 不搜索 上面說的
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不單單是文件名稱code
根據屬主、屬組查找:對象
-user SUERNAME :查找屬主爲指定用戶(UID)的文件
-group GROUPNAME :查找屬組爲指定組(GID)的文件
-uid USERID :查找屬主爲指定UID號的文件
-gid GroupID :查找屬組爲指定GID號的文件
-nouser :查找沒有屬主的文件
-nogroup :查找沒有屬組的文件索引
根據文件類型查找:
-type f (普通文件) l (符號連接文件) b (塊設備文件) p (管道文件)
d (目錄文件) s(套接字文件) c (字符設備文件)
組合條件 : 或 -o 與 -a 非 -not !
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
根據文件的大小來查找:
-size [ + | - ] NUM 單位 【k,M,G,c(byte字節)】
-size 6k 表示 在 5k 到 6k 之間的文件大小 【大於5k小於等於6k】
-size -6k 表示 0k到 5k 之間的文件 包括 0 和 5
-size +6k 表示 大於6k的全部文件
根據時間查找
-atime [ + | - ] NUM 以 天 爲單位
3 大於等於三天 小於4天
+3 大於等於三天的全部
-3 小於三天到零天
-mtime
-ctime
以分鐘爲單位
-amin -mmin -cmin
根據權限查找:
-perm [ / | - ] 777
/644 :任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係
-440:每一類對象都必須同時擁有指定權限,與關係
0 表示不關注
處理動做
-print 默認的處理動做,顯示至屏幕
-ls 相似於對查找文件執行 「ls -l」命令
-delete 刪除查找到的文件
-fls file 查找到的全部文件的長格式信息保存至指定文件中
-ok COMMAND { } \ 對查找到的每一個文件執行由CMMAND指定的命令,對於每一個文件執行命令以前都會交互式要求用戶確認
-exec COMMAND { } \ 對查找到的每一個文件執行由COMMAND指定的命令
{}: 用於引用查找到的文件名稱自身
find傳遞查找到的文件至後面指定的命令時,查找到全部符合條件的文件一次性傳遞給後面的命令
3.參數替換xargs
有些命令不支持管道 | 來傳遞參數時,能夠用xargs 來傳遞上個命令產生的參數。
基本上就是,xargs將前面命令產生的參數,一個一個傳給後面的參數。有時候有些命令接受不了過多的參數,xargs能夠解決。
命令的一些操做
一、查找/var目錄下屬主爲root,且屬組爲mail的全部文件find /var -user root -group mail -ls二、查找/var目錄下不屬於root、lp、gdm的全部文件find /var ! ( -user root -o -user lp -o -user gdm ) -a ! ( -group root -o -group lp -o -group gdm ) -ls三、查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是postfix的文件find /var -mtime -7 ! ( -user root -o -user postfix ) -ls四、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件find / ( -nouser -o -nogroup ) -a -atime -7 -ls五、查找/etc目錄下大於1M且類型爲普通文件的全部文件find /etc/ -size +1M -type f -ls六、查找/etc目錄下全部用戶都沒有寫權限的文件find /etc/ ! -perm /222 -ls七、查找/etc目錄下至少有一類用戶沒有執行權限的文件find /etc/ ! -perm -111 -ls八、查找/etc/init.d目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件find /etc/init.d/ -perm -111 -a -prem -002