溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux如何通過find命令查找東西

發(fā)布時(shí)間:2021-10-23 17:10:19 來源:億速云 閱讀:139 作者:小新 欄目:系統(tǒng)運(yùn)維

小編給大家分享一下linux如何通過find命令查找東西,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

選擇起點(diǎn)

使用 find,你可以選擇一個(gè)起點(diǎn)或從你所在的位置開始。要選擇的搜索的起點(diǎn),請(qǐng)?jiān)趩卧~ find 后輸入它。例如,find /usrfind ./bin 將在 /usr 目錄或當(dāng)前位置下的 bin 目錄開始搜索,而 find ~ 將在你的主目錄中開始搜索,即使你當(dāng)前位于當(dāng)前文件系統(tǒng)中的其他位置。

選擇你要找的

最常用的搜索策略之一是按名稱搜索文件。這需要使用 -name 選項(xiàng)。

默認(rèn)情況下,find 會(huì)顯示找到的文件的完整路徑。如果你在命令中添加 -print,你會(huì)看到同樣的結(jié)果。如果你想查看與文件相關(guān)的詳細(xì)信息—-例如:文件的長(zhǎng)度、權(quán)限等,你需要在你的 find 命令的末尾添加 -ls 參數(shù)。

$ find ~/bin -name tryme/home/shs/bin/tryme$ find ~/bin -name tryme -print/home/shs/bin/tryme$ find ~/bin -name tryme -ls   917528   4 -rwx------   1 shs    shs   139 Apr  8  2019 /home/shs/bin/tryme

你也可以使用子字符串來查找文件。例如,如果你將上面示例中的 tryme 替換為 try*,你將會(huì)找到所有名稱以 try 開頭的文件。(LCTT 譯注:如果要使用通配符 * ,請(qǐng)將搜索字符串放到單引號(hào)或雙引號(hào)內(nèi),以避免通配符被 shell 所解釋)

按名稱查找文件可能是 find 命令最典型的用法,不過還有很多其他的方式來查找文件,并且有這樣做的需要。下面的部分展示了如何使用其他可用的方式。

此外,當(dāng)按文件大小、組、索引節(jié)點(diǎn)等條件來搜索文件時(shí),你需要確認(rèn)找到的文件與你要查找的文件是否相匹配。使用 -ls 選項(xiàng)來顯示細(xì)節(jié)是非常有用。

通過大小查找文件

按大小查找文件需要使用 -size 選項(xiàng)并且對(duì)相應(yīng)規(guī)范使用一點(diǎn)技巧。例如,如果你指定 -size 189b,你將找到 189 個(gè)塊大小的文件,而不是 189 個(gè)字節(jié)。(LCTT 譯注:如果不跟上單位,默認(rèn)單位是 b。一個(gè)塊是 512 個(gè)字節(jié)大小,不足或正好 512 個(gè)字節(jié)將占據(jù)一個(gè)塊。)對(duì)于字節(jié),你需要使用 --size 189c(字符)。而且,如果你指定 --size 200w ,你將會(huì)找到 200 個(gè)“word”的文件——以“雙字節(jié)增量”為單位的字,而不是“我們互相談?wù)摰哪切┦虑椤敝械膯卧~。你還可以通過以千字節(jié)(k)、兆字節(jié)(M)和千兆字節(jié)(G)為單位提供大小來查找文件。(LCTT 譯注:乃至還有 T、P

大多數(shù)情況下,Linux 用戶會(huì)搜索比選定大小要大的文件。例如,要查找大于 1 千兆字節(jié)的文件,你可以使用這樣的命令,其中 +1G 表示“大于 1 千兆字節(jié)”:

$ find -size +1G -ls 2>/dev/null  787715 1053976 -rw-rw-r-- 1 shs  shs  1079263432 Dec 21  2018 ./backup.zip  801834 1052556 -rw-rw-r-- 1 shs  shs  1077809525 Dec 21  2018 ./2019/hold.zip

通過索引節(jié)點(diǎn)號(hào)查找文件

你可以通過用于維護(hù)文件元數(shù)據(jù)(即除文件內(nèi)容和文件名之外的所有內(nèi)容)的索引節(jié)點(diǎn)來查找文件。

$ find -inum 919674 -ls 2>/dev/null  919674  4 -rw-rw-r--  1 shs  shs   512 Dec 27 15:25 ./bin/my.log

查找具有特定文件所有者或組的文件

按所有者或組查找文件也非常簡(jiǎn)單。這里我們使用 sudo 來解決權(quán)限問題。

$ sudo find /home -user nemo -name "*.png" -ls 1705219  4 drwxr-xr-x  2 nemo nemo  4096 Jan 28 08:50 /home/nemo/Pictures/me.png

在下面這個(gè)命令中,我們尋找一個(gè)被稱為 admins 的多用戶組擁有的文件。

# find /tmp -group admins -ls   262199      4 -rwxr-x---   1 dory     admins         27 Feb 16 18:57 /tmp/testscript

查找沒有所有者或組的文件

你可以使用如下命令所示的 -nouser 選項(xiàng)來查找不屬于當(dāng)前系統(tǒng)上的任何用戶的文件。

# find /tmp -nouser -ls262204 4 -rwx------ 1 1016 1016 17 Feb 17 16:42 /tmp/hello

請(qǐng)注意,該列表顯示了舊用戶的 UID 和 GID,這清楚地表明該用戶未在系統(tǒng)上定義。這種命令將查找?guī)粢褟南到y(tǒng)中刪除的用戶創(chuàng)建在主目錄之外的文件,或者在用戶帳戶被刪除后而未被刪除的主目錄中創(chuàng)建的文件。類似地,-nogroup 選項(xiàng)也會(huì)找到這樣的文件,尤其是當(dāng)這些用戶是相關(guān)組的唯一成員時(shí)。

