linux基礎之find檔案查詢
阿新 • • 發佈:2021-07-18
##1.find查詢概述
####1.1為什麼需要查詢
1.很多時候我們可能會忘了檔案所在的位置,此事情就需要通過find來查詢
2.有時候需要通過內容查詢到對應的檔案,此時就需要通過find來查詢
1.2為什麼是find
因為find命令可以根據不同的條件來進行查詢檔案
例:
檔名稱
檔案大小
檔案時間
屬主屬組
許可權等等
可以通過以上幾種方式查詢檔案,從而實現精準定位
####1.3find命令語法
find + 路徑(path...) + 選項(options) + 表示式(expression) + 動作(action)
##2.find查詢示例
2.1find基於名稱查詢
1.建立檔案
touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
2.查詢/etc目錄下包涵ifcfg-eth0名稱的檔案
[root@node: etc]#find /etc -name "ifcfg-eth1"
/etc/sysconfig/network-scripts/ifcfg-eth1
3.-i忽略大小寫
查詢/etc目錄下包涵ifcfg-eth名稱所有檔案
[root@node: etc]#find /etc i-name "ifcfg-eth1*"
2.2find基於大小查詢
+5 大於5M
-5 小於5M
5 等於5M
查詢大於5M的檔案 [root@node: etc]#find /etc -size +5M 小於5M則是—,等於5則不加 查詢大於5M小於7M 建立一個6M的檔案 [root@node: etc]#dd if=/dev/zero of=/etc/big count=6M bs=1 查詢大於5M小於7M [root@node: etc]#find /etc -size +5M -a -size -7M | xargs ls -lh -rw-r--r--. 1 root root 6.0M Jul 17 15:04 /etc/big
####2.3find基於型別查詢
檔案
[root@node: ~]#find /dev -type f
目錄
[root@node: ~]#find /dev -type d
l 連結
[root@node: ~]#find /dev -type l
b塊裝置
[root@node: ~]#find /dev -type b
c字元裝置
[root@node: ~]#find /dev -type c
s套接字
[root@node: ~]#find /dev -type s
p管道檔案
[root@node: ~]#find /dev -type p
####2.4find基於時間查詢
1.建立測試檔案(後期shell會講)
[root@node: ~]#for i in {01..10};do date -s 201904$i && touch file-$i;done
查詢7天以前的檔案(不會列印當天的檔案) 7天以前的查找出來,然後刪除 == 保留了最近7天的資料
[root@node: ~]#for i in {01..10};do date -s 201904$i && touch file-$i;done
3.查詢最近7天的檔案,不建議使用(會列印當天的檔案)將最近7天的資料給列出來,如果刪除,會將當天的資料刪除
[root@node: ~]#find ./ -iname "file-*" -mtime -7
查詢第7天的檔案(不會列印當天的檔案)
[root@node: ~]#find ./ -iname "file-*" -mtime 7
查詢最近122分鐘發生變化的檔案
[root@node: ~]#find ./ -type f -mmin -122
查詢多少分鐘內發生過修改的檔案
[root@node: ~]#find ./ -type f -mmin -30
查詢系統有哪些命令在最近多長時間內,發生過變化
[root@node: ~]#find /bin/ /sbin/ -type f -mmin -5
面試題:查詢/var/log下所有以.log結尾的檔案,並保留最近7天的log檔案
[root@node: log]#find /var/log -type f -name "*.log" -a -mtime +7 -delete
[root@node: log]#find /var/log -type f -name "*.log" -a -mtime +7 | xargs rm -f
####2.5find基於使用者查詢
-user 屬主
-group 屬組
-nouser 不屬主
-nogroup 不屬組
例:
查詢/home目錄下屬主是jake的檔案
[root@node: log]#find /home -user jake
查詢屬組是admin
[root@node: log]#find /home -group admin
查詢屬主是jake,屬組是admin
[root@node: log]#find /home -user jake -group admin
查詢屬主是jake,並且屬組是admin
[root@node: log]#find /home -user jake -a -group admin
查詢沒有屬主
[root@node: log]#find /home -nouser
查詢沒有屬組
[root@node: log]#find /home -nogroup
查詢沒有屬主或屬組
[root@node: log]#find /home -nouser -o -nogroup
####2.6find基於許可權查詢
-perm [/|-]MODE
MODE:精確許可權匹配 如644
-MODE: 每一類物件都必須同時擁有指定的許可權;(並且的意思)
/MODE:任何一類(UGO)只要有一位匹配即可;(或者的關係)
例: 精確
[root@node: ~]#find /root -type f -perm 644 -ls
-包含: (u涵蓋6,並且g涵蓋4,並且o涵蓋4)
[root@node: ~]#find /root -type f -perm -644 -ls
/或者(u為6,或者g為4,或者o為0)
[root@node: ~]#find /root -type f -perm /640 -ls
特殊許可權(最低許可權是4000 4755也滿足需求)
[root@node: ~]#find /usr/bin/ /usr/sbin/ -type f -perm -4000 -ls
root@node: ~]#find /usr/bin/ /usr/sbin/ -type f -perm -2000 -ls
[root@node: ~]#find /usr/bin/ /usr/sbin/ -type f -perm -1000 -ls
####2.7find邏輯運算子
-a 與(並且)
-o 或(或者)
-not|! 非(取反)
例:查詢當前目錄下,屬主不是root的所有檔案
[root@node: ~]#find . -not -user root
查詢當前目錄下,屬主屬於hdfs,並且大小大於1k的檔案
[root@node: ~]#find . -type f -user hdfs -a -size +1k
查詢當前目錄下的屬主為root或者以xml結尾的普通檔案
[root@node: ~]#find -type f -a -user root -o -name "*xml"
##3. find動作處理
查詢到一個檔案後,需要對檔案進行如何處理find的預設動作是-print
動作 含義
-print 列印查詢到的內容(預設)
-ls 以長格式顯示的方式列印查詢到的內容
-delete 刪除查詢到的檔案(僅能刪除空目錄)
-ok 後面跟自定義shell命令(去提示是否操作)
-exec 後面跟自定義shell命令(標準寫法-exec ;)
####3.1find結合exec
使用-exec實現檔案拷貝和刪除
[root@node: ~]#find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \;
[root@node: ~]# find /etc -name "ifcfg*" -exec rm -f {} \;
[root@node: ~]#find /etc -name "ifcfg*" -exec mv -rvf {} /tmp \;
####3.2find結合xargs
xargs將前者命令查詢到的檔案作為一個整體傳遞後者命令的輸出,所以其操作的效能極高
|xargs rm -f 1 2 3 4 5 6 7 8 9 10 11 100000
exec是將檔案一個一個的處理,所以處理效能極低
####3.3find結合grep
當忘記重要配置1檔案儲存路徑時,可以通過搜尋關鍵字獲取檔案其路徑
[root@node: ~]#find /code -type f |xargs grep -R "MySQL_PASSWORD"
[root@node: ~]#find /etc/ -type f | /etc/pass: oldxu.com