格式化磁盘后如何创建已安装软件包列表以便轻松/自动重新安装

Zig*_*gnd 8 debian software-installation reinstall

我会将我的系统从 32 位更改为 64 位,并且与我之前使用的 Debian Squeeze 相同,但我不想丢失我之前安装的程序,因为我不记得所有程序的名称。

所以我想要一个命令来为我做这件事,保存我安装在一个文件上的所有程序的名称,而不是系统附带的标准程序,当我使用另一个系统时,我会提到自动安装所有内容的文件和目录。

还有一个问题:是否可以使用手动安装的程序来做到这一点dpkg-i package.deb?如果是这样,我该怎么做?

Gil*_*il' 9

在当前的 Debian 版本上,您可以使用以下命令获取显式安装的软件包列表

apt-mark showmanual
Run Code Online (Sandbox Code Playgroud)

对于那些运行apt-mark showmanual不存在的旧版本 Debian 的人,或者如果您想执行其他选择,您可以使用 aptitude。

aptitude search '~i !~M' -F %p >package.list
Run Code Online (Sandbox Code Playgroud)

~i匹配已安装的软件包;!~M省略作为其他包的依赖项自动安装的包。-F %p将输出格式更改为仅包含包名称。

您可以稍后安装这些软件包

apt-get install $(cat package.list)
Run Code Online (Sandbox Code Playgroud)

Debian 挤压没有apt-mark showmanual,但它apt-mark showauto列出了自动安装的软件包。如果你使用这个,你可以用 列出旧系统上的所有包dpkg --get-selections >package.list,恢复所有这些,然后用 标记自动包apt-mark markauto。对于您的用例(32 位到 64 位),这种方法可能会留下一些标记为手动的库,因为它们在不同的体系结构下具有不同的名称。

请注意,如果用例是重现相同的安装,而不是保留一组软件包但更改架构,那么现在有一个名为apt-clone(自 wheezy 以来在 Debian 中分发)的工具可以自动执行所有操作。


Ale*_*ios 7

你试过用dpkg --get-selections >packages吗?如果要排除某些包,可以编辑输出文件packages. 完成后,将其传输到目标系统并说:

dpkg --set-selections <packages
Run Code Online (Sandbox Code Playgroud)

并且软件包将被标记为安装。您很可能还需要说aptitude update; aptitude dist-upgrade.

另一个问题:如果这些包是i386架构包,并且您已经multiarch安装,则可以.deb使用通常的dpkg -i package.deb. 但是最好根据具体情况进行调查并安装具有它们的那些软件包的 64 位版本。