locate命令,find命令:
文件查找:
在文件系統上查找符合條件的文件;
實現工具:locate,find 命令
locate命令:
依賴於事先構建好的索引庫;
系統自動實現(週期性任務);
手動更新數據庫(updatedb);
工作特性:
查找速度快;
模糊查找;
非實時查找;
locate:
-b:只匹配路徑中的基名
-c:統計出共有多少個符合條件的文件;
-r:BRE
注意:索引構建過程需要遍歷整個根文件系統,極消耗資源;
實例:
[root@centos7 ~]# locate -c passwd
151
[root@centos7 ~]# locate -cb passwd
147
find命令:
實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找;
工作特性:
查找速度略慢;
精確查找;
實時查找;
用法:
find [OPTIONS] [查找起始路徑][查找條件][處理動作]
查找起始路徑:指定具體搜索目標起始路徑;默認爲當前目錄;
查找條件:指定的查找標準,可以根據文件名,大小,類型,從屬關係,權限等等標準進行;默認爲找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認爲輸出至標準輸出;
查找條件:
表達式:選項和測試
測試:
根據文件名查找:
-name "pattern"
-iname "pattern"
實例:
[root@centos7 ~]# find /etc/ -name “passwd”
/etc/passwd
/etc/pam.d/passwd
[root@centos7 ~]# find /etc/ -name passwd*
/etc/passwd
/etc/pam.d/passwd
/etc/passwd-
支持globbing風格的通配符:
匹配模式:元字符
* :匹配任意長度的任意字符
Pa* , *pa* , *pa , *p*a*
? :匹配任意單個字符
Pa?
[] :匹配指定範圍內的任意單個字符
有幾種特殊格式:
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]] :所有大寫字母
[[:lower:]]:所有小寫字母
[[:alpha:]]:所有字母
[[:digit:]]:所有數字
[[:alnum:]]:所有數字和字母
[[:space:]]:所有空白字符
[[:punct:]]:所有標點符號
[^]: 匹配指定範圍外的任意單個字符
[^[:upper:]]
[^0-9]
[^[:alnum:]]
-regex pattern:基於正則表達式模式查找文件,匹配是整個路徑,而非其名;
根據文件從屬關係查找:
-user USERNAME:查找屬主指定用戶的所有文件;
-group GRPNAME:查找屬組指定組的所有文件;
實例:
[root@centos7 ~]# find /home/ -user centos
/home/centos
/home/centos/.mozilla
/home/centos/.mozilla/extensions
/home/centos/.mozilla/plugins
/home/centos/.bash_logout
/home/centos/.bash_profile
/home/centos/.bashrc
/home/centos/.cache
/home/centos/.cache/gdm
實例:
查找/tmp目錄下所有屬主爲moosefs的文件;
查找/tmp目錄下所有屬組爲moosefs的文件;
-uid UID: 查找屬主指定的UID的所有文件;
-gid GID:查找屬組指定的GID的所有文件;
根據uid進行查找
-nouser:查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
查找沒有屬主的文件 ,沒有屬組的文件;
根據文件的類型查找:
-type TYPE:
f:普通文件
d:目錄文件
l:符號鏈接文件
b:塊設備文件
c:字符設備文件
p:管道文件
s:套接字文件
實例:
[root@centos7 ~]# find /etc/ -type l -ls
組合測試:
與:-a :
或:-o :
非:-not, !
運算數:真 或 假
與:只有兩個都爲真,結果才爲真,否則爲假;
1&&1=1
1&&0=0
0&&1=0
0&&0=0
或:只要一個爲真,結果才爲真,否則爲假;
1||1=1
1||0=1
0||1=1
0||0=0
非:非真即假
!1=0
!0=1
根據文件的大小查找:
find . -type f -size 文件大小單元
文件大小單元:
b —— 塊(512字節)
c —— 字節
w —— 字(2字節)
k —— 千字節
M —— 兆字節
G —— 吉字節
實例:
搜索大於10KB的文件
find . -type f -size +10k
搜索小於10KB的文件
find . -type f -size -10k
搜索等於10KB的文件
find . -type f -size 10k
刪除匹配文件
刪除當前目錄下所有.txt文件
find . -type f -name "*.txt" -delete
根據文件時間戳進行查找:
find . -type f 時間戳
UNIX/Linux文件系統每個文件都有三種時間戳:
訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。
修改時間(-mtime/天,-mmin/分鐘):文件最後一次修改時間。
變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最後一次修改時間。
搜索最近七天內被訪問過的所有文件
以“分鐘”爲單位:
-amin
-mmin
-cmin
實例:
搜索最近七天內被訪問過的所有文件
find . -type f -atime -7
搜索恰好在七天前被訪問過的所有文件
find . -type f -atime 7
搜索超過七天內被訪問過的所有文件
find . -type f -atime +7
搜索訪問時間超過10分鐘的所有文件
find . -type f -amin +10
找出比file.log修改時間更長的所有文件
find . -type f -newer file.log
根據權限查找:
-perm
-perm [/|-]mode
mode:精確權限匹配;
/mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;9位權限之間存在“或”關係;
-mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足。9位權限之間存在“與”關係;
實例:
處理動作:
-print:輸出至標準輸出;默認的動作;
-ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;
-delete:刪除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;
-exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;
注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令;
但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題;
find | xargs COMMAND
xargs命令用法:
實例:
https://www.cnblogs.com/scrit/p/5854197.html
https://blog.csdn.net/u013961718/article/details/51449446