1. 程式人生 > >linux命令: 兩個查找工具 locate,find

linux命令: 兩個查找工具 locate,find

區分 其他 執行權限 查找條件 acs 遍歷 find ima 使用

linux 中有很多查找工具,今天主要講解locate,find兩個工具。

1.locate

(1)查詢系統上預建的文件索引數據庫

/var/lib/mlocate/mlocate.db

註意:如果這個文件刪除了,locate就無法使用了。需手動手動更新數據庫(updatedb),或重啟系統,locate才能恢復作用

依賴於事先構建的索引:

索引的構建是在系統較為空閑時自動進行( 周期性任務 /etc/cron.daily), 管理員手動更新數據庫(updatedb)

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

技術分享

(2)工作特點:

查找速度快

模糊查找

非實時查找

• 搜索的是文件的全路徑,不僅僅是文件名

• 只搜索用戶具備讀取和執行權限的目錄,沒有權限,即使數據庫有內容,也不顯示,為了安全

(3)locate 用法

-i 不區分大小寫的搜索

-n # 只列舉前#個匹配項目

-r 支持正則

技術分享

2.find

實時查找工具,通過遍歷指定路徑完成文件查找(find不同於其他命令的習慣,選項只加一個-)

相較於locate,find功能非常強大,除了基於文件名字查找外,還能基於權限,文件類型,大小等好多方式進行查找,所以被我們普遍應用。

(1)工作特點:

• 查找速度略慢

精確查找(可以通過正則,通配符,實現模糊查詢)

實時查找

• 只搜索用戶具備讀取和執行權限的目錄

(2)find 用法格式

find [OPTION]... [ 查找路徑] [ 查找條件] [ 處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件

處理動作:對符合條件的文件做操作,默認輸出至屏幕,還有更多其他的處理動作。

(3)查找條件

① 根據搜索層級

-maxdepth level 最搜索目錄深度, -1 指定目錄為第1級,當前目錄

-mindepth level 最搜索目錄深度

技術分享

② 根據文件名和inode 查找:

-name :基於名稱的精確查找 ,支持使用文字通配符 *, ?, [], [^]等

-iname :基於名稱忽略大小寫的精確查找查找

-inum :基於inode查找

-samefile name :基於相同inode的查找(查找硬鏈接)

技術分享

-links n 硬鏈接數為n 的文件

-regex "PATTERN" :支持正則 ,默認為(emacs標準的正則),查詢正則表達的範圍

例:".*\/[a-z].*" 搜索所有以小寫字母開頭的文件

-regextype egrep -regex 支持egrep同標準的正則

技術分享

根據屬主、屬組查找:

-user USERNAME :查找屬主為指定用戶(UID) 的文件

-group GRPNAME: 查找屬組為指定組(GID) 的文件

-uid UserID :查找屬主為指定的UID 號的文件

-gid GroupID :查找屬組為指定的GID 號的文件

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

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

技術分享

④ 根據文件類型查找:

find -type

f: 普通文件

d: 目錄文件

l: 符號鏈接文件 (軟連接)

s :套接字文件 (/dev/log)

b: 塊設備文件 (/dev/sda)

c: 字符設備文件 (/dev/tty)

p: 管道文件

技術分享

⑤ 根據文件大小來查找:

find -size [+|-]#UNIT 根據文件大小來查找 常用單位:k, M, G,c(byte)

#UNIT: (#-1, #] 如:6k 表示(5k,6k]

-#UNIT:[0,#-1] 如:-6k 表示[0,5k]

+#UNIT:(#,∞) 如:+6k 表示(6k,∞)

⑥ 根據時間戳:

以“天”為單位:

-atime [+|-]#, (訪問時間)

#: [#,#+1) 如:3 表示[3,4)

+#: [#+1,∞] 如:+3表示[4,∞)

-#: [0,#) 如:-3 表示[0,3)

-mtime (修改時間)用法同上

-ctime(元數據改變時間)用法同上

以“分鐘”為單位: (用法同上)

-amin -mmin -cmin

技術分享

⑦ -perm 根據權限查找:

mode:精確權限匹配

+mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系+ 從centos7開始淘汰

-mode 每一類對象都必須同時擁有指定權限,與關系

0 表示不關註

技術分享

⑧ 組合條件查找:

與:-a 可省略 例:find -nouser [-a] -nogroup

或:-o

非:-not, !

德· 摩根定律:

(非 A) 或 (非 B) = 非(A 且 B) !A -o !B = !(A -a B)

(非 A) 且 (非 B) = 非(A 或 B) !A -a !B = !(A -o B)

(4)處理動作

-print 默認

-delete 直接刪除所查找到的文件,不詢問。

-ls 長列出所查找到的文件,和ls -li 相似

-fls file 將查找到的文件長列出導入到指定文件。

> file 將查詢結果導入file >> file 將查詢結果追加入file

-ok command \; 對查找到的文件當做下一命令的參數去執行(交互式)(不要忘記最後的 \; 是固定格式)

-exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式

{ }: 用於引用查找到的文件名稱自身

技術分享

(5)參數替換 xargs(“萬能”的參數傳遞)

xargs 用於產生某個命令的參數,

用途:很多命令不支持管道| 來傳遞參數,xargs 命令能傳遞所有參數 例如:find /etc/ -name "*.sh" | xargs ls -l 有些命令不能接受過多參數 ,命令執行可能會失敗,xargs可解決 例如:touch , rm 不能一次執行超過一定的參數(大概30000) 可以 echo {1..30000} | xargs touch

linux命令: 兩個查找工具 locate,find