按上次更新時(shí)間查找文件

在此命令中,我們?cè)谔囟ㄓ脩舻闹髂夸浿胁檎疫^去 24 小時(shí)內(nèi)更新過的文件。sudo 用于搜索另一個(gè)用戶的主目錄。

$ sudo find /home/nemo -mtime -1/home/nemo/home/nemo/snap/cheat/home/nemo/tryme

按上次更改權(quán)限的時(shí)間查找文件

-ctime 選項(xiàng)可以幫助你查找在某個(gè)參考時(shí)間范圍內(nèi)狀態(tài)(如權(quán)限)發(fā)生更改的文件。以下是查找在最后一天內(nèi)權(quán)限發(fā)生更改的文件的示例:

$ find . -ctime -1 -ls   787987   4 -rwxr-xr-x   1 shs   shs     189 Feb 11 07:31 ./tryme

請(qǐng)記住,顯示的日期和時(shí)間只反映了對(duì)文件內(nèi)容進(jìn)行的最后更新。你需要使用像 stat 這樣的命令來查看與文件相關(guān)聯(lián)的三個(gè)狀態(tài)(文件創(chuàng)建、修改和狀態(tài)更改)。

按上次訪問的時(shí)間查找文件

在這個(gè)命令中,我們使用 -atime 選項(xiàng)查找在過去兩天內(nèi)訪問過的本地 pdf 文件。

$ find -name "*.pdf" -atime -2./Wingding_Invites.pdf

根據(jù)文件相對(duì)于另一個(gè)文件的時(shí)間來查找文件

你可以使用 -newer 選項(xiàng)來查找比其他文件更新的文件。

$ find . -newer dig1 -ls   786434     68 drwxr-xr-x  67 shs      shs         69632 Feb 16 19:05 .  1064442      4 drwxr-xr-x   5 shs      shs          4096 Feb 16 11:06 ./snap/cheat   791846      4 -rw-rw-r--   1 shs      shs           649 Feb 13 14:26 ./dig

沒有相應(yīng)的 -older 選項(xiàng),但是你可以用 ! -newer (即更舊)得到類似的結(jié)果,它們基本上一樣。

按類型查找文件

通過文件類型找到一個(gè)文件,你有很多選項(xiàng)——常規(guī)文件、目錄、塊和字符文件等等。以下是文件類型選項(xiàng)列表:

b      塊特殊文件(緩沖的)c      字符特殊文件(無緩沖的)d      目錄p      命名管道(FIFO)f      常規(guī)文件l      符號(hào)鏈接s      套接字

這里有一個(gè)尋找符號(hào)鏈接的例子:

$ find . -type l -ls   805717   0 lrwxrwxrwx   1 shs    shs    11 Apr 10  2019 ./volcano -> volcano.pdf   918552   0 lrwxrwxrwx   1 shs    shs     1 Jun 16  2018 ./letter -> pers/letter2mom

限制查找的深度

-mindepth-maxdepth 選項(xiàng)控制在文件系統(tǒng)中搜索的深度(從當(dāng)前位置或起始點(diǎn)開始)。

$ find -maxdepth 3 -name "*loop"./bin/save/oldloop./bin/long-loop./private/loop

查找空文件

在這個(gè)命令中,我們尋找空文件,但不進(jìn)入目錄及其子目錄。

$ find . -maxdepth 2 -empty -type f -ls   917517      0 -rw-rw-r--   1 shs   shs      0 Sep 23 11:00 ./complaints/newfile   792050      0 -rw-rw-r--   1 shs   shs      0 Oct  4 19:02 ./junk

按權(quán)限查找文件

你可以使用 -perm 選項(xiàng)查找具有特定權(quán)限集的文件。在下面的示例中,我們只查找常規(guī)文件(-type f),以避免看到符號(hào)鏈接,默認(rèn)情況下符號(hào)鏈接被賦予了這種權(quán)限,即使它們所引用的文件是受限的。

$ find -perm 777 -type f -lsfind: ‘./.dbus’: Permission denied   798748      4 -rwxrwxrwx   1 shs      shs            15 Mar 28  2019 ./runme

使用查找來幫助你刪除文件

如果使用如下命令,你可以使用 find 命令定位并刪除文件:

$ find . -name runme -exec rm {} \;

{} 代表根據(jù)搜索條件找到的每個(gè)文件的名稱。

一個(gè)非常有用的選項(xiàng)是將 -exec 替換為 -ok。當(dāng)你這樣做時(shí),find 會(huì)在刪除任何文件之前要求確認(rèn)。

$ find . -name runme -ok rm -rf {} \;< rm ... ./bin/runme > ?

刪除文件并不是 -ok-exec 能為你做的唯一事情。例如,你可以復(fù)制、重命名或移動(dòng)文件。

以上是“l(fā)inux如何通過find命令查找東西”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI