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 为准。