歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux中如何使用find命令

文件查找有兩種方式:

一、locate:非實時查找,模糊匹配,查找時根據全系統文件數據庫進行;速度快

    # updatedb:是手動生成文件數據庫;速度快

二、find:實時查找,精確匹配,支持眾多查找標准,遍歷指定目錄中的所有文件完成查找;速度慢

find命令的用法

find  查找路徑  查找標准  查找到以後的處理運作

查找路徑:默認為當前目錄

查找標准:默認為指定路徑下的所有文件

處理運作:默認為顯示

其匹配標准:

-name `FILENAME`:對文件名做精確匹配

文件名通配:

*:任意長度

?:任意單個字符

[]:匹配指定范圍內的任意單個字符

[:space:]:空白字符

[:punct:]:標點符號

[:lower:]:小寫字母

[:upper:]: 大寫字母

[:alpha:]: 大小寫字母

[:digit:]: 數字

[:alnum:]: 數字和大小寫字母

例:#  find  /etc  -name  'passwd*'  --> 查找以/etc目錄下以passwd開頭的文件

-iname ‘FILENAME':文件名匹配時不區分大小寫

-regex PATTERN:基於正則表達式進行文件名匹配

-user USERNAME:根據屬主查找

   例:#  find  /tmp  -user  student  --> 查找/tmp目錄下屬主為student的文件

-group GROUPNAME:根據屬組查找

-uid UID:根據UID查找

例: #  find  /tmp  -uid  2003 --> 查找/tmp目錄下uid為2003的文件

-gid GID:根據GID查找

-nouser:查找沒有屬主的文件

例: #  find  /tmp  -nouser  --> 查找/tmp目錄下沒有屬主的文件

-nogroup:查找沒有屬組的文件

-type:根據文件類型查找

文件類型:

f:普通文件

   d:目錄文件

   b:塊設備文件(block)

   c:字符設備文件(character)

       l:符號鏈接诶文件(pipe)

   p:命令管道文件(pipe)

   s:套接字文件(socket)

例:#  find  /tmp  -type  f  --> 查找/tmp目錄下的普通文件

-size:根據文件大小查找  [+|-]  

 (11M 即大於10M小於等於11M)

# k

# M

# G

例:#  find  /tmp  -size  +11M --> 查找/tmp目錄下所有大於11M的文件

組合條件:(默認為與關系)

-a:與

-o:或

-not:非

其優先級為:-not > -a > -o

小練習:找出/tmp目錄下,不是目錄,並且還不能是套接字類型的文件

    #  find  /tmp  -not  -type  d  -a  -not  -type  s

或者 #  find  /tmp  -not  \(  -type  d  -a  -type  s  \)

-mtime:根據文件的修改時間查找;(天數)

-ctime:根據文件的改變時間查找;(天數)

-atime:根據文件的訪問時間進行查找;(天數)

+n:表示至少n天沒訪問過

-n:表示n天內沒訪問過

n:表示第n天訪問過

例: find  /tmp  -mtime  -7  --> 查找/tmp目錄下7天內被修改過的文件

-mmin:根據文件的修改時間查找;(分鐘數)

-cmin:根據文件的改變時間查找;(分鐘數)

-amin:根據文件的訪問時間進行查找;(分鐘數)

(用法同上)

-perm  MODE (直接跟權限表示精確匹配)按權限查找

-mode:文件權限能完全包含此MODE時才能顯示

/mode:任意一位匹配即可

  例:# find  /tmp  -perm  -011 --> 查找組用戶和其他用戶都有讀權限的文件

    #find  /tmp  -perm  /022  --> 查找組用戶或者其他用戶有寫權限的文件

運作:

-print:顯示

-ls: 類似ls -l的形式顯示每一個文件的詳細信息

-ok COMMAND {} \;  對查找的文件執行命令。每一次操作都需要用戶確認

-exec COMMAND {} \;  不需要確認

 例:   # find /tmp -prem -006 -exec chmod o-w {} \;  

--> 查找其他用戶有讀寫權限的用戶,並且把將其寫權限去掉。

 # find -type d -ok chmod +x {} \;  --> 將當前的目錄都改為執行權限

 # find -perm -020 -exec mv {} {}.new \;)

--> 將當前目錄下有寫權限的組用戶的名字改為後面加.new

Find命令的高級應用:

1、查找/var目錄下屬主為root並且屬組為mail的所有文件;

# find /var -user root -group mail

(這裡默認的關系為與的關系,即兩個條件為真,結果為真。中間可加-a)

2、查找/usr目錄下不屬於root,bin,或student的文件;

# find /usr -not -user root -a -not -user bin -a -not -user student

# find /usr -not \( -user root -o -user bin -o -user student \)

(上邊一句分別寫不屬於各個用戶的文件;下邊一句是將語句合起來,括號前要用\作轉義符,這裡使用摩根定律,加括號時,括號裡的與關系要轉成或關系)

3、查找/etc目錄下最近一周內內容修改過且不屬於root及student用戶的文件;

# find /etc -mtime -7 -not  \( -user root -o -user student \)

# find /etc -mtime -7 -not -user root -a -not -user student

同上,使用摩根定律。

4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改為root;

# find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;

(先找出沒有屬主或屬組的文件,要用括號括著,再找一天內被訪問過的文件。最後用-exec修改其屬主和屬組。 最後邊的 \; 一定不要忘了)

5、查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中;

# find /etc -size +1M >> /tmp/etc.largefiles

# find /etc -size +1M | xarges echo {} >> /tmp/etc.largefiles

擴展:

xarges --> 可用其將查找出的文件名寫入另一個文件中。

6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;

# find /etc -not -perm /222 -ls

(-ls,可查看查找到文件的詳細信息)

 

Copyright © Linux教程網 All Rights Reserved