Linux中find命令的使用詳解(上)

2020-12-13 GeekDevOps

find命令是各種Linux發現版中比較重要的、常用的一個命令,該命令功能強大,熟練掌握了這個命令的使用,對平時的系統運維、管理工作會起到事半功倍的效果。

一.獲取幫助信息

[root@root@GeekDevOps-find ~]# find --help[root@root@GeekDevOps-find ~]# man find

大家會發現幫助信息很多,但是不太好理解。

二.find命令的格式

通過find的在線幫助文檔,我們可以知道,find命令的使用格式為:

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我們將[path…]之前平時很少使用的部分歸為一類,簡稱為:option,。如此,該命令的格式即可表示為:

find [option] [PATH] [expression]

其中,』-H』 『-L』 『-P』三個選項主要是用於處理符號連接。』-H』表示除了處理命令行參數之外,不跟隨其他符號連結,也就是說只跟隨命令行中指定的符號連接,』-L』表示跟隨所有的符號連接,』-P』是默認的選項,表示從不跟隨符號連接。

[-D debugoptions]主要用於列印診斷信息。能幫助我們診斷出find命令為何不執行我們想要其執行的任務。我們來大致了解一下:

[root@GeekDevOps-find system]# find -D helpValid arguments for -D:help Explain the various -D optionstree Display the expression treesearch Navigate the directory tree verboselystat Trace calls to stat(2) and lstat(2)rates Indicate how often each predicate succeededopt Show diagnostic information relating to optimisationexec Show diagnostic information relating to -exec, -execdir, -ok and -okdir

[-Olevel]:啟用查詢優化。一共有從0-3四個優化級別。其中0和1級別是等價的,系統默認值為1,這個選項需要在O後面直接跟一個表示查詢優化的十進位數字,如O2。

以上部分均來自於find在線幫助文檔,本人僅進行了翻譯、收集、整理工作,由於這一部分內容平時均使用的是默認值,其他值很少用到,點到為止,不作深入探討。

下面讓我們具體舉一個例子來討論一下find命令的格式。

[root@GeekDevOps-find system]# find /bin /etc -name shadow /etc/shadow

由於[option]部分使用的默認值,因此命令後直接跟的是[PATH]部分的內容,在上面的例子中,PATH的值為/bin和/etc,即需要查找的文件或目錄的路徑,可以是絕對路徑,也可以是相對路徑,可以跟多個。

[expression]後跟的是需要查找的表達式。例子中用的是-name shadow這個表達式,指定條件為找到文件名是shadow的文件。這是find命令的核心內容,是需要我們重點學習的部分。表達式指定了我們要查找的是什麼屬性的文件。此外,表達式還可以指定一些操作,比如刪除某些條件匹配的文件或內容。

三.表達式

由於關於find的在線手冊有1100多行之多,非常詳細,要一一做介紹的話需要花很多時間。因此,我選擇性的選取在日常工作中常用的知識點進行學習。

(一)TESTS

find命令是通過文件屬性查找文件的。find表達式的tests都是文件的屬性條件,比如文件的各種時間,文件權限等。很多參數中會出現指定一個數字n,一般會出現以下三種寫法:

+n:表示大於n。

-n:表示小於n。

n:表示等於n。

(二)按照時間進行查找

-amin:以分鐘為單位通過文件的最後存取時間(access time)查找文件。

-cmin:以分鐘為單位通過文件的狀態修改時間(change time)查找文件。

-mmin:以分鐘為單位通過文件的數據修改時間(modify time)查找文件。

-atime:以天為單位通過文件的最後存取時間(access time)查找文件。

-ctime:以天為單位通過文件的狀態修改時間(change time)查找文件。

-mtime:以天為單位通過文件的數據修改時間(change time)查找文件。

-newer:查找比當前文件數據修改時間更加新一點的另外的文件。

-anewer:查找比當前文件的最後存取時間更加新一點的另外的文件。

-cnewer:查找比當前文件的狀態時間更加新一點的另外的文件。

現在的時間是16:55:

圖1

圖2

圖3

-newer還有一種特殊用法,可以用來做各種時間之間的比較。比如,我想找到文件修改時間比/etc/passwd文件的change time更新的文件:

[root@GeekDevOps-find ~]# find /etc/ -newermc /etc/shadow

這個用法的原型是:find /etc/ -newerXY file。其中Y表示的是跟後面file的什麼時間比較,而X表示使用查找文件什麼時間進行比較。-newermc就是拿文件的modify time時間跟file的change time進行比較。X和Y可以使用的字母為:

a:文件access time。

c:文件change time。

m:文件modify time。

(三)根據用戶、組查找

