Linux下查找文件的命令有兩個;locate 和 find
首先說下locate,locate這個命令是對其生成的數據庫進行遍歷(生成數據庫的命令:updatedb),這一特性決定了用locate查找文件速度很快,但是locate命令只能對文件進行模糊匹配,在精確度上來說差了點,簡單介紹下它的兩個選項:
#locate
-i //查找文件的時候不區分大小寫 比如:locate –i passwd
-n //只顯示查找結果的前N行 比如:locate -n 5 passwd
Linux中find常見用法示例:
一、根據文件名查找
# -name //根據文件名查找(精確查找)
# -name "*.txt" //根據關鍵字查找
# -iname //根據文件名查找,但是不區分大小寫
# -name a* 在當前目錄下查找以a開始的文件
二、?表示 通配任意的單個字符
# -user username #按文件屬主來查找
# -group groupname #按組來查找
三、根據文件類型查找
-type -name
f // 普通文件
d //目錄文件
l //鏈接文件
b //塊設備文件
c //字符設備文件
p //管道文件
s //socket文件
eg.find .-type d|sort //查找當前所有目錄並排序
四、根據文件權限查找文件
-perm
#find /tmp -perm 755 //查找在/tmp目錄下權限是755的文件
#find /tmp -perm +222 //表示只要有一類用戶(屬主,屬組,其他)的 匹配寫權限就行
#find /tmp -perm -222 //表示必須所有類別用戶都滿足有寫權限
五、按文件大小查找
find / -size 250c (查找1,50字節大小的文件,c表示字節)
find / -size +2500c (查找大於1,500字節大小的文件,+表示大於)
find / -size +2500c (查找小於1,500字節大小的文件,-表示小於)
六、按時間查找
modification time(mtime)
當該文件的“內容數據”更改時,就會更新這個時間。 內容數據指的是文件的內容,而不是文件的屬性或權限。
status time(ctime)
當該文件的“狀態”(status)改變時,就會更新這個時間。舉例來說,像是權限與屬性被更改了,都會更新這個時間。
access time(atime)
當“該文件的內容被取用”時,就會更新這個讀取時間(access)。舉例來說,我們使用cat去讀取/etc/man.config,就會更新該文件的atime了。
訪問一個目錄其atime改變,mtime ,ctime不變;
修改一個目錄:在一個目錄下touch一個文件,mtime與ctime會改變,atime不一定會變;
# find / -mtime -n +n 文件數據的最後修改時間(n爲天數) (-n爲n天內,+n爲n天前)
# find / -atime -n +n文件數據的最後存取時間(n爲天數)
# find / -ctime -n +n 文件數據的最後更改時間(n爲天數)
# find / -mmin -n +n文件數據的最後修改時間(n爲分鐘)(-n爲n分鐘內,+n爲n分鐘前)
# find / -amin -n +n文件數據的最後存取時間(n爲分鐘)
# find / -cmin -n +n 文件數據的最後更改時間(n爲分鐘)
例如:
# find /Bit -mtime -2 在/Bit下查最近兩天內改動過的文件
# find /Bit -atime -1 查/Bit下1天之內被存取過的文件
# find /Bit -mmin -500 在/Bit下查最近500分鐘內改動過的文件
ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime
七、使用mindepth和maxdepth限定搜索指定目錄的深度
在root目錄及其子目錄下查找test文件。
在root目錄下及其最大2層深度的子目錄中查找test文件.
在root目錄下及其最大3層深度的子目錄中查找test文件.
在3-5層中優先查找文件內容名爲test的文件
八、其他例子
1、無錯誤查找:
# find / -name access_log 2 >/dev/null
2、邏輯
-and 條件與 -or 條件或
3、查找字符串
# find . -name '*.html' -exec grep 'mailto:'{}
4、其它:
# find / -empty 空白文件、空白文件夾、沒有子目錄的文件夾
# find / -false 查找系統中總是錯誤的文件
# find / -fstype type 找存在於指定文件系統的文件,如type爲ext2
# find / -gid n 組id爲n的文件
# find -name april* fprint file
在當前目錄下查找以april開始的文件,並把結果輸出到file中
# find -name ap* -o -name may* 查找以ap或may開頭的文件
# find /mnt -name tom.txt -ftype vfat
在/mnt下查找名稱爲tom.txt且文件系統類型爲vfat的文件
# find /mnt -name t.txt ! -ftype vfat
在/mnt下查找名稱爲tom.txt且文件系統類型不爲vfat的文件
# find /tmp -name wa* -type l
在/tmp下查找名爲wa開頭且類型爲符號鏈接的文件
# find /home -mtime -2 在/home下查最近兩天內改動過的文件
# find /home -newer tmp.txt 在/home下查更新時間比tmp.txt近的文件或目錄
# find . -size +3000k -exec ls -ld {} ;
# find *.c -exec cp '{}' /tmp ';'