我目前正在尝试获取有关已安装的软件包和使用dpkg
.所以我尝试使用dpkg-query
.大多数占位符工作正常,我得到了我需要的东西,但是我注意到占位符Filename
,MD5sum
和Size
总是空的。
简单命令即可查看问题:
dpkg-query -W -f '"location":"${Filename}","md5":"${MD5sum}","size":"${Size}"\\n'
这将导致大量的行
"location":"","md5":"","size":""
答案1
正如中提到的联机帮助页,这些字段是“内部的、前端相关的”。事实上它们仅用于dselect
.
这意味着默认情况下您不能依赖它们dpkg-query
。它们对应于存储在“可用”数据库中的值/var/lib/dpkg/available
;dpkg-query
默认情况下仅考虑/var/lib/dpkg/status
当前。--load-avail
理论上,您可以添加选项来合并“可用”数据库中的信息 - 但这需要使用dselect
作为您的软件包安装工具,因为/var/lib/dpkg/available
仅通过dselect
.如果您使用 APT,这将不起作用,如命令文档中所述-p
:
基于 APT 的前端的用户应
apt-cache show package-name
改为使用,因为该available
文件仅在使用dselect
.
如果我对以下字段的含义进行一些扩展,可能会有所帮助:Filename
、MD5sum
和Size
(和MSDOS-Filename
)都提供有关包含包的文件的信息(其文件名、校验和和大小)。它们与包本身没有密切关系,因此status
数据库不需要它们,也不存储它们。无论已安装或以其他方式安装的包,无论其包文件位于何处以及其特征是什么,都保持不变。该信息仅对检索包并将其提供给dpkg
.
答案2
您可以使用grep-available
grep-aptavail
工具代替(或者如上所述更好@斯蒂芬·基特):
grep-available -s Filename,MD5sum,size -PX <package_name>
例子:
grep-available -s Filename,MD5sum,size -PX dpkg
示例输出:
Filename: pool/main/d/dpkg/dpkg_1.18.24_amd64.deb
MD5sum: 5553b3fac608f5c4f9fa3ddbff18c2c5
Size: 2106696