结论先行 locate 是 Linux 下基于预建数据库进行文件路径检索的命令,优点是查询速度极快,不需要遍历全盘目录,和 find 实时全盘扫描不一样,locate 依靠 updatedb 生成的索引数据库来匹配文件名,缺点是数据库不是实时更新,新建或者删除的文件,在数据库更新之前 locate 是查不到的,这个是最核心特点,日常快速找已知文件名的文件非常好用,适合运维和开发快速定位文件位置。
一 基础介绍
所属软件包 mlocate 或者 plocate
数据库默认路径
CentOS RHEL /var/lib/mlocate/mlocate.db
Debian Ubuntu /var/lib/plocate/plocate.db
后台定时任务一般每天自动执行 updatedb 更新索引,也可以手动执行 updatedb 立刻刷新数据库
二 基础语法
locate [参数] 关键词
核心原理 对数据库里面保存的全部文件路径做子串匹配,只要路径里面包含关键词就会输出
三 常用参数清单
-i 忽略大小写匹配
-c 只输出匹配结果总条数,不打印完整路径
-r 使用正则表达式匹配
-n 限制输出结果数量
-e 只显示当前真实存在的文件,过滤数据库里面已经被删除的旧记录
-b 只匹配文件名 basename,不匹配完整路径
-q 静默模式,不输出报错信息
四 典型使用示例
示例 1 基础查找
locate nginx.conf
示例 2 忽略大小写
locate -i test
示例 3 只统计数量
locate -c passwd
示例 4 限制输出前 20 条
locate -n 20 log
示例 5 正则匹配
locate -r '.sh$'
查找所有以 .sh 结尾的脚本文件
五 数据库更新命令 updatedb
手动更新索引
sudo updatedb
执行之后,新增文件马上就可以被 locate 查询到
补充说明 updatedb 执行会占用一定磁盘 IO,大服务器建议业务低峰执行
六 locate 和 find 对比表格
| 项目 | locate | find |
|---|---|---|
| 检索方式 | 读取预建数据库 | 实时遍历磁盘目录 |
| 速度 | 非常快 | 大磁盘速度慢 |
| 实时性 | 非实时,依赖数据库更新 | 实时准确 |
| 功能 | 只按文件名匹配 | 支持大小 权限 修改时间等复杂条件 |
七 高频踩坑要点
1 新建文件 locate 查不到,第一反应执行 sudo updatedb 更新数据库
2 已经删除的旧文件,locate 依旧会显示旧路径,使用 -e 参数过滤失效记录
3 locate 默认是子串匹配,不是精确文件名匹配,关键词短的时候会输出大量无关结果
4 权限问题,普通用户 updatedb 一般需要 sudo,部分敏感目录索引会按照配置排除
5 如果提示 command not found,代表没有安装 mlocate plocate
Ubuntu Debian 安装 sudo apt install plocate
CentOS RHEL sudo dnf install mlocate
常见问题
问题 1 linuxlocate 命令为什么新创建的文件搜不到
回答 1 linuxlocate 命令依赖索引数据库,数据库默认每日自动更新,新建文件还没写入索引,执行 sudo updatedb 手动刷新数据库之后就可以检索到。
问题 2 linuxlocate 命令和 find 哪个更准确
回答 1 linuxlocate 命令是数据库检索,存在延迟,find 是实时扫描磁盘,对最新变动文件 find 结果更准确,locate 优势是查询速度更快。
问题 3 linuxlocate 命令是精确匹配吗
回答 1 linuxlocate 命令默认是子串匹配,只要文件路径包含关键词就会输出,不是严格精确文件名匹配,想要正则匹配可以加 -r 参数。
问题 4 linuxlocate 命令提示 command not found 怎么处理
回答 1 linuxlocate 命令提示找不到,是系统没有安装软件包,Debian 系安装 plocate,RHEL 系安装 mlocate,安装完成就可以正常调用。
免责申明
本内容为 Linux 命令学习参考,不同发行版软件包名称 数据库路径存在细微差别,详细参数以 man locate 官方手册为准,本教程仅作为学习参考,不构成官方技术文档。


