Linux 怎么查找文件,最主流通用工具是 find 命令,所有 Linux 发行版默认自带,支持按照文件名 文件大小 修改时间 文件类型 权限 用户等多种条件全盘或者指定目录递归搜索,除此之外还有 locate 和 whereis 这两个辅助查找工具,locate 依靠预建数据库搜索速度很快,但是数据库不是实时更新,刚新建的文件有可能查不到,whereis 主要用来查找命令程序源码和 man 手册,不适合普通业务文件搜索。很多新手查找文件只会写简单的 find 加文件名,但是线上服务器目录层级很深,全盘搜索会消耗大量 CPU 和 IO,所以查找的时候优先限定起始目录,不要随便从根目录 / 全盘扫描,大磁盘服务器全盘 find 会明显拖慢业务,这是运维高频踩坑点。find 是实时遍历文件系统,精准度高,缺点就是速度慢,locate 是数据库索引检索,速度快,缺点是依赖 updatedb 更新索引,两种工具适用场景不一样,不能互相替代。Linux 文件名区分大小写,默认 find 是大小写敏感,如果需要忽略大小写,需要使用对应的参数,还可以结合通配符,匹配部分文件名,同时 find 支持搜索之后直接执行动作,比如找到文件之后删除复制,这也是 find 强大的地方,不仅查找,还能对匹配结果做后续处理。
工具对比表格
| 工具 | 搜索原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| find | 实时遍历目录 | 条件丰富 实时精准 | 速度慢 消耗 IO | 精准查找 复杂条件过滤 |
| locate | 索引数据库检索 | 搜索速度极快 | 非实时 需要更新索引 | 快速查找已知文件名 |
| whereis | 定位程序相关文件 | 专门查找命令二进制 手册 | 不能查找普通文件 | 查找系统命令位置 |
详细操作步骤
第一步 打开终端,确认查找需求,确定搜索起始目录,如果知道文件大概位置,就把起始目录写在这里,减少扫描范围,比如从 /var 目录开始搜索。
第二步 基础按文件名查找,执行 find /-name "test.txt",代表从根目录递归查找名称为 test.txt 的文件,如果只想在当前目录以及子目录查找,就写 find . -name "test.txt"。
第三步 忽略大小写查找,执行 find /-iname "test.txt",不管文件名是大写还是小写都可以匹配。
第四步 通配符模糊查找,执行 find /-name ".log",查找所有后缀是 log 的日志文件。
第五步 按文件类型查找,find /-type f -name ".conf",f 代表普通文件,d 代表目录,l 代表软链接,这个参数可以区分是文件还是文件夹。
第六步 按文件大小查找,find /-type f -size +100M,查找大于 100M 的普通文件,+ 代表大于,- 代表小于。
第七步 使用 locate 快速查找,先执行 updatedb 更新索引,然后执行 locate test.txt,瞬间返回结果,适合大批量快速检索。
第八步 查找系统命令位置,执行 whereis nginx,返回 nginx 二进制文件,配置文件和 man 手册路径。
第九步 查找完成之后核对输出路径,确认目标文件,如需后续操作,可以在 find 末尾加 exec 动作,例如 find . -name ".log" -exec ls -l {} ;
进阶深度要点
find 命令里面 exec 参数可以对搜索结果执行命令,但是性能一般,大量文件的时候推荐 xargs,比如 find . -name ".tmp" | xargs rm,批量处理匹配文件。
按修改时间查找,mtime 参数,find /-mtime -7,查找 7 天之内修改过的文件,运维清理旧日志经常用到这个条件。
按属主查找,user 参数,find /-user www,查找属主是 www 用户的所有文件,排查权限问题非常实用。
权限不足的时候,find 扫描系统目录会输出大量 Permission denied 报错,可以把错误输出丢弃,写法 find /-name "xxx" 2>/dev/null,终端就不会刷大量报错信息。
locate 数据库默认每天自动更新,手动新建文件之后如果马上查找,必须手动执行 updatedb,否则找不到新文件,这个是 locate 最大局限性。
如果是桌面环境,还可以使用图形文件管理器搜索,但是远程 SSH 服务器没有图形界面,只能使用 find locate 这类命令行工具。
综合来说,复杂条件精准查找优先用 find,已知文件名追求速度用 locate,查找系统命令用 whereis,查找的时候尽量限定目录减少全盘扫描,结合类型大小时间属主组合条件,还可以搭配 exec 或者 xargs 对查找结果批量处理。
【常见问题】
问题 1 Linux 怎么查找文件 find 全盘搜索很慢怎么办
回答 1 Linux 怎么查找文件的时候,从根目录全盘 find 扫描 IO 消耗很高,Linux 怎么查找文件推荐优先指定起始目录缩小搜索范围,不要直接 / 全盘遍历,大磁盘服务器可以改用 locate 索引方式提升速度。
问题 2 Linux 怎么查找文件 locate 为什么找不到刚新建的文件
回答 2 Linux 怎么查找文件使用 locate 的时候,locate 依赖预建索引数据库,新文件还没有写入索引,Linux 怎么查找文件需要手动执行 updatedb 更新数据库之后,locate 才能检索到新建文件。
问题 3 Linux 怎么查找文件 能不能同时按文件名和大小筛选
回答 3 Linux 怎么查找文件支持多条件组合,find 可以同时写 name size type 等参数,Linux 怎么查找文件可以实现比如查找大于 100M 并且后缀是 log 的文件,属于组合条件精准检索。
问题 4 Linux 怎么查找文件 区分大小写吗
回答 4 Linux 怎么查找文件默认 find 的 name 参数是区分大小写,如果需要忽略大小写,Linux 怎么查找文件要改用 iname 参数,这样大写小写名称都可以匹配到。
【免责申明】
本文内容仅作为 Linux 命令学习参考,find 和 locate 参数在不同发行版基本兼容,但部分高级参数存在细微差异,全盘搜索会占用系统 IO,生产环境执行请评估对业务影响,批量操作前务必确认匹配结果,误操作造成数据损失由操作者自行承担,本文不承担相关责任。


