Linux find 命令完全指南

ops/2025/3/16 15:31:08/

find 是 Linux 系统最强大的文件搜索工具,支持 嵌套遍历、条件筛选、执行动作。以下通过场景分类解析核心用法,涵盖高效搜索、文件管理及高级技巧:


一、基础搜索模式

1. 按文件名搜索(精确/模糊匹配)
 

<BASH>

find /path -name "*.log"       # 精确匹配 .log 后缀(区分大小写)
find /home -iname "*.TXT"      # 模糊匹配 .txt 后缀(忽略大小写)
find . -name "data_[0-9].csv"  # 使用通配符 [] ? * 匹配
2. 排除指定目录/文件
 

<BASH>

find /var/log -path "/var/log/nginx" -prune -o -name "*.log"  # 排除 nginx 目录
find . -not -name "*.tmp"     # 排除所有 .tmp 文件

二、根据文件类型筛选

使用 -type 筛选文件类型:

  • f: 常规文件
  • d: 目录
  • l: 符号链接
  • s: 套接字
  • p: 命名管道
 

<BASH>

find /opt -type d -name "config"        # 搜索名为 config 的目录
find ~/ -type f -empty                  # 查找当前用户下空文件
find /tmp -type l -ls                  # 列出 /tmp 下所有符号链接详细信息

三、时间维度搜索

按时间筛选(文件修改时间 -mtime / 访问时间 -atime):

  • +n: n 天前
  • -n: 最近 n 天内
  • n: 正好 n 天前
 

<BASH>

find . -mtime -7           # 查找过去 7 天内修改过的文件
find /var/log -mtime +30 -name "*.log"  # 搜索 30 天前的日志文件
按分钟级精准控制(-mmin):
 

<BASH>

find /tmp -mmin -10       # 查找过去 10 分钟内修改的文件

四、文件大小搜索

使用 -size (单位:c=字节, k=KB, M=MB, G=GB):

  • +n: 大于 n
  • -n: 小于 n
  • n : 等于 n
 

<BASH>

find / -size +100M        # 全局搜索大于 100MB 的文件(慎用根目录)
find ~/Downloads -size -5k  # 查找 Downloads 中小于 5KB 的文件

五、权限与所有权过滤

1. 按权限位搜索(数字或符号模式)
 

<BASH>

find . -perm 644           # 精确匹配权限为 644 的文件
find /etc -perm -u=r       # 用户可读的文件(权限包含 r)
find /bin -perm /u=s       # 包含 SUID 的文件
2. 按用户/组筛选
 

<BASH>

find /var -user www-data   # 属于 www-data 用户的文件
find /home -group dev      # 属于 dev 组的文件

六、组合条件与逻辑操作

  • -a (-and): 逻辑与(默认)
  • -o (-or) : 逻辑或
  • ! (-not) : 逻辑非
  • 使用 () 分组(需转义)
 

<BASH>

find /data \( -name "*.jpg" -o -name "*.png" \) -size +2M  # 查找 JPG 或 PNG 且大于 2MB
find . -type f ! -name "*.tmp"    # 排除所有 .tmp 文件

