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 系统中使用,基本功能是相同的。