locate
locate 是 Linux 系统中一款高效的文件搜索工具,通过查询预先构建的文件路径数据库来快速定位文件,速度远快于实时遍历文件系统的 find 命令,非常适合日常的快速文件定位
其工作原理如下:
- 系统定期(通常每天通过 cron 任务)运行
updatedb命令,扫描文件路径并生成数据库(默认路径为/var/lib/mlocate/mlocate.db) - locate 直接查询该数据库,而非实时遍历文件系统
- 搜索结果为包含指定关键词的文件路径(默认模糊匹配)
新创建的文件需等待数据库更新后才能被搜索到。如需立即搜索,可手动执行
sudo updatedb更新数据库
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. 基础用法
# 查找所有路径中包含 "nginx.conf" 的文件locate nginx.conf
# 查找名称中包含 "python" 的文件(忽略大小写)locate -i python
# 多个匹配模式(OR 语义)locate -i 'license' 'readme'2. 限制与统计
# 只显示前 3 个包含 "log" 的文件路径locate -n 3 log
# 统计系统中包含 "bash" 的文件数量locate -c bash3. 精确匹配与过滤
# 只匹配文件名(不含路径)包含 "hosts" 的文件locate -b hosts
# 只显示当前存在的 "ssh_config" 文件(排除已删除的)locate -e ssh_config4. 正则表达式匹配
# 使用正则匹配以 ".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. 数据库相关操作
# 查看数据库统计信息locate -S
# 手动更新数据库(需要 root 权限)sudo updatedbman locateman updatedb- GNU Findutils - locate