首页 > 精选问答 >

问 linux 查找文件 find locate which whereis 详解

2026-11-08 22:33:00
最佳答案

答

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 运维学习参考。