Linux之find命令詳解

來源:互聯網
上載者:User

在Linux的世界當中,檔案尋找是最普遍的功能,然後該功能卻有著極其複雜的命令與參數相匹配。檔案尋找有大致三個以下命令:

  • find
  • whereis
  • locate

其中難易程度之首為find,下面我們就來細說下find的命令用法,以及我收集的常用案例。

find命令的基本形式:

find pathname -options [-print -exec -ok]

  • pathname :find命令所尋找的目錄路徑。例如用.來表示目前的目錄,用/來表示系統根目錄。
  • -print :對匹配的檔案輸出到標準輸出,該命令一般會和xargs來搭配使用(在後面我們會說到)。
  • -exec :對匹配的檔案執行所給出的shell命令。
  • -ok :與-exec作用相同,只不過以一種更為安全的模式來執行shell命令,例如當執行rm命令的時候,會提示是否刪除。

find命令的參數選項:

  • -name  :按照檔案名稱來尋找檔案。
  • -perm   :按照檔案許可權來尋找檔案。
  • -mtime :按照變更檔資料天數來尋找檔案。其中附加參數為:n (當前n天)、-n(n天以內)、+n(n天以前)。具體我會在下面的案例來細講。
  • -mmin  :按照變更檔資料分鐘來尋找檔案。附參數同上。
  • -atime  :按照訪問檔案天數來尋找檔案。附參數同上。
  • -amin   :按照訪問檔案分鐘來尋找檔案。附參數同上。
  • -ctime  :按照變更檔狀態天數來尋找檔案。附參數同上。
  • -cmin   :按照變更檔狀態分鐘來尋找檔案。附參數同上。
  • -size     :按照檔案大小來尋找檔案。
  • -depth  :在尋找檔案時,遍曆完目前的目錄檔案郵件後,在對其子目錄進行尋找。
  • -type     :按照檔案類型來尋找檔案。f - 普通檔案、d - 目錄、l - 符號連結檔案、b - 塊裝置檔案、c - 字元裝置檔案、p - 管道檔案。
  • -newer :比對檔案的新舊。
  • -user :根據使用者名稱來查詢檔案。
  • -maxdepth : 限制查詢目錄的深度。

-exec 詳解

我們尋找檔案的目的就是為了對其的後續操作,如查看、刪除、修改許可權等等之類的操作。這就是-exec的作用所在。其中使用-exec時不得不說的兩個關鍵字:{} 與\;。

顯示目前的目錄中,許可權為774的所有檔案,並顯示其相關資訊。

# find . -type f -perm 774 -exec ls -l {} \;

  • {}代表的是“由find找到的內容”,如所示,find的結果會被放置到{}位置中。
  • -exec一直到“\;”是關鍵字,代表find額外命令的開始(-exec)到結束(\;),在這中間的就是find命令內的額外命令。就是本例中的“ls -l {}”
  • 因為“;”在bash環境下是有特殊意義的,因此利用反斜線來轉義。

find命令案例:

1、尋找目前使用者目錄下的所有檔案

# find $HOME -print# find ~ -print

2、尋找當天所修改過的檔案

# find / -type f -mtime 0 -exec ls -l {} \;

以上的命令並不是完全的正確,因為0代表目前的時間。也就是從現在到24小時前。還有就是盡量不要使用/根目錄開頭,原因應該大家都知道-_-!。

3、尋找/var/logs目錄中3天前所修改的檔案,並刪除。

# find /var/logs -type f -mtime +3 -ok rm {} \;

在這裡需要說明的有兩點,關於時間的 -符號、+符號、和沒有符號的區別。

以上的草圖我想已經很清楚其區別了。

  • -3  :代表過去3天內。
  • +3 :代表過去3天前。
  • 3   :代表過去3天前的當天。

另一個就是-ok,在使用-ok刪除檔案的時候,它會詢問你是否刪除,反之使用-exec的話就直接刪除掉了。

4、尋找目前的目錄中檔案大於50kb的檔案,並顯示。

# find . -type f -size +50k -exec ls -l {} \;

  • k :代表1024bytes。
  • c :代筆byte(位元組)。
  • +50k :大於50kb的檔案。
  • -50k :小於50kb的檔案。
  • 50 :等於50kb的檔案。

5、尋找許可權為755的檔案,並顯示

# find . -perm 755 -exec ls -l {} \;

6、查詢尾碼txt的目錄,且不遍曆子目錄

# find . -maxdepth 1 -name "*.txt" -exec ls -l {} \;

檔案尋找之locate

locate [-ir] keyword

  • -i :忽略大小寫差異。
  • -r :後面可接Regex。

locate的檔案尋找要比find命令快。之所以快是因為locate尋找的資料是由已建立的資料庫/var/lib/mlocate裡面的資料所尋找到的,所以不用直接在去硬碟當中訪問資料。但locate有其自己的限制。

那麼有什麼限制呢?就是因為它是經由資料庫來尋找的,而資料庫的建立預設是每天執行一次(每個distribution都不同,CentOS 5.x是每天更新資料庫一次),所以當你建立檔案後尋找該檔案,那麼locate會告訴你“找不到”。

那是否可以手動更新資料庫嗎?答案當然是可以。

# updatedb

使用上述命令就可以更新資料庫。updatedb命令會去讀取/etc/updatedb.conf這個設定檔的設定。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.