`updatedb` 和 `locate` 使用什么类型的数据库?

`updatedb` 和 `locate` 使用什么类型的数据库?

locate程序findutils扫描一个或多个文件名数据库并显示所有匹配项。find如果文件在上次文件名数据库更新期间存在,则这可以用作非常快速的命令。

现在的数据库有很多种,

updatedb那么更新和使用什么样的数据库呢locate

谢谢。

答案1

locate/的实现updatedb通常使用根据其需求定制的特定数据库,而不是通用数据库引擎。您将找到每个实现记录的特定数据库;例如:

  • GNU findutils' 记录在locatedb(5),并且几乎只是一个文件列表(具有特定的压缩算法);
  • mlocate的记录在mlocate.db(5),也可以被视为目录和文件的列表(带有元数据)。

答案2

似乎是 C 结构的平面文件,使用 Gnu LibC 写入/读取障碍宏

查看来源

https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720

https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413

你可以得到类似的东西

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz

答案3

据我所知后面是伯克利数据库这是键/值无守护程序数据库。请点击链接了解更多信息。维基百科摘录:

Berkeley DB (BDB) 是一个软件库,旨在为键/值数据提供高性能嵌入式数据库。 Berkeley DB 是用 C 语言编写的,具有 C++、C#、Java、Perl、PHP、Python、Ruby、Smalltalk、Tcl 和许多其他编程语言的 API 绑定。 BDB 将任意键/数据对存储为字节数组,并支持单个键的多个数据项。 Berkeley DB 不是关系数据库。

RHEL/CentOS 中数据库的位置是/var/lib/mlocate/mlocate.db(不确定其他发行版)。该命令locate --statistics将为您提供有关数据库位置和一些统计信息的信息(示例):

Database /var/lib/mlocate/mlocate.db:
        16,375 directories
        242,457 files
        11,280,301 bytes in file names
        4,526,116 bytes used to store database

对于 mlocate 格式,这里是手册页的开头:

mlocate 数据库以文件头开始:8 个字节表示幻数(“\0mlocate”,如 C 文字),4 个字节表示大端字节序的配置块大小,1 个字节表示文件格式版本 (0), 1用于“需要可见性”标志(0 或 1)的字节、2 个字节填充以及数据库根的以 NUL 结尾的路径名。

标头后面跟着一个配置块,包括在内是为了确保在某些配置更改可能影响其内容时数据库不会被重用。配置块的大小(以字节为单位)存储在文件头中。配置块是一系列变量分配,按变量名称排序。每个变量赋值都包含一个以 NUL 结尾的变量名称和一个以 NUL 结尾的值的有序列表。值列表以一个 NUL 字符结束。使用的顺序由 strcmp () 函数定义。

相关内容