一、檔案查詢工具常用軟體
locate:
locate命令其實是find -name的另一種寫法,但是要比後者快得多,原因在於它不搜尋具體目錄,而是搜尋一個數據庫/var/lib/locatedb,這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新資料庫。
find:
find命令用來在指定目錄下查詢檔案,通過遍歷指定的目標目錄,實時查詢符合指定屬性的檔案。可以結合正則表示式(REGular EXPressio)來匹配模式。
二、軟體常用引數及使用方式
locate:
使用格式:locate [OPTION]… PATTERN…
常用引數:
-i:忽略大小寫
例項:
過濾/etc/下以sh開頭的檔案
#locate/etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
find:
find [OPTIONS] [查詢路徑] [查詢條件] [處理動作]
查詢路徑:預設為當前路徑;
查詢條件:預設為指定路徑下的所有檔案;
處理動作:預設為列印至螢幕;
1、查詢路徑
預設為當前路徑,可以指定系統內的任意路徑,但不建議使用/
2、查詢條件
(1)基本查詢條件
a、使用者、使用者組及檔名查詢
-name “檔名”:檔名支援使用globbing
glob:檔名通配;快速引用多個檔案;檔名整體匹配度檢測;
元字元:基於元字元可編寫匹配模式(pattern);
*:匹配任意長度的任意字元;
?:匹配任意單個字元;
[ ]:匹配指定集合內的任意單個字元;
[a-z], [A-Z]:不區分字元大小寫;
[0-9]
[a-z0-9]
[[:upper:]]:所有大寫字母;
[[:lower:]]:所有小寫字母;
[[:digit:]]:所有的.數字;
[[:alpha:]]:所有字母;
[[:alnum:]]:所有字母和數字;
[[:space:]]:空白字元;
[[:punct:]]:標點符號;
[^ ]:匹配指定集合外的任意單個字元;
例項:
# find /etc -name "passwd*"
-iname “檔名” 不區分大小寫
例項:
# find /tmp -iname "*yum*"
/tmp/
/tmp/
# find /tmp -name "*yum*"
/tmp/
-user USERNAME:根據屬主查詢
-group USERNAME:根據屬組查詢
例項:
# find /var -user root -o -group mail
-uid UID:根據指定UID查詢
-gid GID:根據指定GID查詢
例項:
# find /tmp -uid 3323 -ls
2346806 0 -rw-rw-r-- 1 mageedu mageedu 0 Mar 10 09:36 /tmp/mageedu
2346812 0 -rw-rw-r-- 1 mageedu mageedu 0 Mar 10 09:36 /tmp/testfile
-nouser:查詢沒有屬主的檔案
-nogroup:查詢沒有屬組的檔案需
-nouser與-nogroup引數主要用在當公司員工離職後,雖然賬戶刪除,但是他所有許可權的檔案還存在,並且以UID的形式來標識屬主與屬組,既當有uid有這個使用者相同時就會可以檢視此檔案,所以需要刪除此類檔案。
例項:
# find /tmp -nouser -nogroup -ls
2346806 0 -rw-rw-r-- 1 3323 3323 0 Mar 10 09:36 /tmp/mageedu
2346812 0 -rw-rw-r-- 1 3323 3323 0 Mar 10 09:36 /tmp/testfile
b、檔案型別查詢
-type TYPE: 根據檔案型別查詢
f: 普通檔案
d: 目錄檔案
l: 符號連結檔案
b: 塊裝置
c: 字元裝置檔案
p: 命令名管道檔案
s: 套接字文
例項:
# find /tmp -type d -ls
c、檔案大小
-size [+|-]#UNIT:
常用單位有:k, M, G
#UNIT: #-1
2k指1k-2k
-#UNIT:x
-2k:指0k-1k
+#UNIT: x > #
+2k:指2k到正無窮
例項:
# find /etc/ -type f -size +1
d、時間戳查詢
以“天”為單位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
#: 例如:今天為3月10日,3就是3月7日到3月8日(注意天是24小時制)
-#: 例如:今天為3月10日,-3就是三天內指,3月7日的現在時間到現在的時間。
+#: 例如:今天為3月10日,+3就是三天前之前指,3月7日前
以“分鐘”為單位
-amin [+|-]#
-mmin
-cmin
例項:
# find /etc -not -user root -not -user hadoop -mtime -7
# find / -nouser -nogroup -atime -3
e、許可權查詢
根據許可權查詢:
-perm [+|-]MODE
MODE: 與MODE精確匹配
+MODE:任何一類使用者的許可權只要能包含對其指定的任何一位許可權即可;
-MODE:每一類使用者的許可權都包含對其指定的所有許可權;
#這裡是指包含,例如:-444 指在屬主、屬組、其他使用者中只要包含讀許可權就可以。
例項:
# find /etc/init.d/ -perm -113 #此處指所有使用者都有執行許可權,其他使用者有寫許可權的檔案或目錄
# find /etc/ -type f -not -perm +222 #此處指所有使用者都沒有寫許可權
(2)組合查詢條件
組合查詢條件:
與:-a, 查詢條件1 -a 查詢條件2 -a …
所有條件必須同時滿足
或:-o, 查詢條件1 -o 查詢條件2 -o …
滿足其中一個條件即可
非:-not, !
-not 查詢條件
例項:
# find / ( -nouser -o -nogroup ) -a -atime -3
# find /etc/ -not ( -user root -o -user hadoop ) -a -mtime -7
3、處理動作
-print: 預設動作,列印至螢幕;
-ls: 顯示找到的檔案的詳細屬性;
-exec COMMAND {} ;
-ok COMMAND {} ;
#exec與ok的區別:ok會提供互動式,讓你確認。而exec則不需要;
例項:
# find /tmp -iname "*yum*" -type f -ls
134 0 -rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/
137 0 -rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/
# find /tmp -iname "*yum*" -type f -exec ls -l {} ;
-rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/
-rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/
# find /tmp -iname "*yum*" -type f -exec echo {} >>/tmp/ ;
# find /tmp -iname "*yum*" -type f -ok echo {} >>/tmp/ ;
? y
? y