Find應用實例
查找最近30分鍾修改的當前目錄下的.php文件
find . -name '*.php' -mmin -30
查找最近24小時回修改答的當前目錄下的.php文件
find . -name '*.php' -mtime 0
查找最近24小時修改的當前目錄下的.php文件,並列出詳細信息
find . -name '*.inc' -mtime 0 -ls
查找當前目錄下,最近24-48小時修改過的常規文件。
find . -type f -mtime 1
查找當前目錄下,最近1天前修改過的常規文件。
find . -type f -mtime +1
㈡ find 命令的 7 種用法
可以很肯定地說, find 命令是 Linux 後台開發人員必須熟知的操作之一,除非您使用的是 Windows Server。
對於技術面試,它也是一個熱門話題。讓我們看一道真題:
這種情況很常見,但令人驚訝的是,並非每個開發人員都能在面試中清楚地寫出這個命令。
答案:首先我們需要使用 cd 命令進入對應的目錄,然後,命令如下:
如果你還沒有完全理解上面的命令,完全不用擔心。本文將介紹 find 命令的 7 個實際用途,您最終會掌握它。如果您已經知道了,那麼閱讀這篇文章對您來說將是一個很好的回顧。
0. 按名稱或正則表達式查找文件
讓我們從最簡單的用法開始。要按特定名稱搜索文件,命令如下:
如何查找所有格式為 pdf 的書籍?使用正則表達式:
默認情況下,find 命令會搜索常規文件,但最好進行指定( -type f )以使所有內容更清晰:
1. 查找不同類型的文件
除了搜索常規文件外,我們還可以通過指定 -type 選項來搜索其他類型的文件。
例如目錄:
或者符號鏈接:
2.按指定的時間戳查找文件
要按指定的時間戳搜索文件,我們需要知道 Linux 系統中的 3 個不同的時間戳:
所以,正如開頭提到的面試題,要搜索 atime 超過一年的文件,我們可以編寫如下命令:
如果我們需要查找 mtime 正好是 5 天前的文件,請不要包含 + ,因為它的意思是「大於」。
顯然, + 表示「大於」, - 表示「小於」。所以我們可以搜索 ctime 在 5~10 天前的文件:
3. 按大小查找文件
-size 選項使我們能夠按指定大小查找文件。我們可以將其計量單位指定為以下約定:
類似於按時間戳查找文件,+ 表示「大於」,- 表示「小於」。例如,要查找大小為 10 MB ~ 1 GB 的文件:
4. 按許可權查找文件
合理控制文件的許可權是 Linux 管理員的一項重要任務。find 命令的 -perm 選項可以幫助我們按指定許可權查找文件:
例如,上面的命令會搜索所有具有 777 許可權的文件,這意味著一個文件對其持有者、組和所有用戶具有所有的讀、寫和可執行許可權。
5. 按所有權查找文件
這個任務很簡單。我們可以使用 -user 選項指定用戶名。例如,以下命令將查找所有屬於 yang 的文件:
6. 在找到文件後執行命令
在大多數情況下,我們希望在找到我們需要的文件後進行後續操作。例如將其刪除,或檢查它們的詳細信息等等。-exec 命令使這些所有事情變得更加容易。
現在,要了解如何使用它,讓我們回到之前提到的面試問題:
上述命令在 -exec 選項後是 rm -rf,其用於刪除文件。{} 是用於查找結果的佔位符。
注意:佔位符 {} 非常重要,尤其是在您想刪除文件時。因為,如果您不使用它,該命令將對所有文件執行(而不是您剛剛通過 find 命令找到的文件)。
做一個嘗試,請在終端上執行以下兩個命令,並檢查它們的結果有何不同:
一個使用佔位符:
另一個不使用:
-exec 選項後面的命令必須以分號(;)結束。眾所周知,轉義字元用於去除單個字元的特殊含義。在 Linux 中,反斜杠 用作轉義字元。所以我們將它用於分號字元。
總結
看完 find 命令的 7 種用法後,開始提到的面試題現在好像很容易解決了。你現在可以直接寫下它的答案並將其解釋清楚嗎?
㈢ linux下怎樣搜索一個文件
find命令用於查找文件,格式為:「find [查找路徑] 尋找條件 操作」。
《Linux就該這么學》書中提到「Linux系統中的一切都是文件」,接下來您就要感受到這份力量了。咱們在Linux系統中的搜索工作一般都是通過find命令來完成的,它可以根據不同的文件特性來做為匹配項(如文件名、大小、修改時間、許可權等信息),一旦匹配到了則會默認為用戶顯示到屏幕上來,基礎的匹配項目請見下表即可,我主要講解下「--exec」參數重要的作用,這個參數是用於將find命令搜索到的結果交由給後面的命令再進一步做處理,十分類似於咱們將在下一章中提到的管道符技術。
參數 作用
-name 匹配名稱
-perm 匹配許可權(mode為完全匹配,-mode為包含即可)
-user 匹配所有者
-group 匹配所有組
-mtime -n +n 匹配修改內容的時間(-n指n天以內,+n指n天以前)
-atime -n +n 匹配訪問文件的時間-n指n天以內,+n指n天以前
-ctime -n +n 匹配修改許可權的時間-n指n天以內,+n指n天以前
-nouser 匹配無所有者的文件
-nogroup 匹配無所有組的文件
-newer f1 !f2 匹配比文件f1新卻比f2舊的文件
--type b/d/c/p/l/f 匹配文件類型(塊設備、目錄、字元設備、管道、鏈接文件、文件文件)
-size 匹配文件的大小(+50k查找超過50k的文件,而-50k則代表查找小於50k的文件)
-prune 忽略某個目錄
-exec {} ; 後面可接對搜索到結果進一步處理的命令(下面會有演示)
具體實例請訪問:http://www.linuxprobe.com/chapter-02.html
Linux系統中的配置文件根據FHS協議會被保存到/etc目錄中,如果咱們要想獲取到該目錄中所有以host開頭的文件就可以這樣做:
[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/moles/active/moles/hostname.pp
/etc/hostname
想要在整個系統中搜索所有許可權中包括SUID許可權的文件,只需使用減號-4000即可:
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分輸出信息………………
拔高題目:在整個的文件系統中找出所有歸屬於linuxprobe用戶的文件並復制到/root/findresults目錄。
此題的重點是"-exec {} ;"其中的{}代表find命令搜索出的逐個文件,並且記得命令的結尾必須是;
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -arf {} /root/findresults/ ;
㈣ linux系統中如何找出用戶組擁有的所有文件
1、使用find命令可以解決,find語法如下:
find命令選項
-name:按照文件名查找文件。
-perm:按照文件許可權來查找文件。
-prune:使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那麼-prune將被find命令忽略。
-user: 按照文件屬主來查找文件。
-group:按照文件所屬的組來查找文件。
-mtime -n +n:按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。find命令還有- a t i m e和- c t i m e選項,但它們都和- m t i m e選項。
-nogroup:查找無有效所屬組的文件,即該文件所屬的組在/ e t c / g r o u p s中不存在。
-nouser:查找無有效屬主的文件,即該文件的屬主在/ e t c / p a s s w d中不存在。
-newer file1 ! file2:查找更改時間比文件f i l e 1新但比文件f i l e 2舊的文件。
-type 查找某一類型的文件,諸如:
b - 塊設備文件。
d - 目錄。
c - 字元設備文件。
p - 管道文件。
l - 符號鏈接文件。
f - 普通文件。
2、具體要使用的參數是-group:按照文件所屬的組來查找文件。
如查找系統中所有屬於root組的文件,可以用:
# find . -group root -exec ls -l {} \;