歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> locate,find

locate,find

日期:2017/3/3 11:05:29   编辑:Linux技術

文件查找常見的命令: locate,find

=================================================================

locate - find files by name

工作特性:

依賴於事先建好的索引庫

系統自動實現(周期性進行)

手動更新數據庫(updatedb)

查找速度快

模糊查找

非實時查找

命令使用格式:locate [OPTION]... PATTERN...

-b:只匹配基名(指定資料庫的路徑)

-c:統計出符合條件的文件的數量

-r:使用正規運算式 做尋找的條件。

注意:索引構建過程需要遍歷整個根文件系統,極消耗資源

=================================================================

find - search for files in a directory hierarchy(目錄層次)

實時查找工具,通過遍歷指定起始路徑下文件系統層次結構完成文件查找

工作特性:

查找略慢

精確查找

實時查找

用法:

find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]

查找起始路徑:指定具體搜索目標起始路徑,默認當前目錄

查找條件:指定的查找標准,可以根據文件名,大小,類型,從屬關系,權限等

標准進行,默認為找出指定路徑下的所有文件

處理動作:對符號查找文件的條件作出的操作,例如刪除...默認為輸出至標准輸出

查找條件:

表達式:選項和測試

測試:結果通常布爾型

一、根據文件名查找:

1.-name

2.-iname:不區分文件名中大小寫,支持通配符,不支持正則。

支持glob風格的通配符:*、?、[]、[^]

3.-regex :基於正則模式查找文件,匹配是整個路徑而非其名。

二、根據文件從屬關系查找:

-user:查找屬主指定用戶的所有文件

-group 查找屬組指定組的所有文件

-uid uid:查找屬主指定uid的所有文件

-gid gis:查找屬組指定gid的所有文件

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

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

三、根據文件的類型:

-type TYPE

f:普通文件 d l b s c p

四、組合測試:

與:-a,默認組合邏輯(and)

或:-o,

非:-not 或!

!A -a !B=!(A -o B)

!A -o !B=!(A -a B)

五、根據文件大小查找:

-size[+|-]#UNIT

常用單位:K M G,不帶默認字節為單位。#=數字

#UNIT:(#-1,#]

-#UNIT:[0,#-1]

+#UNIT:(#,∞)

六、根據時間戳查找:

以“天”為單位 :

-atime[+|-]#

#:[#,#-1)

-#:(#,0]

+#:(∞,#-1)

-mtian

-ctime

以分鐘為單位:

-amin

-minm

-cmin

七、根據權限查找:

-perm [/|-]mode

mode(權限位)

/mode:任何一類用戶(u g o)的權限中有任何一個權限(r w x)符合條件既滿足。

-mode:每一類用戶(u g o)的權限中的每一位權限(r w x)同時符合條件既滿足。

處理動作:

-print:輸出至標准輸出,默認的動作

-ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的現實信息

-delete:刪除查找到的文件(極其危險,請勿嘗試)

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中

-ok COMMAND {} \; ==>對查找到的每個文件執行有COMMAND表示的命令;每次操作都由用戶確認。

-exec COMMAND {} \; ==>對查找到的每個文件執行由COMMAND表示的命令。

注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有的符合條件的文件路徑,並一次性傳遞給後面的命令;但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可以規避此問題:

find |xargs COMMAND

***學習xargs命令的用法***

-----------------------------------------------------------------

實例:

[root@zyl ~]# find /etc -iname "passwd?"

/etc/passwd-

/etc/test/passwdo

[root@zyl ~]# find /etc -iname "passwd[[:alnum:]]"

/etc/test/passwdo

-----------------------------------------------------------------

[root@zyl ~]# find /etc -iname "?passwd"

/etc/security/opasswd

-----------------------------------------------------------------

[root@zyl ~]# find /etc -name "passwd"

/etc/passwd

/etc/pam.d/passwd

[root@zyl ~]# find /etc -iname "passwd"

/etc/passwd

/etc/pam.d/passwd

/etc/test/Passwd

-----------------------------------------------------------------

[root@zyl ~]# find /tmp/ -user root

[root@zyl ~]# find /tmp -group root

[root@zyl ~]# find /tmp/ -uid 0

[root@zyl ~]# find /tmp/ -gid 0

[root@zyl ~]# find /tmp/ -nouser

[root@zyl ~]# find /tmp/ -nogroup

-----------------------------------------------------------------

[root@zyl ~]# find /etc/ -type l -ls

[root@zyl ~]# find /dev/ -type b -ls

-----------------------------------------------------------------

[root@zyl ~]# find /etc/ ! -type f -ls

-----------------------------------------------------------------

[root@zyl ~]# find /etc/ -mtime -1 -ls

[root@zyl ~]# find /etc/ -atime +7 -ls

=================================================================

練習題:

1.查找/var目錄下屬主為root,且屬組為mail的所有文件或者目錄

[root@zyl ~]# find /var/ -user root -a -group mail -ls

其余的自己練習:

2.查找/usr目錄下不屬於root,bin或者hadoop的所有文件

3.查找/etc目錄下最近一周內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄

4.查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的文件或目錄

5.查找/etc目錄下大於1M且類型為普通文件的所有文件

6.查找/etc目錄下所有用戶都沒有執行權限的文件

7.查找/etc目錄下至少有一類用戶沒有執行權限的文件

8.查找/etc/init.d/目錄下,所有用戶都有執行權限,且其他用戶有寫權限的所有文件。

=================================================================

本文出自 “randolph” 博客,轉載請與作者聯系!

Copyright © Linux教程網 All Rights Reserved