-uid n:文件的所屬用戶uid為n。

-user name:文件的所屬用戶為name。

-gid n:文件的所屬組gid為n。

-group name:所屬組為name的文件。

-nogroup:沒有所屬組的文件。

-nouser:沒有所屬用戶的文件。

[GeekDevOps@GeekDevOps-find /]$ find / -uid `id -u`.../home/GeekDevOps/home/GeekDevOps/.bash_logout/home/GeekDevOps/.bash_profile/home/GeekDevOps/.bashrc

(四)根據權限查找

-executable:文件可執行。

-readable:文件可讀。

-writable:文件可寫。

[GeekDevOps@GeekDevOps-find /]$ find / -writable #顯示內容過多,不列舉

-perm mode:查找權限為mode的文件,mode的寫法可以是數字,也可以是ugo的方式如:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 700 -ls534195 0 drwx------ 2 GeekDevOps GeekDevOps 62 1月 23 17:09 /home/GeekDevOps

這個寫法的等效寫法為:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm u=rwx -ls534195 0 drwx------ 2 GeekDevOps GeekDevOps 62 1月 23 17:09 /home/GeekDevOps

另外要注意,mode指定的是完全符合這個權限的文件。

mode還可以使用/或-作為前綴進行描述。如果指定了-mode,就表示沒指定的權限是忽略的,就是說,權限中只要包涵相關權限即可。如:

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm 644 -ls534196 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 18 8月 3 05:11 /home/GeekDevOps/.bash_logout534197 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 193 8月 3 05:11 /home/GeekDevOps/.bash_profile534198 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 231 8月 3 05:11 /home/GeekDevOps/.bashrc

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm -600 -ls16803401 0 drwxr-xr-x 3 root root 24 1月 23 17:09 /home/534195 0 drwx------ 2 GeekDevOps GeekDevOps 62 1月 23 17:09 /home/GeekDevOps534196 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 18 8月 3 05:11 /home/GeekDevOps/.bash_logout534197 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 193 8月 3 05:11 /home/GeekDevOps/.bash_profile534198 4 -rw-r--r-- 1 GeekDevOps GeekDevOps 231 8月 3 05:11 /home/GeekDevOps/.bashrc

以上代碼塊中,前面一個代碼塊找到所有只有644權限的文件,後面一個代碼塊-600就表示只要是包括了rw的其他位任意的文件。mode加/前綴表示的是,指定的權限只要某一位複合條件就可以,其他位跟-一樣忽略,就是說-perm /600還可以找到400或者600這樣權限的文件。目前CentOS7前綴+已經被棄用。

find命令內容較豐富,本人將分上中下三部分進行總結,分享,其他部分將在後續陸續更新,敬請期待,為了有更好的代碼閱讀體驗,您也可以關注的CSDN(GeekDevOps)。

