您好,登錄后才能下訂單哦!
Linux文件查找詳解
我們之前學(xué)過(guò)的grep、egrep以及fgrep命令是Linux的文本查找命令,只是單純地匹配字符串的命令,而不是文件查找命令。
·文件查找的常用命令
1,locate:
locate是在全系統(tǒng)查找文件的命令,但是locate的查找是非實(shí)時(shí)的、非精確的,進(jìn)行模糊匹配的一種查找方式,因?yàn)榇朔N文件查找的方式是根據(jù)全系統(tǒng)文件數(shù)據(jù)庫(kù)進(jìn)行的,而該數(shù)據(jù)庫(kù)只有在每天晚上才會(huì)更新,因此是非實(shí)時(shí)查找,但是這個(gè)文件數(shù)據(jù)庫(kù)我們可以手動(dòng)生成,為了使我們可以實(shí)時(shí)的查找文件,我們可以手動(dòng)更新該數(shù)據(jù)庫(kù)。
生成文件數(shù)據(jù)庫(kù)的命令:updatedb
優(yōu)點(diǎn):locate命令執(zhí)行速度快
2,find:
find命令支持實(shí)時(shí)查找,精確查找,而且支持多種查找標(biāo)準(zhǔn),但是find命令的執(zhí)行速度慢,這是因?yàn)閒ind命令是遍歷指定目錄下的所有文件進(jìn)行查找,所以執(zhí)行速度慢。
用法格式:
->find 查找路徑 查找標(biāo)準(zhǔn) 查找以后的處理動(dòng)作
查找路徑可以省略,省略以后就表示默認(rèn)查找當(dāng)前目錄
查找標(biāo)準(zhǔn)默認(rèn)為查找指定路徑下的所有文件
查找處理動(dòng)作(action),默認(rèn)為輸出至標(biāo)準(zhǔn)輸出
(1)查找(匹配)標(biāo)準(zhǔn)(選項(xiàng)):
->-name(嚴(yán)格區(qū)分大小寫(xiě)查找) 'filename':對(duì)文件名做精確匹配
支持文件名通配
*->用來(lái)實(shí)現(xiàn)匹配任意長(zhǎng)度的任意字符
?->用來(lái)實(shí)現(xiàn)匹配單個(gè)字符
[]->用來(lái)實(shí)現(xiàn)匹配指定范圍內(nèi)的任意單個(gè)字符
->-iname:文件名匹配不區(qū)分大小寫(xiě)
->-regex:基于正則表達(dá)式進(jìn)行文件名查找
格式:-regex pattern
->-user:根據(jù)文件的屬主來(lái)進(jìn)行文件的查找
格式:-user username
->-group:根據(jù)文件的屬組來(lái)進(jìn)行文件的查找
格式:-group groupname
->-uid:根據(jù)uid查找,一旦某個(gè)用戶(hù)被刪除之后,此前所有屬于這個(gè)用戶(hù)的文件的屬主將變?yōu)檫@個(gè)用戶(hù)的id號(hào)
格式:-uid uid
->-gid:根據(jù)gid查找,一旦某個(gè)用戶(hù)的屬組被刪除之后,此前所有屬于這個(gè)用戶(hù)基本組的文件的屬組將變成這個(gè)用戶(hù)的基本組id號(hào)
格式:-gid gid
->-nouser:查找沒(méi)有屬主的文件
->-type:根據(jù)文件類(lèi)型來(lái)查找文件
f:普通文件
d:目錄
c:字符設(shè)備
b:塊設(shè)備
l:鏈接文件
p:管道設(shè)備
s:套接字設(shè)備
->-size:根據(jù)文件大小來(lái)查找文件
[+|-]#:+表示大于,-表示小于,#表示數(shù)值大小(不加+|-表示等于),只寫(xiě)#表示精確查找。
k表示KB
M表示MB
G表示GB
大小匹配的法則:精確查找時(shí)會(huì)有誤差,但是誤差一般小于1,且小于所要匹配的數(shù)值。
·組合條件查找,默認(rèn)為邏輯與關(guān)系
->-a:邏輯與關(guān)系
->-o:邏輯或關(guān)系
->-not:邏輯非關(guān)系
練習(xí):
1,查找/tmp目錄下,不是目錄且不是套接字類(lèi)型的文件
2,查找/tmp/test目錄下,屬主不是user1,也不是user2的文件
·根據(jù)時(shí)間戳查找文件
時(shí)間為天數(shù):
格式:
->-mtime [+|-]#:修改時(shí)間
->-ctime [+|-]#:改變時(shí)間
->-atime [+|-]#:訪問(wèn)時(shí)間
->#表示距離現(xiàn)在的第#天有動(dòng)作,+#表示距離現(xiàn)在的第#天之前有動(dòng)作,-#表示距離現(xiàn)在的第#天之后有動(dòng)作
時(shí)間為分鐘
格式:
->-mmin [+|-]#:修改時(shí)間
->-cmin [+|-]#:改變時(shí)間
->-amin [+|-]#:訪問(wèn)時(shí)間
->#表示距離現(xiàn)在的第#分鐘有動(dòng)作,+#表示距離現(xiàn)在的第#分鐘之前有動(dòng)作,-#表示距離現(xiàn)在的第#分鐘之后有動(dòng)作
·根據(jù)權(quán)限來(lái)查找
格式:
->-perm MODE:表示精確匹配
->-perm +MODE:三位權(quán)限任意一位匹配即滿(mǎn)足條件
->-perm -MODE:文件權(quán)限能完全包含此MODE才符合條件
(2)查找以后的處理動(dòng)作(action):
默認(rèn)為-print(顯示出來(lái))
->-ls:類(lèi)似于命令ls -l的形式顯示每一個(gè)文件的詳細(xì)信息
->-ok:-ok表示處理動(dòng)作的每一步都需要用戶(hù)確認(rèn)
固定格式:-ok COMMAND {} \;
花括號(hào)表示的是前面find命令查找到的文件名
->-exec:-exec的處理動(dòng)作不需要用戶(hù)確認(rèn),一氣呵成
固定格式:-exec COMMAND {} \;
練習(xí):
1,查找/var目錄下屬主為root并且屬組為mail的所有文件
2,查找/usr目錄下不屬于root、bin或student的文件
3,查找/etc目錄下最近一周內(nèi)內(nèi)容修改過(guò)且不屬于root及student用戶(hù)的文件
4,查找當(dāng)前系統(tǒng)上沒(méi)有屬主或?qū)俳M且最近一天內(nèi)曾被訪問(wèn)過(guò)的文件,并將其屬主屬組均修改為root
5,查找/etc目錄下大于1M的文件,并將其文件名寫(xiě)入/tmp/etc/largefiles
xargs方法:
6,查找/etc目錄下所有用戶(hù)都沒(méi)有寫(xiě)權(quán)限的文件,顯示出其詳細(xì)信息
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。