前言:Linux一切皆文件,在linux的系統中如果我們需要找到所需的文件,除了一步一步慢慢找,還有一種辦法就是要使用Linux中查找文件工具命令,能讓我們很快定位到我們所需的文件。所以我們必須要學好文件查找工具
一、首先我們先要了解文本搜索和文件查找的區別
文本搜索:根據用戶所指定的PATTERN、字符對文本文件中的內容進行過濾和匹配。常用的工具有"grep"、"egrep"、"fgrep"
文件查找:根據文件的各個屬性去匹配相對應的文件。常用工具有"find"、"locate"
二、對於文件查找的工具區別
首先我們要了解文件查找的2中方法
1、實時查找:是遍歷對所有文件進行條件匹配。常用命令:"find"
優點:能精確查找和匹配,而且能實時查找到最新的文件。
缺點:速度比較慢
2、非實時查找:是根據索引數據庫進行查找。常用命令:"locate"
優點:查找速度快
缺點:①非精確查找,而且是屬於模糊查找
②必須依賴索引數據庫纔可以,而且在構建索引時相當佔用時間和資源
小貼士:索引數據庫的創建更新是在系統空閒時並使用每日任務進行的,所以無法實時找到最新的文件。若想立即更新索引數據庫,可以執行命令:updatedb
三、find 用法
find [option] ...[查找路徑] [查找條件] [處理動作]
各參數的默認值:
查找路徑:默認爲當前路徑
查找條件:默認爲指定路徑下的所有文件
處理動作:默認爲顯示在屏幕上
1、查找路徑
1.1、絕對路徑
[root@eric ~]# find /tmp/test "*p*"
1.2、相對路徑
[root@eric tmp]# find ./test "*p*"
2、查找條件
2.1、 -name "指定文件名稱"
備註:支持使用globbing(通配符)字符
*:任意長度的任意字符
?:任意單個字符
[]:指定範圍內的任意單個字符
[^]:指定範圍外的任意單個字符
[root@eric tmp]# find /etc/ -name "p*[0-9]*" 表示在/etc/路徑下找包含"p"開頭並且包含"數字"的所有文件
2.2、-iname "指定文件名稱" :查找時不區分大小寫,默認是區分大小寫的。
[root@eric tmp]# find /etc/ -iname "p*"
2.3、-user USERNAME :查找時根據文件屬主查找
2.4、-group GROUPNAME:查找時根據文件的屬組查找
[root@eric tmp]# find /home/ -user user1
2.5、-uid UID : 查找時根據文件的屬主的UID查找
2.6、-gid GID :查找時根據文件的屬組的GID查找
[root@eric tmp]# find /home/ -gid 600
2.7、-nouser:查找沒有屬主的所有文件
2.8、-nogroup:查找沒有屬組的所有文件
[root@eric tmp]# find / -nouser
2.9、-type TYPE :根據文件類型查找
-f:普通文件
-d:目錄文件
-l:符號鏈接
-b:塊設備
-c:字符設備
-s:套接字文件
-p:命名管道
[root@eric tmp]# find /etc/ -type d -name "p*[0-9]*"
2.10、-size [ + | - ]#UNIT:根據文件大小來查找
UNIT:代表的是單位。常用單位;k,M,G
# :代表的是數字
+ :代表的是大於
- :代表的是小於
例子:以 # = 9 , UNIT = k
2.11、-perm [ + | - ] MODE :根據文件權限查找
MODE:代表用戶對該文件的權限,即 r(4) ,w(2) ,x(1)
MODE:代表與MODE權限都要精確匹配
+MODE:代表任何一類用戶的權限只要包含對其指定的任意一個權限滿足即可
-MODE:每一類用戶指定的權限都被必須被包含,並且是完全包含
2.12、根據時間戳查找
2.12.1、以"天"爲單位
-atime [ + | - ] # :根據訪問時間進行查找
-mtime [ + | - ] # :根據修改時間進行查找
-ctime [ + | - ] # :根據狀態改動時間查找
2.12.2、以"分鐘"爲單位
-amin [ + | - ] # :根據訪問時間進行查找
-mmin [ + | - ] # :根據修改時間進行查找
-cmin [ + | - ] # :根據狀態改動時間查找
例子: 以 # 爲 4 使用atime
代表的意思:
+4 :代表大於等於5天前訪問過的文件
-4 :代表小於等於4天前訪問過的文件
4 :代表4 ~ 5 這一天訪問過的文件
2.13、根據組合條件查找
指是在條件語句語句中執行邏輯運算
與:-a 指必須同時滿足(默認值就是-a,所以-a可以不填)
或:-o 指滿足其中一個即可
非:-not \ ! 指條件取反
小貼士:上面例子最後的一個例子也可以使用下面的方法
[root@eric test1]# find ./ -not \( -iname "*r*" -o -group tuser602 \)
3、處理動作
3.1、-print: 默認處理動作,顯示在在屏幕
3.2、-ls :相當於 ls -l (備註:在使用於組合條件時會有點問題)
3.3、-exec :運行命令,對查找到的文件執行某個命令
-exec COMMAND{} \; (備註: \; 表示結束 {} 表示引用了文件的本身)
[root@eric test1]# find ./ -perm -001 -exec chmod o-x {} \; //將權限符合 -001的所有文件權限改成 o-x [root@eric test1]# find ./ -perm +200 -a -type f -a -not -name "*.*" -exec mv {} {}.txt \; //將當前路徑下沒有後綴的所有文件都加上.txt後綴
3.4、-ok :使用交互式執行命令
-ok COMMAND {} \;
小貼士:find 一次性查找所有符合條件的所有文件,並一同傳遞給-exec或-ok後面所指定的命令;但是,有些命令不能接受過長的參數:因此這時應該使用另一種方法
find | xargs COMMAND 意思是找到一個處理一個
[root@eric test1]# find /tmp -name core -type f -print | xargs /bin/rm -f
四、總結
find 的使用格式
find [查找路徑] [查找條件] [處理動作]
查找路徑:絕對路徑,相對路徑
查找條件:-name , -iname , -user , -group , -uid , -gid , -nouser , -nogroup , -size ,-perm
根據時間戳查找: -mtime , -ctime , atime , -amin , -mmin , -cmin
根據組合條件查找: -a , -o , -not , !
處理動作: -print , -ls , -exec , -ok