對(duì)于文件查找,我們最好用的還是屬于find命令了,在說(shuō)find命令之前,先把另外幾個(gè)查找命令介紹一下。
目錄
0x01 查詢命令介紹
0x02 find命令介紹
0x01 查詢命令介紹
在介紹之前,首先先了解一個(gè)特殊變量——PATH
PATH下存放著命令所在的路徑,我們?cè)趫?zhí)行命令的時(shí)候先會(huì)在PATH變量中從前到后挨個(gè)路徑進(jìn)行查找,找到一條之后就直接停止了,所以就需要把想要先生效的路徑放到前面,每一個(gè)路徑中間使用冒號(hào)進(jìn)行分隔

which命令
通過(guò)which命令,我們可以找到某一個(gè)命令所在的位置,它是通過(guò)PATH路徑進(jìn)行查詢的

whereis命令
whereis命令也可以跟which一樣搜索路徑,但是他還會(huì)搜索一些其他的內(nèi)容,它也是通過(guò)PATH路徑進(jìn)行查詢的

如果只想搜索二進(jìn)制命令的話,需要增加 -b 參數(shù)

locate命令
locate也能查詢命令的相關(guān)路徑以及幫助等,但是它不是從PATH路徑中進(jìn)行遍歷的,它是從Linux中的一個(gè)數(shù)據(jù)庫(kù)mlocate.db進(jìn)行查詢的,mlocate.db數(shù)據(jù)庫(kù)位于/var/lib/mlocate/mlocate.db,由于它所展示的內(nèi)容太多,所以這里我使用 -n 參數(shù)來(lái)指定顯示的行數(shù)

那我們?cè)倥e一個(gè)例子來(lái)進(jìn)行查詢
我們?cè)趓oot目錄下創(chuàng)建一個(gè)balabala.txt的文件

然后使用下列命令來(lái)進(jìn)行查詢
locate balabala

明明存在這個(gè)文件為什么查不到呢?
這是由于locate進(jìn)行查找是在mlocate.db數(shù)據(jù)庫(kù)進(jìn)行查找的,但是我們剛剛創(chuàng)建的這個(gè)文件并不在這個(gè)數(shù)據(jù)庫(kù)中,所以我們需要使用updatedb進(jìn)行更新數(shù)據(jù)庫(kù)

在更新完后就可以正常查詢到了,經(jīng)過(guò)查詢可以得知updatedb會(huì)每天自動(dòng)執(zhí)行一次

但是這個(gè)命令我們一般是不會(huì)用到的
0x02 find命令介紹
與上面的幾個(gè)命令相比,find的速度是最慢的,因?yàn)閒ind是從硬盤(pán)里進(jìn)行查找的,但是find命令也是我們最常用的一個(gè)命令,在尋找我們想要的文件時(shí)是最快捷的。
對(duì)于find命令的使用有一個(gè)大致的公式
find 要查找的位置 [限制條件] 要查找的文件名
舉個(gè)例子,從根目錄下尋找所有的文件名中包含balabala的文件

如果想在查詢完成之后,再接著對(duì)它執(zhí)行一些命令的話,在后面再加上 -exec參數(shù)就可以了
find / -type f -name "*balabala*" -exec ls -l {} \;

在-exec參數(shù)的后面跟上需要執(zhí)行的command命令就可以了,最后以分號(hào)作為結(jié)束的標(biāo)志,但是考慮到各個(gè)系統(tǒng)中的分號(hào)可能會(huì)代表不同的意義,所以加上了反斜杠進(jìn)行轉(zhuǎn)義。
其中花括號(hào)的含義是代表find命令所查詢到的內(nèi)容,并且花括號(hào)兩邊都是需要有空格的
這條命令還有一種等價(jià)的寫(xiě)法,那就是利用管道和xargs
xargs有兩個(gè)作用,一個(gè)就是加-n參數(shù)對(duì)內(nèi)容進(jìn)行分組,另一個(gè)作用就是獲取前一條命令的輸出,然后作為輸入傳給后面的命令,這個(gè)聽(tīng)起來(lái)跟管道符是一樣的,但是如果沒(méi)有xargs和管道符的配合是不能實(shí)現(xiàn)部分命令的執(zhí)行的。
看一下后面的這個(gè)例子就明白了

如果沒(méi)有管道符和xargs的配合,后面的命令將直接是在當(dāng)前目錄下直接執(zhí)行,也就是說(shuō)從管道符過(guò)來(lái)的數(shù)據(jù),ls根本沒(méi)有理會(huì),而是按照自己的意愿執(zhí)行了原本的功能。
順便再把xargs的分組功能介紹一下

再舉一個(gè)例子來(lái)理解一下上面的這個(gè)內(nèi)容
我們查找一下當(dāng)前目錄下的所有以 .txt 來(lái)結(jié)尾的文件,然后并將其內(nèi)容進(jìn)行輸出

我們也可以按照修改時(shí)間對(duì)文件進(jìn)行查找,加入 -mtime 參數(shù)就可以了
為了方便find的按時(shí)間查找,我們用下面的命令來(lái)生成一批文件
首先先了解一下date命令

如果想要修改時(shí)間的話,我們可以使用 date -s 來(lái)修改時(shí)間,但是絕對(duì)不建議大家這樣改,這樣可能會(huì)導(dǎo)致某些功能出現(xiàn)問(wèn)題。
然后我們生成一批文件,從十月十五號(hào)到十月二五號(hào)每天創(chuàng)建一個(gè)文件
注意后面的時(shí)間都是以今天是十月二十號(hào)作為標(biāo)準(zhǔn)的
for n in `seq 15 20`;do date -s "2019/10/$n";touch test_$n.txt;done


我們接著說(shuō)find命令的按時(shí)間查詢
查詢?nèi)煲郧皠?chuàng)建的文件
find . -type f -name "*.txt" -mtime +3

查詢第三天創(chuàng)建的文件
find . -type f -name "*.txt" -mtime 3

查詢最近三天的文件
find . -type f -name "*.txt" -mtime -3

常用到的查找命令就是這些了,如果有其他需要的話,再查看幫助文件就可以了。
文章首發(fā)公眾號(hào):無(wú)心的夢(mèng)囈(wuxinmengyi)
這是一個(gè)記錄紅隊(duì)學(xué)習(xí)、信安筆記,個(gè)人成長(zhǎng)的公眾號(hào)
掃碼關(guān)注即可