相關焦點

  • Linux中find命令細節詳解
    提示:點擊上方"Linux公社"↑免費訂閱find命令特點:文件查找,實時查找,速度略慢,精確匹配使用格式:# find [options] [>xargs的區別-exec:find將查找到的所有文件一次性全部傳遞給-exec所指定的命令,容易出現溢出錯誤。
  • 每天一個 Linux 命令(31): /etc/group文件詳解
    linux /etc/group文件是有關於系統管理員對用戶和用戶組管理的文件,linux用戶組的所有信息都存放在/etc/group文件中。具有某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
  • linux刪除命令rm的使用
    在linux中創建文件很容易,系統中隨時會有文件變得過時且毫無用處。用戶可以用rm命令將其刪除。該命令的功能為刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其下的所有文件及子目錄均刪除。對於連結文件,只是刪除了連結,原有文件均保持不變。
  • Linux工作必備命令:find命令,搜索神器高級用法
    linux系統下一切都是文檔(廢話,windows也是),而且作為開發人員平時是不使用圖形界面的,那麼多的文檔不可能都記住放在哪裡,有時候我們印象中只是記下了文檔大概的名字或者文件格式,這時候我們就需要find命令根據我們僅存的記憶來搜索文檔了。
  • Linux常用命令 - sed
    使用 sed 搜索和替換文本的一般形式如下:sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE-i 將其輸出寫入標準輸出seds 替代命令,可能是 sed 中使用最多的命令-/分隔符字符。
  • Linux常用命令詳解
    which命令在linux要查找某個文件,但不知道放在哪裡了,可以使用下面的一些命令來搜索:which     查看可執行文件的位置。find        實際搜尋硬碟查詢文件名稱。which是在PATH就是指定的路徑中,搜索某個系統命令的位置,並返回第一個搜索結果。使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。常用參數:-n  指定文件名長度,指定的長度必須大於或等於所有文件中最長的文件名。
  • linux作業系統常用命令及常用問題
    一、linux作業系統常用命令>linux作業系統詳解(linux不再難懂)●man :任何時候你覺得對一個命令行不是很確定,都可以通過輸入「man + 命令」了解這個命令能確切是做什麼的。
  • 每天學一個 Linux 命令(20):find
    命令簡介find 命令在文件系統中搜索文件和目錄。find 命令用來在指定目錄下查找文件,在參數之前的任何字符串都會當作是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,並且將查找到的子目錄和文件全部顯示出來。
  • linux常用命令—find
    Linux的find 命令有非常大的靈活性,可以向其指定豐富的搜索條件(如文件權限、屬主、屬組、文件類型、日期和大小等)來定位系統中的文件和目錄。此外,find 還支持對搜索到的結果進行多種類型的命令操作。
  • 使用cat命令在Linux中組合文本文件
    然後可以將合併的文本保存到另一個文本文件中。 在本教程中,您將學習如何使用cat命令將兩個或多個文件中的文本合併為一個文件。 這將幫助您從普通初學者獲得Ubuntu上的高級用戶狀態。 我們在Ubuntu 18.04 LTS系統上運行了本教程中提到的命令。
  • Linux 三劍客 Awk、Sed、Grep 命令詳解
    Linux三劍客Awk命令詳解命令名稱Awk  pattern scanning and processing language命令作用對文本和數據進行處理數據可以來自標準輸(stdin)、一個或多個文件,或其它命令的輸出。它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。
  • Linux命令之文件搜索
    前言在linux最小安裝模式下,當我們登錄到一臺不是自己安裝的linux伺服器上時,有的時候我們需要知道某個軟體的安裝位置,例如:我們需要知道mysql安裝在哪個目錄下,那麼我們應該怎麼辦呢?這就用到了文件的搜索功能。
  • 【玩轉Linux命令】Linux中find常見用法
    Linux中find常見用法示例find  path   -option   [  -print ]   [ -exec   -ok  command ]   {} \;find命令的參數; pathname: find命令所查找的目錄路徑。
  • Linux內存、Swap、Cache、Buffer詳解(三)
    其實也可以手動回收,怎麼操作,往下看:我們看到drop_caches這個文件默認值為0,對它進行一些寫操作就可以達到想要的效果,沒錯,就是這麼神奇,linux的原則是一切皆文件嘛。slab 分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的 pagecacheecho 3 > /proc/sys/vm/drop_caches:表示清除 pagecache 和 slab 分配器中的緩存對象接下來咱們測試一下:1、執行free  -mw 命令查看系統當前內容情況,mw這些參數的含義參見Linux內存、Swap、Cache
  • linux cut命令怎麼用?linux cut常用格式語法使用例子教程
    linux的使用方法是很多人頭疼的問題,對於這個系統的應用命令,還是來看看linux cut命令詳解,linux cut用法大全。  在linux中,cut是一個選取命令,就是將一段數據經過分析,取出我們想要的。
  • 教你Linux find命令實例教程:15個find命令用法
    在系統上查找文件或目錄時,Linux上的find命令無與倫比。它使用簡單,而且有許多不同的選項,可讓您微調文件搜索。繼續閱讀以查看如何使用此命令在系統上查找任何內容的示例。一旦您知道如何在Linux中使用find命令,每個文件都只需敲擊幾下。
  • Linux常用命令:Linux more命令使用方法
    more功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能 。more命令從前向後讀取文件,因此在啟動時就加載整個文件。
  • Linux:掛接(mount)命令的使用方法
    其實linux系統下製作和使用光碟鏡像比Windows系統更方便,不必借用任何第三方軟體包。   1、從光碟製作光碟鏡像文件。將光碟放入光碟機,執行下面的命令。若漢字文件名顯示為亂碼或不顯示,可以使用下面的命令格式。
  • Find命令使用
    slocate先將當前目錄結構做成一個資料庫,然後在此資料庫中搜索匹配記錄,因此它比find命令的搜索速度更快。--生成資料庫的命令:updatedb。輸入updatedb命令後,在var/lib/mlocate 中生成mlocate.db.
  • Linux之find命令參數總結
    xargsfind 常見的注意事項使用name選項文件名選項是find命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。 所以這個'-'的作用歸結起來就是匹配比mode權限更充足的文件(找不到什麼詞語來形容了)忽略某個目錄如果在查找文件時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的文件,那麼可以使用-prune選項來指出需要忽略的目錄。在使用-prune選項時要當心,因為如果你同時使用了-depth選項,那麼-prune選項就會被find命令忽略。如果希望在當前目錄下查找文件,但不希望在.