还原意外`dpkg –clear-selections`

我想“清除”所有仅被“删除”的软件包。 浏览dpkg的联机帮助页后,我认为--clear-selections参数可以解决问题。 所以愚蠢的我用sudo键入它,然后我再次检查选择状态并感到震惊。

dpkg选择了所有(非重要)已安装的软件包进行卸载!

这当然是我的错,但绝对不是故意的。 那么,我该怎么回复呢?

我仍然打开了终端窗口,在那里我运行了dpkg --get-selections | grep deinstall dpkg --get-selections | grep deinstall在安装之前 (85包)和之后 (2614包)意外命令。

我现在需要的是从第二个(当前)减去第一个(旧)卸载列表,并再次标记所有这些包。 将它们设置为manual将不会很好,因为这将影响数百个库,如果没有它们的应用程序安装就毫无意义。 因此我们必须将其设置为auto ,然后我可能必须手动找出要作为manual选择的顶级包。 或者可以帮助我吗?

信息:我有两个单独的文本文件,一个包含第一个--get-selections输出,一个包含第二个。 它们只包含具有以下语法的行:

 package-name deinstall 

其中package-name是实际的包名,其间的空格是未定义的选项卡数。

更新:我刚刚在事故发生之前找到了dpkg --get-selections的输出而没有任何grep过滤! 之后只安装了两个软件包,稍后我可以手动修复它们。

请帮我恢复以前的套餐选择!

要将当前选择的所有软件包设置为deinstall以进行install ,请运行以下两个命令:

 sudo dpkg --get-selections | awk '/deinstall/ {printf "%s\t%s\n",$1,"install"}' > packages sudo dpkg --set-selections < packages 

第一个命令查找所有标记为deinstall包,并写入这样的包列表

 package-name install 

第二个命令更正了包。


如果给出了事故发生之前 dpkg --get-selections的完整输出,您只需使用该命令恢复所有选择

 sudo dpkg --set-selections < packages 

其中packages是保存旧输出的文件的名称。