跳转到内容

locate

locate 是 Linux 系统中一款高效的文件搜索工具,通过查询预先构建的文件路径数据库来快速定位文件,速度远快于实时遍历文件系统的 find 命令,非常适合日常的快速文件定位

其工作原理如下:

  1. 系统定期(通常每天通过 cron 任务)运行 updatedb 命令,扫描文件路径并生成数据库(默认路径为 /var/lib/mlocate/mlocate.db)
  2. locate 直接查询该数据库,而非实时遍历文件系统
  3. 搜索结果为包含指定关键词的文件路径(默认模糊匹配)

新创建的文件需等待数据库更新后才能被搜索到。如需立即搜索,可手动执行 sudo updatedb 更新数据库

Terminal window
locate [选项] 匹配模式...
  • 匹配模式:要搜索的文件名或路径片段,可以是普通子串匹配(默认),也可以是正则匹配(配合 -r)

默认的匹配模式支持 GLOB 可以给出多个匹配模式,通常匹配其中一个即输出(OR 语义)

1. 匹配控制

选项 说明
-i 忽略大小写
-b 只匹配文件名(不匹配路径中的目录部分)
-r 使用正则表达式进行匹配

正则表达式可以用单引号 ''(shell 不解析特殊字符)或双引号 ""(shell 会解析变量和命令替换)

2. 输出控制

选项 说明
-n <N> 最多输出 N 条结果
-l <N> 最多输出 N 条结果(与 -n 同义,不同版本可能只支持其一)
-c 只输出匹配数量,不列出路径
-e 只显示当前存在的文件(排除已删除但数据库中仍存在的路径)

3. 数据库相关

选项 说明
-d <PATH> 指定自定义数据库路径(默认使用系统默认数据库)
-S 显示数据库的统计信息(如包含的文件数、目录数等)

1. 基础用法

Terminal window
# 查找所有路径中包含 "nginx.conf" 的文件
locate nginx.conf
# 查找名称中包含 "python" 的文件(忽略大小写)
locate -i python
# 多个匹配模式(OR 语义)
locate -i 'license' 'readme'

2. 限制与统计

Terminal window
# 只显示前 3 个包含 "log" 的文件路径
locate -n 3 log
# 统计系统中包含 "bash" 的文件数量
locate -c bash

3. 精确匹配与过滤

Terminal window
# 只匹配文件名(不含路径)包含 "hosts" 的文件
locate -b hosts
# 只显示当前存在的 "ssh_config" 文件(排除已删除的)
locate -e ssh_config

4. 正则表达式匹配

Terminal window
# 使用正则匹配以 ".txt" 结尾的文件
locate -r "\.txt$"
# 匹配 /usr/bin 目录下以 "git" 开头的文件
locate -r "^/usr/bin/git.*"
# 匹配 /etc/ssh/ssh_config 及 /etc/ssh/ssh_config.d/ 下的文件
locate -r '^/etc/ssh/ssh_config(\.d/.*)?$'

5. 数据库相关操作

Terminal window
# 查看数据库统计信息
locate -S
# 手动更新数据库(需要 root 权限)
sudo updatedb