Linux 查找文件主要分四大核心工具:find、locate、which、whereis,定位完全不一样,find 是实时遍历磁盘搜索,功能最强,支持按名称、大小、时间、权限、类型多条件组合查找;locate 是读取预建数据库,搜索速度极快,但是数据库不是实时更新;which 专门查找可执行命令的路径;whereis 查找命令对应的二进制、源码、man 手册文件。运维最常用是 find,适合精准复杂条件检索,locate 适合快速模糊搜文件,which/whereis 专门针对命令程序,学习重点掌握语法、参数、使用场景、性能差异,还有 find 后续配合 - exec 执行处理动作。
一、find 实时查找(最核心)
基础语法
find 搜索路径 匹配条件 [动作]
原理:从指定目录递归遍历磁盘,实时扫描,精准,缺点是大磁盘搜索速度偏慢
常用匹配条件
| 参数 | 功能说明 |
|---|---|
| -name | 按文件名查找,区分大小写,支持通配符 |
| -iname | 按文件名查找,不区分大小写 |
| -type | 按文件类型 f 普通文件 d 目录 l 软链接 |
| -size | 按文件大小查找 + 大于 - 小于 |
| -mtime | 按修改时间,单位天,+N N 天前 |
| -ctime | 按 inode 变更时间 |
| -atime | 按访问时间 |
| -user | 按属主查找 |
| -perm | 按文件权限查找 |
常用动作
-print 默认输出结果
-exec 找到之后执行后续命令
-delete 找到之后直接删除
经典示例
按文件名查找
find /-name "nginx.conf"
不区分大小写
find /etc -iname ".log"
查找目录类型
find /data -type d -name "backup"
查找大于 100M 文件
find /-type f -size +100M
查找 7 天前修改的日志文件
find /var/log -type f -mtime +7
查找之后执行删除
find /tmp -name ".tmp" -type f -delete
查找之后执行命令
find /log -name ".log" -exec gzip {} ;
二、locate 数据库快速查找
基础语法
locate 文件名关键词
原理:读取系统预建的文件索引数据库,不实时扫描磁盘,查询速度非常快
更新数据库命令
updatedb
特点
✅ 速度快,全盘模糊搜索
❌ 新建文件如果没有 updatedb,locate 搜不到
示例
locate nginx.conf
三、which 查找可执行命令路径
基础语法
which 命令名
作用:只在 PATH 环境变量里面搜索可执行程序,只返回可执行文件路径
示例
which python
which netstat
用途:确认命令到底调用哪一个程序,排查别名、多版本程序冲突
四、whereis 查找命令全套相关文件
基础语法
whereis 命令名
作用:同时查找该命令对应的二进制程序、源码文件、man 帮助手册
示例
whereis vim
和 which 区别:which 只找可执行文件,whereis 范围更广
四、四大工具对比表
| 命令 | 查找原理 | 查找对象 | 优点 | 缺点 |
|---|---|---|---|---|
| find | 实时递归遍历磁盘 | 任意文件 / 目录 | 条件丰富,精准 | 大磁盘慢 |
| locate | 读取索引数据库 | 任意文件 | 速度极快 | 非实时,需要 updatedb |
| which | 检索 PATH 环境变量 | 可执行命令 | 轻量快速 | 只查可执行程序 |
| whereis | 检索标准系统目录 | 二进制 + 源码 + man 手册 | 信息全面 | 不支持自定义复杂条件 |
五、常见踩坑排错清单
1 find 全盘搜索很慢,属于正常,尽量缩小起始搜索目录,不要直接从 / 全盘扫描
2 locate 找不到刚新建文件,执行 updatedb 更新索引
3 find -name 通配符记得加双引号,防止 shell 提前解析通配符
4 which 找不到命令,代表该命令不在 PATH 环境变量,或者没有安装
5 find -exec 注意结尾 {} ; 语法格式,很容易写错
【常见问题】
问题 1 linux 查找文件最强大的命令是哪个
回答 1 linux 查找文件最强大是 find 命令,实时遍历磁盘,支持名称、大小、时间、权限、类型多条件组合,还可以对找到文件执行后续处理动作。
问题 2 linux 查找文件 locate 为什么搜不到新文件
回答 1 linux 查找文件 locate 依靠预建数据库,新建文件没有更新索引,执行 updatedb 更新数据库之后,locate 才可以搜索到。
问题 3 linux 查找文件 which 和 whereis 区别是什么
回答 1 linux 查找文件 which 只查找 PATH 里面的可执行程序路径,whereis 除了二进制程序,还会查找对应的源码文件和 man 手册。
问题 4 linux 查找文件 find 和 locate 哪个更快
回答 1 linux 查找文件 locate 读取数据库,速度远快于 find 实时遍历磁盘,但是 locate 不是实时数据,精准复杂条件检索还是要用 find。
【免责申明】
本文 linux 查找文件相关命令基于 GNU findutils 标准版本编写,不同发行版参数细节存在差异,执行 man find /man locate 查看本机手册,find 执行 - delete、-exec 高危操作前建议先预览结果,内容仅用于 linux 运维学习参考。


