文件查找

文件查找

  1. locate命令

    locate 查詢系統上預建的文件索引數據庫
    數據庫路徑:/var/lib/mlcate/mlocate.db
    因爲數據庫是週期性更新,所以新建的文件有可能查詢不到,這時候需要手動更新數據庫(命令:updatedb)
    更新數據庫時,會消耗很大的資源,以爲過程中要遍歷整個根文件系統
    特點: 查找速度快;可以模糊查找;搜索的文件是全路徑,不僅僅是文件名;可能只搜索用戶具備讀取和執行權限的目錄;不是實時查找。
    -i 不區分大小寫的搜索
    -n NUM 只列舉前多少個匹配項目
    -r 使用正則表達式

  2. find

    實時查找工具,通過遍歷指定路徑完成文件查找
    特點:查找速度略慢;精確查找;實時查找;只搜索用戶具備讀取和執行權限的目錄。
    用法 : find 選項 查找路徑 查找條件 處理動作
    查找路徑:指定具體目標路徑;默認爲當前目錄
    查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的所有文件
    處理動作:對符合條件的文件做操作,默認輸出至屏幕

(1)查找條件
指定搜索層級

-maxdepth NUM 最大搜索目錄深度,指定目錄爲第一級
-mindepth NUM 最小搜索目錄深度
例:指定搜索第二層
fing /ect/profile.d/ -maxdepth 2 -mindepth 2

根據文件名和inode查找:

-name "文件名稱":支持使用glob *, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum NUM 按inode號查找
-samefile name 相同inode號的文件 find -samefile f1
-links n 鏈接數爲n的文件
-path 搜索路徑
-prune 不搜索 上面說的
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

根據屬主、屬組查找:

-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可以解決。

命令的一些操作

1、查找/var目錄下屬主爲root,且屬組爲mail的所有文件
find /var -user root -group mail -ls
2、查找/var目錄下不屬於root、lp、gdm的所有文件
find /var ! ( -user root -o -user lp -o -user gdm ) -a ! ( -group root -o -group lp -o -group gdm ) -ls
3、查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是postfix的文件
find /var -mtime -7 ! ( -user root -o -user postfix ) -ls
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
find / ( -nouser -o -nogroup ) -a -atime -7 -ls
5、查找/etc目錄下大於1M且類型爲普通文件的所有文件
find /etc/ -size +1M -type f -ls
6、查找/etc目錄下所有用戶都沒有寫權限的文件
find /etc/ ! -perm /222 -ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
find /etc/ ! -perm -111 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
find /etc/init.d/ -perm -111 -a -prem -002

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章