locate 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
locate——文件与目录命令族(见文件与目录命令族)。当你只记得文件名、要在整台机器上"秒找"时,它比 find 快得多。
locate 不遍历目录,而是查询一个预先建好的文件名数据库(通常是 /var/lib/mlocate/mlocate.db),所以无论磁盘多大,查找基本是瞬时的。
一、基本用法
bash
locate nginx.conf # 找出所有路径里含 nginx.conf 的文件
locate -i readme # -i 忽略大小写
locate '*.png' # 支持通配符(记得加引号,避免被 shell 展开)
locate -r '\.conf$' # -r 用正则匹配,以 .conf 结尾核心优势是快:
find /要从根开始遍历整个文件系统,locate 只是查库。模糊匹配很方便——只给个片段它就列出所有含该片段的路径。通配符和正则都要加引号,否则 shell 会先尝试展开。
二、索引不是实时的:updatedb
bash
locate mynewfile # 刚创建的文件可能查不到
sudo updatedb # 手动重建索引后就能查到这是 locate 最大的"坑":它查的是旧快照,新创建/删除的文件在索引更新前不会反映出来。系统通常每天通过 cron/anacron 跑一次
updatedb;临时要找刚建的文件,要么先updatedb(需 root),要么直接用 find。
三、限定范围与统计
bash
locate -n 20 '*.log' # -n 只显示前 20 条
locate -c '*.tmp' # -c 只数有多少个,不列路径
locate -b '\nginx.conf' # -b 只匹配文件名本身(basename),避免路径里含同名片段也命中
-c计数在"大概有多少这种文件"时很有用;-b '\name'把匹配锚定到文件名结尾,避免/etc/nginx/nginx.conf和/opt/nginx.conf.bak都被算进来时只想找精确的那个。
四、locate vs find
| 维度 | locate | find |
|---|---|---|
| 速度 | 查库,毫秒级 | 遍历磁盘,慢 |
| 实时性 | 有延迟(依赖 updatedb) | 实时 |
| 按内容/属性查 | 不行(只看路径名) | 可以(大小/时间/权限等) |
记住分工:找"已知名字、全机秒搜"用 locate;找"按大小/时间/内容、必须最新"用 find。两者不是替代关系,是互补。
五、实战:快速确认某配置是否存在
bash
# 不确定机器上 php.ini 在哪,秒搜
locate -b '\php.ini'一句话总结
locate = 查文件名索引库的极速查找:靠预建数据库实现毫秒级全机搜索,-i 忽略大小写、-r 正则、-c 计数;代价是结果依赖 updatedb,新文件查不到——那种情况改用实时遍历的 find。