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

cer*_*cem 7 debian package-management

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

dpkg --get-selections > packages.lst
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*des 7

chroot 进入它,然后运行 ​​dpkg 将是最简单的事情。见https://superuser.com/a/417004/20798对于如何得到一个工作/proc/sys/dev在chroot环境。

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

dpkg --admindir=dir --get-selections
Run Code Online (Sandbox Code Playgroud)

dir默认为/var/lib/dpkg,所以就把路径备份的/var/lib/dpkg


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

我使用 aptitude,它可以轻松地将所有内容标记为自动安装,然后将一些软件包标记为手动安装,直到您想要保留的任何内容都被自动删除。先从大元套餐,喜欢build-essential的Debian的等价物ubuntu-standardubuntu-desktop,和类似的东西。在 aptitude 中,点击r查看包的反向依赖项(依赖于它的包)。