Linux plocate 命令 - 快速的查找文件和目录
plocate(英文全称为:parallel locate)是一款高效快速的文件搜索工具,它是传统 locate 命令的高性能版本,它的运行速度更快,数据库占用的存储更小。
本文将为你从多个方面介绍 plocate 命令的使用方法,使你对 plocate 命令具有基本的了解。
安装 plocate 命令
默认情况下,plocate 命令在各系统中是没有安装的,如果要使用 plocate 命令,需要在你的系统中安装 plocate 命令。
Debian / Ubuntu 系统
在 Debian / Ubuntu 系统中使用如下命令安装 plocate:
sudo apt update
sudo apt install plocate -y
# 初始化数据库(替换传统locate)
sudo updatedb
RHEL / AlmaLinux系统
在 RHEL / AlmaLinux / Rocky Linux 系统中使用如下命令安装 plocate:
# 启用EPEL仓库
sudo dnf install epel-release
# 安装plocate
sudo dnf install plocate
# 配置系统使用plocate
sudo alternatives --set locate /usr/bin/plocate
sudo updatedb
FreeBSD 系统
在 FreeBSD 系统中使用如下命令安装 plocate:
# 通过pkg安装
sudo pkg install plocate
# 初始化数据库
sudo /usr/local/libexec/locate.updatedb
# 设置环境变量
echo 'export LOCATE_PATH=/var/db/plocate.db' >> ~/.bashrc
plocate 命令语法
如下给出 plocate 命令的基本语法形式:
plocate [选项]... 模式...
语法结构中各部分的解释说明:
- 选项:用于控制查找文件行为的参数
- 模式:用于匹配文件名的模式字符串
注意:使用 plocate 命令需要初始化或者更新该命令使用的数据库。
正则表达式模式介绍
plocate 命令中使用的正则表达式是 POSIX 基本正则表达式,它的使用规则如下:
.:匹配任意单个字符*:匹配前一个字符的 0 次或多次(注意*本身是普通字符,仅当前面有有效字符时才会被作为量词对待)^:匹配字符串开头位置$:匹配字符串结尾位置[]:指定字符集,字符只要匹配该字符集中的一个,既算匹配成功- 特殊元字符(如
+、?、()等)需要使用转义字符\转义
plocate 命令使用示例
1. 使用文件名查找文件
在模式部分,给出具体的文件名称,就可以按照文件名查找文件:
plocate nginx.conf
2. 使用通配符搜索文件
要查找特定类型的文件,可以使用通配符 * 查找全部的文件:
plocate *.service
如上的命令会查找出所有的服务配置文件,即:所有的以 .service 结尾的文件。
3. 使用正则表达式搜索
需要使用 -r 选项启用正则表达式查询:
plocate -r '202[0-9]-(0[1-9]|1[0-2])\.log$'
如上示例:使用正则表达式查找 2020-2029 年间所有月份的日志文件,正则表达式模式中不包含日期,如果文件包含日期则不能被匹配。
- [0-9]匹配 0 到 9 中的任意一个数字字符
- [0-2] 匹配 0 1 2 三个数字字符中的一个
4. 只显示特定数量的结果
使用 -n 选项,指定最多显示的结果条数:
bash
plocate -n 10 *.jpg
如上示例,只显示 10 个搜索结果。
5. 忽略匹配时的大小写
使用 -i 选项,匹配时忽略大小写差异,同一个字符的大写形式和小写形式认为是相同字符:
plocate -i README.md
plocate 命令选项详解
如下给出 plocate 命令选项的详细解释说明:
| 选项 | 说明 | 参数示例 |
|---|---|---|
| 搜索控制选项 | ||
-i, --ignore-case |
搜索匹配时忽略大小写字符的不同 | |
-r, --regex |
启用正则表达式匹配模式 | -r '\.conf$' |
-w, --wholename |
匹配完整路径名称(该选项为默认值) | |
-b, --basename |
仅匹配文件名(忽略目录信息) | -b nginx.conf |
-p PATH, --path=PATH |
限定搜索的路径 | -p /var/log |
| 输出控制 | ||
-c, --count |
仅显示搜索匹配文件的数量 | |
-l N, --limit=N |
限定输出结果的记录条数 | -l 20 |
-n N, --number=N |
同 --limit 功能相同 |
|
-0, --null |
使用 NULL 分隔多个结果 | |
--json |
使用 JSON 格式输出结果信息 | |
-S, --statistics |
显示性能统计信息 | |
| 系统配置 | ||
-d FILE, --database=FILE |
用于指定特定的数据库文件 | -d /ssd/plocate.db |
--help |
显示帮助信息 | |
--version |
显示版本信息 | |
-V, --verbose |
详细模式输出 |
数据库管理
plocate 从创建的数据库中读取数据,而不是直接根据从目录中搜索内容,因此需要维护其数据库。
数据库创建与更新
当创建目录、文件,删除目录、文件,后如果不更新数据库,修改的内容不会出现在数据库中,那么搜索的结果就不准确。使用如下命令更新数据库:
# 标准全量更新(如果还没有创建数据库,该命令会创建数据库)
sudo updatedb
# 增量更新(仅变化部分)
sudo updatedb --incremental
# 指定数据库文件存放的位置
sudo updatedb --database-root / --output /mnt/ssd/plocate.db
配置文件详解
/etc/updatedb.conf 关键配置及其解释说明:
# 排除搜索的路径(多个目录之间,使用空格分隔开来)
PRUNEPATHS="/tmp /proc /mnt"
# 排除文件搜索的系统类型
PRUNEFS="NFS tmpfs"
# plocate 专用设置
PRUNE_BIND_MOUNTS="yes" # 不索引绑定挂载
PLOCATE_USE_MMAP="1" # 启用内存映射加速
数据库文件的位置
各系统中数据库文件的默认位置如下所示:
| 系统 | 默认路径 | 大小对比(100万文件) |
|---|---|---|
| Linux | /var/lib/plocate/plocate.db |
35 MB |
| FreeBSD | /var/db/plocate.db |
38 MB |
| 传统 mlocate | /var/lib/mlocate/mlocate.db |
65 MB |
结语
plocate 在其查找速度和性能上相比 locate 有了很大的进步。在本文中我们全面的介绍了 plocate 的语法结构及其功能,并给出了 plocate 命令的具体使用示例,相信你能够根据你的需求做出自己的判断。 plocate 命令可以在 Linux 各发行版和 FreeBSD 系统中使用,基本功能是相同的。