Linux文件查找工具find全解讀

來源:文萃谷 3.07W

  一、文件查找工具常用軟件

Linux文件查找工具find全解讀

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

熱門標籤