在使用Linux系統時,有時會因為文件創建時間很久,而記不得全全名,只能記得模糊的幾個關鍵字時,就可以使用文件查找命令來進行快速搜索。Linux提供最常用的搜索方有兩個工具locate與find。不過在日常中還是使用find比較多,因為他具有時效性。 一、 locate locate的搜索是基於數據 ...
在使用Linux系統時,有時會因為文件創建時間很久,而記不得全全名,只能記得模糊的幾個關鍵字時,就可以使用文件查找命令來進行快速搜索。Linux提供最常用的搜索方有兩個工具locate與find。不過在日常中還是使用find比較多,因為他具有時效性。
一、 locate
locate的搜索是基於資料庫的,資料庫會在系統空閑時每天更新一次。locate是非時效性的(新文件沒有加入資料庫導致不能被查找到)。
1. 特點
可以模糊查找、查找速度快、搜索匹配的是文件的全路徑,不只是文件名
2. 手動更新資料庫
手動更新會占用系統資源,所以要在系統空閑時進行更新
[root@centos7 app]# updatedb
4. 搜索
[root@centos7 app]# locate -i aubin # -i不區分大小寫
[root@centos7 app]# locate -i aubin -n 10 # -n 只顯示前幾個
[root@centos7 app]# locate -r '\.conf$' # -r 支持正則表達式
二、 find
1. 特點
查找速度慢、精確查找、具有時效性
2. 命令格式
find <路徑> <選項> <動作>
3. 命令選項
查找深度,搜索的目錄層級
[root@centos7 app]# find -maxdepth [root@centos7 app]# find -mindepth [root@centos7 app]# find / -name aubin
指定目錄/文件名
支持使用glob*, ?, [], [^]
( [ ]為匹配單個字元的範圍)[root@centos7 app]# find / -name aubin [root@centos7 app]# find / -name a?c /sys/fs/selinux/avc [root@centos7 app]# find / -name [etc] /var/lib/yum/yumdb/t /var/lib/yum/yumdb/e /var/lib/yum/yumdb/c # -inum n 按inode號查找 -samefile filename 與filename文件相同inode號的文件 -links n 鏈接數為n的文件 -regex "PATTERN":以PATTERN匹配整個文件路徑字
查找條件
-user USERNAME #查找屬主為指定用戶(UID)的文件 -group GRPNAME #查找屬組為指定組(GID)的文件 -uid UserID #查找屬主為指定的UID號的文件 -gid GroupID #查找屬組為指定的GID號的文件 -nouser #查找沒有屬主的文件 -nogroup #查找沒有屬組的文件
-type f: 普通文件 d: 目錄文件 l: 符號鏈接文件 s:套接字文件 b: 塊設備文件 c: 字元設備文件 p: 管道文件
或與非
與:-a 或:-o 非:-not, !
或的實際應用
在使用-o 時如果後面要跟動作,要加括弧,如下麵例子,否則的話只會輸出靠近ls的搜索結果
[root@centos7 app]# find / -user li -o -user aubin -exec ls -al {} \;
[root@centos7 app]# find / \( -user li -o -user aubin \) -exec ls -al {} \;
按大小查找
-size nk #(n-1k,nk] -size 10k #(9k,10k] -size -10k #[0k,10k] -size +10k #(10k,無窮) # -size 1024k #(1023k,1024k] -size 1M #(0M,1M]
按時間戳排序
#以天為單位 -atime -mtime -ctime [root@centos7 app]# find /app/ -atime 1 [root@centos7 app]# find /app/ -atime +1 [root@centos7 app]# find /app/ -atime -1 # #以分鐘為單位 -amin -mmin -cmin