首页/系统/Linux 运维命令速查/locate 秒级查找文件
文件与目录76 条

locate 秒级查找文件

基于数据库索引的极速查找,远快于 find;索引不实时,找新文件前先手动 updatedb。

Linux 运维命令速查系统更新于 2026-10-13

locate 是什么

locate 是 mlocate / plocate 套件里的文件名查找工具。它不遍历目录树,而是直接查询 updatedb 预先建好的路径索引数据库(mlocate 为 /var/lib/mlocate/mlocate.db,plocate 为 /var/lib/plocate/plocate.db),所以磁盘上哪怕有上千万个文件,也是毫秒级返回,速度几乎与目录规模无关。代价是索引不实时:数据库通常由 cron 或 systemd timer 每天重建一次,当天新建、改名或删除的文件可能查不到、也可能查到已经不存在。它与 find 是互补关系:按名字粗查用 locate,按大小、时间、属主等条件精确定位用 find。

基本信息

适用平台GNU/Linux:mlocate、plocate(macOS 无内置)
语法locate [选项] 关键词
索引库/var/lib/mlocate/mlocate.db;plocate 用 /var/lib/plocate/plocate.db
索引刷新cron 或 systemd timer 每日一次,手动执行 sudo updatedb
权限普通用户可查询;执行 updatedb 需要 root
匹配方式路径子串匹配,支持 * 与 ?

典型使用场景

  • 在整盘范围内确认某个配置或程序落在哪:locate nginx.conf 直接列出全部同名路径,比从根目录 find 快几个数量级。
  • 核查软件包安装结果,看看升级后是否残留旧路径或漏装新文件。
  • 定位动态库与头文件位置,解决编译时找不到 so 或 .h 的问题。
  • 在几百 GB 的代码盘、数据盘上按关键词粗筛,先把候选范围缩小,再交给 find 精查。
  • 索引重建后做一次全盘文件名盘点,核对迁移前后文件是否有遗漏。

常用写法

常用写法
locate nginx.conf                        # 全盘查找同名文件
locate -i README.md                      # 忽略大小写
locate -b '\nginx.conf'                 # 只匹配文件基名,不匹配路径中段
locate -c '*.log'                        # 只输出匹配条数,不打印路径
locate -e /data/big.iso                  # 只保留索引里且当前仍存在的文件
locate -l 5 '*.conf'                     # 最多输出 5 条,避免刷屏
sudo updatedb                            # 手动重建索引(大盘可能耗时数分钟)
sudo updatedb --prunepaths=/mnt/backup   # 重建时跳过指定目录

关键选项对照

选项作用使用要点
-i忽略大小写查中文或大小写混排的路径时基本都要加
-b只匹配文件基名不加时 conf 会命中路径中段,噪音很大
-c只输出匹配条数做数量盘点时用,等同于结果计数
-e只列当前真实存在的文件索引滞后时避免拿到已删除的路径
-l N限制输出条数大结果集先采样,方便人看
-r按正则匹配plocate 支持,mlocate 不认,跨发行版脚本要留意
索引与磁盘不一致是常态:locate 只回答「索引里有没有」,不保证文件现在还在。脚本里不要直接拿它的输出去读文件,先 test -e 校验,或直接加 -e 参数过滤掉已消失的路径。
mlocate 与 plocate 实现不同:plocate 用压缩索引,占用更小、更新更快,Debian 12 与 Ubuntu 22.04 起默认安装 plocate,但命令名仍是 locate,基本用法一致;涉及 -r 正则等选项时以本机 man 1 locate 为准。

易错点

  • 索引不实时:刚创建或刚删除的文件查不到、查到脏路径,根因是没跑 updatedb。实时性要求高就改用 find,或先 sudo updatedb;大盘重建可能耗时数分钟,别放在业务高峰。
  • locate 会按调用者权限过滤结果:普通用户查不到系统目录里的文件,不代表文件不存在。排查「明明在却查不到」时用 sudo locate 对比一次。
  • 关键词是路径子串匹配而不是文件名匹配:locate conf 会命中 /etc/conf.d 这类路径中段。只想匹配文件名用 -b 并配合边界写法,否则结果噪音成倍增加。
  • 还没建库就直接查会报 can not stat 与 No such file or directory:装完 mlocate / plocate 却忘了跑 updatedb 就是这个现象,先 sudo updatedb 再查。
  • 把网络盘、备份盘纳入索引会拖慢 updatedb 并放大索引体积,长期每日重建可能超时失败;用 --prunepaths 或 PRUNEPATHS 排除这类目录。

数据来源与参考

  • man 1 locate(mlocate 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