locate 快速检索依赖 /var/lib/mlocate/mlocate.db 数据库,需通过 sudo updatedb 手动更新以反映最新文件;支持 -b、-i、-r、-n、-e 等参数提升匹配精度,并可定制索引路径优化效率。

locate 命令本身不扫描磁盘,它查的是 /var/lib/mlocate/mlocate.db 这个静态索引数据库。所以“快速检索全盘文件”的关键不在 locate 本身,而在于让这个数据库及时、准确地反映当前文件系统状态——这靠 updatedb 完成。
先确认 mlocate 是否已安装并运行 updatedb
多数主流发行版(如 Ubuntu 24.04+、Fedora 39+)默认预装 mlocate 或 plocate。若执行 locate 报 command not found,需手动安装:
- Debian/Ubuntu:sudo apt update && sudo apt install mlocate
- RHEL/CentOS/Fedora:sudo dnf install mlocate(或 plocate,性能更优)
安装后首次使用前必须初始化数据库:sudo updatedb。该命令需 root 权限,普通用户无法写入系统数据库路径。
解决“找不到刚创建的文件”问题
这是 locate 最常见的困惑点:你刚用 touch /tmp/newfile.log 创建了文件,但 locate newfile 无结果。原因很直接——数据库还没收录它。
- 系统默认通过 cron 每天凌晨更新一次,无法覆盖你秒级的操作需求
- 必须手动触发:sudo updatedb(耗时几秒至一两分钟,取决于文件系统规模)
- 更新完成后立即生效,无需重启服务或重新登录
注意:updatedb 默认跳过 /proc、/sys、/dev、/run 及挂载的 NFS 等路径,行为由 /etc/updatedb.conf 控制,一般无需修改。
用好 locate 的匹配控制参数
locate 默认是子串模糊匹配(如搜 conf 会命中 /etc/nginx/conf.d/ 和 /home/user/config.json)。要提升精度,常用参数有:
-
-b:只匹配文件名(basename),忽略路径。例:
locate -b nginx.conf不会返回/usr/share/doc/nginx/conf -
-i:忽略大小写。例:
locate -i readme.md可匹配README.MD、Readme.md -
-r:支持正则表达式。例:
locate -r '/etc/.*\.d$'查找所有以.d结尾的 etc 子目录 - -n 10:限制最多输出 10 行,避免刷屏
- -e:过滤掉已删除但数据库未清理的“幽灵路径”,确保每条结果真实存在
配合 updatedb 实现按需精准索引
如果日常只关心特定目录(比如只查 /home 或 /opt/app),可定制 updatedb 行为,加快更新速度并缩小范围:
- 仅索引
/home:sudo updatedb -U /home -o /var/lib/mlocate/home.db - 查时指定该库:locate -d /var/lib/mlocate/home.db user.txt
- 排除临时目录:sudo updatedb --prunepaths="/tmp /var/tmp"
这样既减少数据库体积,又避免索引大量临时或敏感路径,兼顾效率与隐私。











