文件查找命令:locate, find
文件的位置在windows上面可能在C、D、E、F的某一個分區上或在整個操作系統上的每個分區上面,而對於linux上的系統而言,是由一個根文件系統的統一入口而組成的;在根文件系統上有很多個分支,可以將某個分關聯到文件系統的一個空的目錄下。而文件查找就是在文件系統上查找符合條件的文件;
先來說一下locate命令的使用;
Locate的實現機制是根據事先構建的索引來進行文件查找的,並且查找類型是模糊查找,locate的查找速度非常快,它不是遍歷整個文件系統進行的查找而是通過查找索引數據庫進行模糊匹配來查找的;系統的索引庫一般是系統通過週期性任務在空閒時自動實現的,它並不是實時的,也可以通過手動更新索引數據庫的方法來更新,但是佔用的系統資源還是比較大的,強烈建議不要進行手動更新
通過locate來搜索文件是有侷限性的,比如買來一本書,locate就好比書的目錄,如果要查找書裏面的內容,通過目錄可以快速的找到,但是如果把書的後面幾頁撕掉了,目錄上的還能看到,但書中內容就無法找到了,同樣locate也不能做到對文件的實時記錄,如果刪掉文件後,locate還是可以找到文件的,這有時候就給我們的工作帶來了很多不便。
比locate更好用的命令find
Find命令是通過遍歷指定起始路徑下文件系統層級結構完成文件查找的一款實時查找工具;
它的工作特性具有:查找速度比locate略慢;可以精確查找;可以實時查找;
Find命令具體使用方法:
find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑;默認爲當前目錄;
查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、權限等等標準進行;默認爲找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認爲輸出至標準輸出;
查找條件與處理動作是我們學習的重點
在find中我們把查找條件主要分爲選項和測試;
一、測試
1、根據文件名進行查找的;並且支持glob(文件名通配)風格的通配符格式進行查找;
常見的格式:
-name “pattern”
-iname “pattern” iname:表示不區分文件名大小寫
示例:~]# find /etc -name “passwd”或find /etc -iname passwd
~]# find /etc -name “passwd*”或find /etc -iname passwd*
2、根據文件的從屬關係查找:
-user USERNAME: 查找屬主指定用戶的所有文件;
-group GRPNAME: 查找屬組指定組的所有文件;
-uid UID: 查找屬主爲指定的UID的所有文件;
-gid GID: 查找屬組爲指定的GID的所有文件;
-nouser: 查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
示例:~]# find /etc –user root
~]# find /etc –uid 3000
3、根據文件的類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
s: 套接字文件
示例:~]# find /etc –type b 表示在/etc下查找塊設備文件
~]# find /etc –type f 表示在/etc下查找普通文件
4、組合測試:
與:-a,默認組合邏輯;兩個查找的參數都必須匹配
示例:~]# find /etc fstab –a issue
或:-o,表示有一個參數匹配即可
示例:~]# find /etc –type b –o -nouser
非:-not, !表示取與所查結果相所的值
示例:~]# find /etc -nouser
5、根據文件的大小查找:
-size[+|-]# 常用單位:k,M,G默認爲字節
#UNIT: 5M 表示查找5M的文件
-#UNIT: -5M 表示查找小於5M的文件
+#UNIT: +5M表示查找大於5M的文件
示例: ~]# find /etc –size +5M
6、根據時間戳查找:
以“天”爲單位:
-atime [+|-]#
-#:表示#天內訪問過的文件
+#:表示#天外訪問過的文件
-mtime
-#:表示#天內更改過的文件
+#:表示#天內更改過的文件
示例:~]# find /etc –atime -7
也可以以“分鐘”爲單位:
-amin
-mmin
-cmin
示例:~]# find /etc –amin -60
7、根據權限查找:
-perm [/|-]mode
mode: 精確權限匹配;find ./ -perm 644 -ls
/mode: 任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;
示例:find ./ -perm /666[/001]
-mode: 每一類用(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;
示例:find ./ -perm -222
二、處理動作:
-print:輸出至標準輸出:默認的動作;
-ls: 類似於對查找到的文件執行“ls -l"命令,輸出文件的詳細信息;
-delete: 刪除查找到的文件;
-fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長格式信息保存至打指定文件中;
-ok COMMAND {} \; :表示對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;
示例: find ./-nouser -a -nogroup -ok chown root:root {} \;
-exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;
示例:find ./-nouser -a -nogroup -exec chown root:root {} \;
注意:find傳遞查找到的文件路徑至exec後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令;但是有些命令不能接受過長的參數,此時命令執行會失敗;