點(diǎn)擊添加圖片描述(最多60個(gè)字)在系統(tǒng)上查找文件或目錄時(shí),Linux上的find命令無與倫比。它使用簡單,而且有許多不同的選項(xiàng),可讓您微調(diào)文件搜索。繼續(xù)閱讀以查看如何使用此命令在系統(tǒng)上查找任何內(nèi)容的示...
點(diǎn)擊添加圖片描述(最多60個(gè)字)
在系統(tǒng)上查找文件或目錄時(shí),Linux上的find命令無與倫比。它使用簡單,而且有許多不同的選項(xiàng),可讓您微調(diào)文件搜索。
繼續(xù)閱讀以查看如何使用此命令在系統(tǒng)上查找任何內(nèi)容的示例。一旦您知道如何在Linux中使用find命令,每個(gè)文件都只需敲擊幾下。
目錄
查找目錄
查找隱藏文件
查找特定大小或大于X的文件
從文件列表中查找
不在列表中查找
設(shè)置maxdepth
查找空文件(零長度)
查找最大的目錄或文件
查找setuid設(shè)置文件
查找sgid設(shè)置文件
列出文件未經(jīng)允許被拒絕
在最近X天內(nèi)查找修改過的文件
按時(shí)間排序
定位和查找之間的區(qū)別
find命令的CPU負(fù)載
查找目錄
您可以使用-type d選項(xiàng)告訴find命令專門查找目錄。這將使find命令僅搜索匹配的目錄名,而不搜索文件名。
$ find /path/to/search -type d -name "name-of-dir"
查找隱藏文件
由于Linux中的隱藏文件和目錄以句點(diǎn)開頭,因此我們可以在搜索字符串中指定此搜索模式,以便遞歸列出隱藏的文件和目錄。
$ find /path/to/search -name ".*"
查找特定大小或大于X的文件
find的-size選項(xiàng)允許我們搜索特定大小的文件。它可用于查找確切大小的文件,大于或小于特定大小的文件或適合指定大小范圍的文件。以下有些例子:
搜索大于10MB的文件:
$ find /path/to/search -size +10M
搜索小于10MB的文件:
$ find /path/to/search -size -10M
搜索大小恰好為10MB的文件:
$ find /path/to/search -size 10M
搜索大小在100MB到1GB之間的文件:
$ find /path/to/search -size +100M -size -1G
從文件列表中查找
如果您有需要搜索的文件列表(例如,在.txt文件中),則可以使用find和grep命令的組合來搜索文件列表。為了使此命令起作用,只需確保要搜索的每個(gè)模式之間都用換行符隔開。
$ find /path/to/search | grep -f filelist.txt
grep的-f選項(xiàng)表示“file”,并允許我們指定要匹配的字符串文件。這導(dǎo)致find命令返回與列表中的文件或目錄名稱匹配的任何文件或目錄名稱。
不在列表中查找
使用上一個(gè)示例中提到的相同文件列表,您還可以使用find來搜索與文本文件內(nèi)的模式不符的任何文件。再一次,我們將結(jié)合使用find和grep命令;我們只需要用grep指定一個(gè)附加選項(xiàng):
$ find /path/to/search | grep -f filelist.txt
grep的-v選項(xiàng)表示“逆向匹配”,并且將返回與文件列表中指定的任何模式都不匹配的文件列表。
設(shè)置maxdepth
find命令默認(rèn)將進(jìn)行遞歸搜索。這意味著它將在指定的目錄中搜索您指定的模式,以及您告訴它要搜索的目錄中的所有子目錄。
例如,如果告訴find搜索Linux(/)的根目錄,則無論存在多少個(gè)子目錄,它都會搜索整個(gè)硬盤。您可以使用-maxdepth選項(xiàng)來規(guī)避此行為。
在-maxdepth之后指定一個(gè)數(shù)字,以指示查找應(yīng)遞歸搜索的子目錄數(shù)。
僅搜索當(dāng)前目錄中的文件,而不遞歸搜索:
$ find . -maxdepth 0 -name "myfile.txt"
僅在當(dāng)前目錄和更深的一個(gè)子目錄中搜索文件:
$ find . -maxdepth 1 -name "myfile.txt"
查找空文件(零長度)
要使用find搜索空文件,可以使用-empty標(biāo)志。搜索所有空文件:
$ find /path/to/search -type f -empty
搜索所有空目錄:
$ find /path/to/search -type d -empty
如果希望自動(dòng)刪除find返回的空文件或目錄,那么將此命令與-delete選項(xiàng)結(jié)合使用也非常方便。
刪除目錄(和子目錄)中的所有空文件:
$ find /path/to/search -type f -empty -delete
查找最大的目錄或文件
如果您想快速確定系統(tǒng)上哪些文件或目錄占用了最多的空間,則可以使用find進(jìn)行遞歸搜索,并按文件和目錄的大小輸出排序的列表。
如何顯示目錄中最大的文件:
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1
請注意,find命令已被排序到另外兩個(gè)方便的Linux實(shí)用程序:sort和tail。 Sort將按文件的大小順序排列文件列表,而tail將僅輸出列表中的最后一個(gè)文件,該文件也是最大的。
如果您要輸出例如最大的前5個(gè)文件,則可以調(diào)整tail命令。
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5
或者,您可以使用head命令來確定最小的文件:
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5
如果要搜索目錄而不是文件,只需在類型選項(xiàng)中指定“ d”即可。如何顯示最大目錄:
$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1
查找setuid設(shè)置文件
Setuid是“set user ID on execution”的縮寫,它是一種文件權(quán)限,允許普通用戶運(yùn)行具有升級特權(quán)(例如root)的程序。
出于明顯的原因,這可能是一個(gè)安全問題,但是可以使用find命令和一些選項(xiàng)輕松隔離這些文件。
find命令有兩個(gè)選項(xiàng)可幫助我們搜索具有特定權(quán)限的文件:-user和-perm。要查找普通用戶能夠以root特權(quán)執(zhí)行的文件,可以使用以下命令:
$ find /path/to/search -user root -perm /4000
在上面的屏幕截圖中,我們包含了-exec選項(xiàng),以便顯示有關(guān)查找返回文件的更多輸出。整個(gè)命令如下所示:
$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;
您也可以在此命令中用“ root”代替您要作為所有者搜索的任何其他用戶。或者,您可以搜索具有SUID權(quán)限的所有文件,而根本不指定一個(gè)用戶:
$ find /path/to/search -perm /4000
查找sgid設(shè)置文件
查找具有SGID設(shè)置的文件與查找具有SUID的文件幾乎相同,只是需要將4000的權(quán)限更改為2000:
$ find /path/to/search -perm /2000
您還可以通過在perms選項(xiàng)中指定6000來搜索,同時(shí)設(shè)置了SUID和SGID的文件:
$ find /path/to/search -perm /6000
列出文件未經(jīng)允許被拒絕
使用find命令搜索文件時(shí),您必須對要搜索的目錄和子目錄具有讀取權(quán)限。如果您沒有找到,find將輸出一條錯(cuò)誤消息,但會繼續(xù)瀏覽您確實(shí)擁有權(quán)限的目錄。
點(diǎn)擊添加圖片描述(最多60個(gè)字)
沒有權(quán)限盡管這可能發(fā)生在許多不同的目錄中,但在搜索根目錄時(shí)肯定會發(fā)生。
這意味著,當(dāng)您嘗試在整個(gè)硬盤上搜索文件時(shí),find命令將產(chǎn)生大量錯(cuò)誤消息。
為避免看到這些錯(cuò)誤,您可以將find的stderr輸出重定向到stdout,并將其通過管道傳遞到grep。
$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"
此命令使用grep的-v(反向)選項(xiàng)來顯示所有輸出,除了顯示“拒絕權(quán)限”之外的所有輸出。
查找最近X天內(nèi)的修改文件
使用find命令上的-mtime選項(xiàng)搜索最近X天內(nèi)被修改的文件或目錄。它也可以用于搜索X天之前的文件,或X天之前被完全修改過的的文件。
以下是一些如何在find命令上使用-mtime選項(xiàng)的示例:
搜索最近30天內(nèi)修改過的所有文件:
$ find /path/to/search -type f -mtime -30
搜索超過30天之前已修改的所有文件:
$ find /path/to/search -type f -mtime +30
搜索30天前剛修改過的所有文件:
$ find /path/to/search -type f -mtime 30
如果希望find命令輸出有關(guān)找到的文件的更多信息,例如修改日期,則可以使用-exec選項(xiàng)并包含ls命令:
$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;
按時(shí)間排序
要按文件的修改時(shí)間對查找結(jié)果進(jìn)行排序,您可以使用-printf選項(xiàng)以可排序的方式列出時(shí)間,然后將其輸出到sort實(shí)用程序。
$ find /path/to/search -printf "%T+\t%p\n" | sort
此命令將對舊的文件進(jìn)行排序。如果您希望較新的文件首先顯示,只需傳遞-r(反向)選項(xiàng)即可進(jìn)行排序。
$ find /path/to/search -printf "%T+\t%p\n" | sort -r
定位和查找之間的區(qū)別
Linux上的locate命令是搜索系統(tǒng)上文件的另一種好方法。它沒有像find命令那樣包含過多的搜索選項(xiàng),因此它的靈活性較差,但仍然很方便。
$ locate myfile.txt
locate命令通過搜索包含系統(tǒng)上所有文件名的數(shù)據(jù)庫來工作。搜索到的數(shù)據(jù)庫已使用upatedb命令進(jìn)行更新。
由于locate命令不必實(shí)時(shí)搜索系統(tǒng)上的所有文件,因此它比find命令效率更高。但是,除了缺少選項(xiàng)之外,還有另一個(gè)缺點(diǎn):文件數(shù)據(jù)庫每天僅更新一次。
您可以通過運(yùn)行updatedb命令手動(dòng)更新此文件數(shù)據(jù)庫:
$ updatedb
當(dāng)您需要在整個(gè)硬盤驅(qū)動(dòng)器中搜索文件時(shí),locate命令特別有用,因?yàn)閒ind命令自然需要更長的時(shí)間,因?yàn)樗仨殞?shí)時(shí)遍歷每個(gè)目錄。
如果搜索一個(gè)特定目錄(已知其中不包含大量子目錄),則最好堅(jiān)持使用find命令。
查找命令的CPU負(fù)載
在搜索大量目錄時(shí),find命令可能會占用大量資源。它本來應(yīng)該允許更重要的系統(tǒng)進(jìn)程具有優(yōu)先級,但是如果需要確保find命令占用生產(chǎn)服務(wù)器上的較少資源,則可以使用ionice或nice命令。
監(jiān)視find命令的CPU使用情況:
$ top
降低find命令的輸入/輸出優(yōu)先級:
$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"
降低find命令的CPU優(yōu)先級:
$ nice -n 19 find /path/to/search -name "myfile.txt"
或結(jié)合使用這兩個(gè)實(shí)用程序以真正確保低I / O和低CPU優(yōu)先級:
$ nice -n ionice -c2 -n7 find /path/to/search -name "myfile.txt"
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時(shí)審核處理。
聲明:江蘇教育黃頁對文中觀點(diǎn)保持中立,對所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司
南京思必達(dá)教育科技有限公司版權(quán)所有 百度統(tǒng)計(jì)