如何从完整系统备份生成已安装软件包的列表?

如何从完整系统备份生成已安装软件包的列表?

如果我有一个正在运行的 debian 系统,可以发出以下命令来获取已安装软件包的列表:

dpkg --get-selections > packages.lst

但现在我只有工作系统的根分区的完整备份(完整的系统备份),仅此而已。如何从这些文件生成已安装软件包的列表?

答案1

chroot 进入它,然后运行 ​​dpkg 将是最简单的事情。看https://superuser.com/a/417004/20798了解如何在 chroot 中获取可用的/proc, /sys, 和。/dev

由于您在备份之外有一个工作的 Debian 系统,您可能可以使用

dpkg --admindir=dir --get-selections

默认dir/var/lib/dpkg,因此请将路径放入备份的/var/lib/dpkg.


不要忘记,它dpkg --get-selections不会显示哪些软件包是手动安装的,哪些软件包只是为了满足依赖关系而安装的(因此当不再需要时应该自动删除,因为您实际想要的软件包的新版本具有不同的依赖关系,或者因为您清除了手动安装的软件包。)

我用的是 aptitude,这样很容易标记一切作为自动安装,然后检查并将一些软件包标记为手动安装,直到您想要保留的内容都不会被自动删除。从大型元包开始,例如、和build-essential的 Debian 等效项,以及类似的东西。在 aptitude 中,点击查看软件包的反向依赖项(依赖于它的 pkg)。ubuntu-standardubuntu-desktopr

答案2

彼得的方法更好,但你也可以只解析/var/lib/dpkg/status不需要chroot

 $ perl -00ne 'if(/: install/){/Package:\s*(\S+)/ && print "$1\n"}' /var/lib/dpkg/status

在我的机器上,它返回相同的包列表dpkg --get-selections | awk '$NF=="install"{print $1}'awk需要解析,因为否则它还会显示已卸载的包)。

答案3

您可以使用以下命令列出您的软件包:

awk '/Package:/ {print $2}' /var/lib/dpkg/status

相关内容