Linux find 命令完全指南及核心用法
find
是 Linux 系統(tǒng)最強(qiáng)大的文件搜索工具,支持 嵌套遍歷、條件篩選、執(zhí)行動(dòng)作。以下通過場(chǎng)景分類解析核心用法,涵蓋高效搜索、文件管理及高級(jí)技巧:
一、基礎(chǔ)搜索模式
1. 按文件名搜索(精確/模糊匹配)
<BASH>
find /path -name "*.log" # 精確匹配 .log 后綴(區(qū)分大小寫) find /home -iname "*.TXT" # 模糊匹配 .txt 后綴(忽略大小寫) find . -name "data_[0-9].csv" # 使用通配符 [] ? * 匹配
2. 排除指定目錄/文件
find /var/log -path "/var/log/nginx" -prune -o -name "*.log" # 排除 nginx 目錄 find . -not -name "*.tmp" # 排除所有 .tmp 文件
二、根據(jù)文件類型篩選
使用 -type
篩選文件類型:
f
: 常規(guī)文件d
: 目錄l
: 符號(hào)鏈接s
: 套接字p
: 命名管道
find /opt -type d -name "config" # 搜索名為 config 的目錄 find ~/ -type f -empty # 查找當(dāng)前用戶下空文件 find /tmp -type l -ls # 列出 /tmp 下所有符號(hào)鏈接詳細(xì)信息
三、時(shí)間維度搜索
按時(shí)間篩選(文件修改時(shí)間 -mtime
/ 訪問時(shí)間 -atime
):
+n
: n 天前-n
: 最近 n 天內(nèi)n
: 正好 n 天前
find . -mtime -7 # 查找過去 7 天內(nèi)修改過的文件 find /var/log -mtime +30 -name "*.log" # 搜索 30 天前的日志文件
按分鐘級(jí)精準(zhǔn)控制(-mmin
):
find /tmp -mmin -10 # 查找過去 10 分鐘內(nèi)修改的文件
四、文件大小搜索
使用 -size
(單位:c
=字節(jié), k
=KB, M
=MB, G
=GB):
+n
: 大于 n-n
: 小于 nn
: 等于 n
find / -size +100M # 全局搜索大于 100MB 的文件(慎用根目錄) find ~/Downloads -size -5k # 查找 Downloads 中小于 5KB 的文件
五、權(quán)限與所有權(quán)過濾
1. 按權(quán)限位搜索(數(shù)字或符號(hào)模式)
find . -perm 644 # 精確匹配權(quán)限為 644 的文件 find /etc -perm -u=r # 用戶可讀的文件(權(quán)限包含 r) find /bin -perm /u=s # 包含 SUID 的文件
2. 按用戶/組篩選
find /var -user www-data # 屬于 www-data 用戶的文件 find /home -group dev # 屬于 dev 組的文件
六、組合條件與邏輯操作
-a
(-and
): 邏輯與(默認(rèn))-o
(-or
) : 邏輯或!
(-not
) : 邏輯非- 使用
()
分組(需轉(zhuǎn)義)
find /data \( -name "*.jpg" -o -name "*.png" \) -size +2M # 查找 JPG 或 PNG 且大于 2MB find . -type f ! -name "*.tmp" # 排除所有 .tmp 文件
七、執(zhí)行后續(xù)動(dòng)作(-exec 與 xargs)
1. 直接執(zhí)行命令(-exec
)
find . -name "*.bak" -exec rm -f {} \; # 刪除所有 .bak 文件(確認(rèn)無誤后執(zhí)行) find /var/log -type f -mtime +30 -exec gzip {} \; # 壓縮 30 天前的日志文件
2. 結(jié)合 xargs
提高效率
find /tmp -name "core.*" -print0 | xargs -0 rm -f # 安全處理含空格文件名
3. 刪除文件(內(nèi)建動(dòng)作)
find . -type f -name "*.tmp" -delete # 直接刪除(-delete 必須放在最后)
八、高級(jí)搜索場(chǎng)景
1. 查找占用 inode 的小文件
find /path -type f -size +0c -links 1 -exec ls -i {} \; # 非硬鏈接的獨(dú)立文件
2. 查找重復(fù)文件(根據(jù) MD5)
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD # 生成校驗(yàn)和對(duì)比重復(fù)項(xiàng)
九、安全排查技巧
1. 搜索可疑 SUID/SGID 文件
find / -perm /4000 -user root 2>/dev/null # SUID 且屬主為 root find / -perm /2000 -group root 2>/dev/null # SGID 且屬組為 root
2. 查找全局可寫文件
find / -xdev -type f -perm -0002 ! -perm -1000 # 忽略粘滯位目錄下的文件
十、性能優(yōu)化建議
限定搜索深度:-maxdepth
和 -mindepth
find /var/log -maxdepth 2 -name "*.log" # 僅搜索兩層目錄
跳過特定文件系統(tǒng):-xdev
(不跨文件系統(tǒng))
find / -xdev -name "lost+found" # 僅在當(dāng)前文件系統(tǒng)搜索
總結(jié)
- 核心模式:
find [路徑] [條件] [動(dòng)作]
,靈活組合條件實(shí)現(xiàn)精準(zhǔn)搜索。 - 安全第一:執(zhí)行刪除或修改前,建議先用
-print
或-ls
確認(rèn)目標(biāo)文件。 - 效率優(yōu)先:在高負(fù)載場(chǎng)景下,盡量減少全盤掃描,合理使用
-xargs
提升性能。
到此這篇關(guān)于Linux find 命令完全指南的文章就介紹到這了,更多相關(guān)Linux find 命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux whatis與whatis database 使用及查詢方法(man使用實(shí)例)
在學(xué)習(xí)man命令時(shí)候,估計(jì)很多朋友都發(fā)現(xiàn)有man –f ,man –k 參數(shù),可以查出很多數(shù)據(jù)。這些有的與man手冊(cè)頁相同,有些不是屬于手冊(cè)頁的。它們數(shù)據(jù)怎么收集來的,并且whatis是怎么樣工作的2015-10-10unix編程創(chuàng)建前綴固定的臨時(shí)文件代碼分享
unix編程創(chuàng)建一個(gè)前綴固定的臨時(shí)文件,實(shí)現(xiàn)功能:創(chuàng)建一個(gè)臨時(shí)文件,并返回其文件描述符2013-12-12用于檢測(cè)進(jìn)程的shell腳本代碼小結(jié)
本文介紹一段shell腳本,它可以檢測(cè)某進(jìn)程或某服務(wù)是否正在運(yùn)行,然后以郵件通知。有需要的朋友參考下2013-11-11Centos下查看網(wǎng)卡的實(shí)時(shí)流量命令
本文介紹了linux下查看網(wǎng)卡流量的六種方法,linux系統(tǒng)中使用nload、iftop、iostat等工具查看網(wǎng)卡流量,這里我們先來詳細(xì)講解下 iptraf 方法,需要的朋友參考下。2015-05-05使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號(hào)其他列不變
本文通過實(shí)例代碼給大家講解了使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號(hào)其他列不變的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12Linux 使用shell腳本處理字符串的實(shí)現(xiàn)
這篇文章主要介紹了Linux 使用shell腳本處理字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12