问题描述
https://askubuntu.com/questions/1314173/where-are-the-database-files-queried-by-dpkg-query/1314175
正如此处所讨论的,所有 dpkg-query -S
文件都在 /var/lib/dpkg/info/*.list
中。
以下测试表明简单的 grep
命令比 dpkg-query -S
快得多。考虑到 dpkg-query -S
的速度不快,而且看不到 dpkg-query -S
实际查询的文件并不明显,是否真的有必要在 C 中实现?
$ time dpkg-query -S /bin/ls
coreutils: /bin/ls
real 0m0.176s
user 0m0.116s
sys 0m0.060s
$ time grep -H '^/bin/ls$' /var/lib/dpkg/info/*.list
/var/lib/dpkg/info/coreutils.list:/bin/ls
real 0m0.091s
user 0m0.075s
sys 0m0.016s
解决方法
尽管 dpkg 数据库的布局和格式是管理员友好的,并且预计那些可能需要在恢复情况下或紧急情况下使用它的人,这个“接口”并没有扩展到除其他程序之外的其他程序dpkg 工具套件。
请参阅在此类访问上触发的 lintian 检查: https://lintian.debian.org/tags/uses-dpkg-database-directly
并查看以下规范,了解即将进行的更改将破坏任何此类直接使用,而不是使用官方支持的接口: https://wiki.debian.org/Teams/Dpkg/Spec/MetadataTracking