find命令詳解
目前創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、保亭黎族網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
大家或多或少使用過windows的文件查找,針對(duì)整個(gè)文件系統(tǒng)、部分分區(qū),以文件名、時(shí)間等條件來進(jìn)行文件查找。在Linux中主要通過locate和find這兩個(gè)命令,來完成對(duì)文件查找。
首先,簡(jiǎn)單講一下locate和find這兩個(gè)命令的適應(yīng)場(chǎng)景和各自特點(diǎn)。locate和find在Linux中都可以實(shí)現(xiàn)基于文件系統(tǒng)查找符合條件的文件,卻有各自的特點(diǎn)和使用場(chǎng)景。locate命令在文件系統(tǒng)上實(shí)現(xiàn)文件查找,是基于事先構(gòu)建好的搜索數(shù)據(jù)庫來完成的。locate命令通過搜索數(shù)據(jù)庫,而不是每次查找都遍歷指定的文件系統(tǒng),因此,可以快速的檢索查找統(tǒng)計(jì)出符合條件的文件。
locate命令搜索查找的是數(shù)據(jù)庫,數(shù)據(jù)庫中有的文件,可以快速的查找,數(shù)據(jù)庫中還未更新的,則無法查找到,因此通過locate命令查找文件,是非實(shí)時(shí)的查找,最近創(chuàng)建的文件還未在數(shù)據(jù)庫中建立相關(guān)的索引等信息,無法查找到。
locate有兩種更新搜索數(shù)據(jù)庫的方法:
1、系統(tǒng)制定的計(jì)劃任務(wù),搜索遍歷整個(gè)根文件系統(tǒng),來自動(dòng)完成數(shù)據(jù)庫的更新
2、updatedb命令,手動(dòng)更新數(shù)據(jù)庫
因此,locate命令適用于非實(shí)時(shí)的、模糊的、快速查找
locate命令基本用法:
locate [option]...[pattern]...
常用選項(xiàng):
-h 幫助信息
-i 忽略大小寫
-c 統(tǒng)計(jì)共有多少符合條件的文件
-b 只顯示匹配路徑中的基名
-r 支持使用正則表達(dá)式來匹配pattern
一般,在Linux中l(wèi)ocate命令查找文件,使用較少,多使用find命令,實(shí)現(xiàn)實(shí)時(shí)精確的文件查找。
find命令詳解
find查找命令,是通過遍歷指定的文件系統(tǒng),匹配查找模式來完成查找,是實(shí)時(shí)的、精確查找。
find命令的基本用法:
find [option]...[查找文件路徑] [查找條件] [查找后的處理動(dòng)作]
常用選項(xiàng):一般使用較少
查找文件路徑:查找文件的起始路徑,默認(rèn)是當(dāng)前工作目錄
查找條件:指定的查找標(biāo)準(zhǔn),可以是文件名、文件的大小、文件的類型、權(quán)限、從屬關(guān)系、時(shí)間戳等標(biāo)準(zhǔn)來查找,默認(rèn)為查找指定路徑下的所有文件。
處理動(dòng)作:對(duì)符合條件的文件作出操作,默認(rèn)為標(biāo)準(zhǔn)輸出。
備注:find查找文件,默認(rèn)是glob文件名通配,而非正則表達(dá)元字符通配
查找條件:
-name "pattern" 根據(jù)文件名來查找文件
-iname "pattern" 根據(jù)文件名查找文件,忽略大小寫
實(shí)例:
#find /etc -name pass* #在/etc目錄下查找文件名以pass開頭的文件
#find / -name pass* #在根目錄下查找文件名以pass開頭的文件
-regex "pattern" 根據(jù)正則表達(dá)式匹配查找
在find中使用較少,正則表達(dá)式工作在貪婪模式下,匹配的是整個(gè)路徑而非基名
-user username 查找屬主為指定用戶的文件
-group groupname 查找屬組為指定組的文件
-uid UID 查找屬主為指定UID的文件
-gid GID 查找屬組為指定GID的文件
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
組合測(cè)試:
與:-a 默認(rèn)組合邏輯
或:-o
非:-not或!
備注:組合測(cè)試時(shí)如用括號(hào)需轉(zhuǎn)義 \( \)
-type TYPE 根據(jù)文件類型查找
f普通文件 d目錄 l鏈接文件 b塊設(shè)備 c字符設(shè)備文件 p管道 s套接字
-size [+|-]#單位 根據(jù)文件大小來查找
常用單位:k M G
備注:-size 3M:查找出來的文件是滿足小于4M大于2M的范圍的文件
-size +3M:查找的是4M及大于4M的文件
-size -3M:查找的是2M及小于2M的文件
根據(jù)時(shí)間戳查找
以天為單位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
以分為單位
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
實(shí)例:#find /etc -mtime -7 #查找7天內(nèi)修改過的文件
根據(jù)權(quán)限查找
-perm [/|-]mode
備注:-perm mode:精確匹配權(quán)限位
-perm /mode:任意一類用戶(u,g,o)的任何權(quán)限位,任何一個(gè)符合條件即滿足(9個(gè)權(quán)限位只要有一個(gè)滿足即可,是或的邏輯關(guān)系)
-perm -mode:每一類用戶(u,g,o)的權(quán)限位(r,w,x)的每一位,同時(shí)符合條件即滿足(9個(gè)權(quán)限位之間是與的邏輯關(guān)系)
實(shí)例:#find /etc -not -perm /222 -type f #查找所有用戶都沒有寫權(quán)限的文件
處理動(dòng)作:
-print 輸出至標(biāo)準(zhǔn)輸出,默認(rèn)動(dòng)作
-ls 類似于對(duì)查找到的文件執(zhí)行"ls -l"命令,輸出文件的詳細(xì)信息
-delete 刪除查找到的文件
-fls /path/to/file 把查找到的所有文件的長格式信息保存至指定的文件中
-ok command {} \; 對(duì)查找到的每個(gè)文件都交給command來執(zhí)行,每個(gè)文件執(zhí)行都要用戶確認(rèn)
-exec command {} \; 對(duì)查找到的每個(gè)文件都交給command來執(zhí)行,不需要用戶確認(rèn)
備注:find查找到的文件路徑傳給后面的command,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令,但是有些command不能接受過長的參數(shù),此時(shí)command執(zhí)行會(huì)失敗。另有一種方式可以規(guī)避此問題:#find ... | xargs command