无需 dpkg 程序即可读取完整的 dpkg 数据库状态

无需 dpkg 程序即可读取完整的 dpkg 数据库状态

从 Live USB,并且不使用已安装的 Ubuntu 程序,如、、、、或dpkg任何其他程序(因为它们都是dpkg-querydselectaptitudeapt-get破碎的Illegal instruction), 我该如何读取软件包列表 apt,以便对已安装的软件包进行分类,以便稍后重新安装?

Reading package lists... Done
Building dependency tree
Reading state information... Done

本地包数据库在哪里?几乎是一个完美的答案:

/var/lib/dpkg/status如果您更改包的状态,则会被 dpkg 修改,即安装、删除、标记某些操作等……

  • 我不想只列出“更改的”包,还想列出依赖的包、整个系统的状态等等。这些包含在内吗dpkg/status

    • 在另一个健康的系统上,该文件有 ~3800 个Package:条目;在目标系统上它有 3600 个Package:条目,而在 Live USB 上它只有 2000 个条目。这听起来是对的,但我担心它没有列出全部包裹。
  • 我不是在寻找下载的.deb缓存,也不是cache在寻找保存临时数据文件的dpkg/ apt——这些都没有提供完整的系统状态。

  • /var/lib/apt/lists似乎包含软件包源和软件包的列表,这几乎是完美的,只是从中获取软件包名称列表需要进行大量解析。这是最好的选择吗?

文件/var/cache/apt/pkgcache.bin存在,但由于它是一个生成的二进制文件,我认为将其复制到全新安装是不够的。

答案1

man dpkg

下面列出的其他文件位于其默认目录中,请参阅选项--admindir以了解如何更改这些文件的位置。

  • /var/lib/dpkg/available可用包的列表。

  • /var/lib/dpkg/status可用包的状态。

    此文件包含有关软件包是否标记为删除、是否已安装等信息。有关详细信息,请参阅“软件包信息”一节。状态文件每天在 中备份/var/backups。如果由于文件系统问题而丢失或损坏,它会很有用。

您无需担心。如果包裹没到statusdpkg我们就不知道。完全不知道。


顺便说一句,apt 所说的“软件包列表”是另一回事:这些是从 等处的源下载的列表/etc/apt/sources.list,位于 中/var/lib/apt/lists。它们包含有关存储库中软件包的信息,与本地系统无关。


关于您当前的问题,您可以使用实时系统来dpkg读取该文件,使用--admindir上面提到的选项。

相关内容