天天看點

Linux基礎--檔案查找

1. which

which - shows the full path of (shell) commands.

2. locate

locate - find files by name

locate檔案查找是基于資料庫的,系統會每天固定時間去更新locate資料庫,那麼當天建立的檔案可能使用locate指令就沒有辦法找到了。此時需要手動更新locate資料庫,可以使用系統自帶的每日更新locate資料庫腳本

或者

3. find

find查找檔案是實時查找,沒有基于資料庫,速度可能會慢一點,但是比locate會更常用。因為locate會周遊整個檔案系統,然後建立資料庫索引,這會消耗大量的資源,影響伺服器上服務的正常運作。

基本用法可用通過此[連結]找到,介紹得很詳細了,這裡隻是總結一下查找方式和一些應該注意的地方。

根據檔案名查找

可以使用glob比對規則,可以使用正規表達式。

regextype為正規表達式類型,預設為emacs類型,還有posix-awk, posix-basic, posix-egrep,posix-extended這四種。

當你給出不存在的regextype時,find指令會給出如下提示資訊,可用的類型有這些。不太清楚是man手冊沒有更新,還是這些可用的類型中其中一些隻是标準類型的縮寫。不過常用的類型一般也就是posix-basic和posix-extended吧。

值得注意的是man手冊中這樣一段描述,意思是在find中使用正規表達式需要比對整個路徑而不是僅僅比對檔案,如果僅比對檔案名你是找不到的。

感受一下

根據檔案類型查找

根據檔案時間戳查找

根據檔案大小查找

根據檔案權限查找

mode精确比對則滿足條件

将mode轉換成二進制,比如mode=111那麼轉換成二進制為001 001 001,而被查找的檔案的權限位也可以被轉換成一個二進制數,兩者在位上為1的部分必須完全比對,則滿足條件,位上為0的不用管。即被查找檔案需要完全比對mode給出的基本權限即可。

将mode轉換成二進制,比如mode=111那麼轉換成二進制為001 001 001,而被查找的檔案的權限位也可以被轉換成一個二進制數,兩者在任意一位為1位上比對,則滿足條件,位上為0的不用管。即被查找檔案隻需要比對mode給出的基本權限的任意一個權限位即可。

多條件聯合查找時使用與或非

注意:優先級:非>與>或;盡量使用括号将條件之間的邏輯關系描述清楚,增強可讀性。

對于查找到的檔案進行處理

雖然find自帶兩個選項-ok和-exec來做複雜處理動作,但是它是将所有比對的結果一次×××給後面的處理動作,當結果集過大時很容易出現問題。

使用xargs指令結合管道來使用就可以解決。

繼續閱讀