当前位置:首页>Linux>瑞芯微——Linux的常用指令-- locate

瑞芯微——Linux的常用指令-- locate

  • 2026-10-12 16:39:33
瑞芯微——Linux的常用指令-- locate

Linux 闪电搜索神器 locate:RV1126b大目录找文件,秒出结果

作为一个程序员,尤其是Linux下处理大项目(比如RV1126b的release_v1.2.0这种嵌套几十层的目录)的程序员, 你一定遇到过这种 “等得抓耳挠腮” 的时刻:

用find搜个 camera_engine.h,整个release目录扫下来要好几分钟,甚至更久。 这时候,你需要一个Linux下的 “闪电搜索器” —— 它就是 locate。

在我看来,locate就像Linux世界里的 “预存索引的搜索引擎”, 它不实时扫硬盘,而是查一个提前建好的文件名数据库,搜起来快到“秒出结果”, 特别适合找已知文件名或部分文件名的文件。 不过要注意:它的数据库不是实时更新的,新文件可能搜不到,得手动更新一下。


先看例子:对比find和locate的搜索速度

还是用我们熟悉的 rv1126b_release_v1.2.0 大目录,假设我们要找 camera_engine.h:

用find搜(实时扫,慢)

cd ~/rv1126b_linux6.1_release_v1.2.0/
find . -name "camera_engine.h"

如果目录里文件多,可能要等10秒、30秒甚至更久,才能看到结果。

用locate搜(查数据库,秒出)

locate camera_engine.h

敲完回车,结果“唰”的一下就出来了——这就是locate的核心优势:快!


再搞懂:locate的工作原理

locate的快,是因为它“偷懒”——不实时扫硬盘,而是依赖一个叫 mlocate.db 的数据库(不同发行版可能名字略有不同,比如 slocate.db)。 这个数据库会定期(比如每天一次,通过cron任务)自动更新,存着系统里所有文件的路径。

所以用locate时,它直接查这个预存的数据库,不用遍历整个文件系统,自然快得飞起。 但缺点也很明显:

  • 新文件搜不到:刚创建的文件,数据库还没更新,就搜不到。
  • 已删除的文件可能还能搜到:刚删的文件,数据库还没更新,结果里还会有(但点进去会提示不存在)。

locate:核心用法与常用参数

1. 基础搜索(最常用,秒出结果)

格式:locate 文件名/部分文件名

  • 支持模糊匹配(默认就带通配符,不用手动加 *)。

例子:

# 搜完整文件名
locate camera_engine.h

# 搜部分文件名(比如所有带engine的.h文件)
locate engine.h

# 搜特定目录下的文件(比如只搜developer目录下的)
locate developer/engine.h

2. 高频常用参数

  • -i:忽略大小写搜索(比如搜 Camera_Engine.h 也能找到 camera_engine.h)
locate -i Camera_Engine.h
  • -c:只显示匹配结果的数量,不显示具体路径(比如想知道有多少个带engine的.c文件)
locate -c engine.c
  • -n n:只显示前n条结果(避免结果太多刷屏)
# 只显示前5条带engine的.h文件
locate -n 5 engine.h
  • -r:用正则表达式搜索(更灵活的模糊匹配)
# 搜所有以camera开头、以.h结尾的文件
locate -r ^/.*camera.*.h$

3. 手动更新数据库(解决新文件搜不到的问题)

如果刚创建了文件,或者刚删了文件想让结果更准,需要手动更新数据库(需要root权限,或者用sudo):

sudo updatedb

更新的时间取决于系统里的文件数量,文件多的话可能要等几十秒,但更新完之后,locate又能“秒出准结果”了。


高效小技巧:locate的实用补充

1. 和find搭配用,效率拉满

  • 先用locate快速定位大概位置,如果结果里有你要的,直接用;
  • 如果结果里没有(可能是新文件),或者需要更复杂的搜索(比如按大小、修改时间),再用find实时搜。 这样既能享受locate的快,又能兼顾find的灵活。

2. 避免搜系统垃圾文件

updatedb 默认会跳过一些目录(比如 /tmp、/proc、/sys),如果想让它跳过更多目录(比如你的下载目录、临时编译目录),可以修改 /etc/updatedb.conf 文件,在 PRUNEPATHS 里添加要跳过的目录。

3. 查看locate的数据库信息

不同发行版的数据库位置不一样,可以用 locate -S 查看数据库的信息(包括位置、大小、最后更新时间):

locate -S

总结

locate的核心价值,就是快——基于预存数据库的闪电搜索,特别适合找已知文件名的文件。 记住常用的 -i(忽略大小写)、-c(计数)、-n(限制条数),以及 sudo updatedb(手动更新数据库), 和find搭配用,能让你的文件搜索效率提升一大截,再也不用为RV1126b大目录找文件等半天!

locate 的大致用法就讲到这里, 大家有什么用 locate 的有趣经历,或者其他快速搜索文件的小技巧,欢迎在评论区交流~

最新文章

随机文章