七、执行后续动作(-exec 与 xargs

1. 直接执行命令(-exec
 

<BASH>

find . -name "*.bak" -exec rm -f {} \;       # 删除所有 .bak 文件(确认无误后执行)
find /var/log -type f -mtime +30 -exec gzip {} \;  # 压缩 30 天前的日志文件
2. 结合 xargs 提高效率
 

<BASH>

find /tmp -name "core.*" -print0 | xargs -0 rm -f  # 安全处理含空格文件名
3. 删除文件(内建动作)
 

<BASH>

find . -type f -name "*.tmp" -delete        # 直接删除(-delete 必须放在最后)

八、高级搜索场景

1. 查找占用 inode 的小文件
 

<BASH>

find /path -type f -size +0c -links 1 -exec ls -i {} \;  # 非硬链接的独立文件
2. 查找重复文件(根据 MD5)
 

<BASH>

find . -type f -exec md5sum {} + | sort | uniq -w32 -dD  # 生成校验和对比重复项

九、安全排查技巧

1. 搜索可疑 SUID/SGID 文件
 

<BASH>

find / -perm /4000 -user root 2>/dev/null   # SUID 且属主为 root
find / -perm /2000 -group root 2>/dev/null  # SGID 且属组为 root
2. 查找全局可写文件
 

<BASH>

find / -xdev -type f -perm -0002 ! -perm -1000  # 忽略粘滞位目录下的文件

十、性能优化建议

  • 限定搜索深度-maxdepth 和 -mindepth
     

    <BASH>

    find /var/log -maxdepth 2 -name "*.log"   # 仅搜索两层目录
    
  • 跳过特定文件系统-xdev(不跨文件系统)
     

    <BASH>

    find / -xdev -name "lost+found"          # 仅在当前文件系统搜索
    

总结

  • 核心模式find [路径] [条件] [动作],灵活组合条件实现精准搜索。
  • 安全第一:执行删除或修改前,建议先用 -print 或 -ls 确认目标文件。
  • 效率优先:在高负载场景下,尽量减少全盘扫描,合理使用 -xargs 提升性能。

http://www.ppmy.cn/ops/166232.html

相关文章

洛谷 P1725 琪露诺 单调队列优化的线性dp

以上是题目 考虑到2e5的数据范围&#xff0c;暴力的先枚举i&#xff0c;在枚举走的步数区间j&#xff0c;是过不了的&#xff0c; 我们可以看出对于每一个i&#xff0c;只需要找出能走的i的区间的dp最大值即可&#xff0c;求区间最大值可以使用单调队列&#xff0c;时间复杂度…

江科大51单片机笔记【12】AT24C02(I2C总线)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

【Linux】UDP协议与TCP协议

目录 一、端口号 &#xff08;一&#xff09;端口号划分 &#xff08;二&#xff09;端口号相关概念 二、相关指令 &#xff08;一&#xff09;pidof &#xff08;二&#xff09;netstat 三、UDP协议 &#xff08;一&#xff09;UDP协议格式 &#xff08;二&#xff09…

vue 仿deepseek前端开发一个对话界面

后端&#xff1a;调用deepseek的api&#xff0c;所以返回数据格式和deepseek相同 {"model": "DeepSeek-R1-Distill-Qwen-1.5B", "choices": [{"index": 0, "delta": {"role": "assistant", "cont…

便捷搞定计算机名、IP 与 Mac 地址修改及网卡问题的软件

今天要给大家推荐一款超实用的小软件——“IPtool”。别看它体积小巧&#xff0c;还不到 1M&#xff0c;而且是绿色单文件版&#xff0c;无需复杂安装&#xff0c;使用起来却相当给力&#xff0c;能帮我们轻松搞定一些日常网络设置中的小麻烦。 在修改 IP 地址这件事上&#xf…

JVM 2015/3/15

定义&#xff1a;Java Virtual Machine -java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行 自动内存管理&#xff0c;垃圾回收 数组下标越界检测 多态 比较&#xff1a;jvm/jre/jdk 常见的JVM&…

Qt QML实现弹球消砖块小游戏

前言 弹球消砖块游戏想必大家都玩过&#xff0c;很简单的小游戏&#xff0c;通过移动挡板反弹下落的小球&#xff0c;然后撞击砖块将其消除。本文使用QML来简单实现这个小游戏。 效果图&#xff1a; 正文 代码目录结构如下&#xff1a; 首先是小球部分&#xff0c;逻辑比较麻…

现代密码学 | 具有数字签名功能的安全方案

1.案例背景 1.1冒用签名触发信任危机&#xff0c;360安全大脑率先截杀解除警报 2020年8月&#xff0c;360安全大脑独家发现冒用数字签名的网络攻击再度活跃&#xff0c;且继此前360安全大脑披露过的Go Daddy、Starfield Secure、赛门铁克、Verisign和DigiCert等国际知名CA证书…