我只想“清除”所有“已删除”的软件包。浏览了 的手册页后dpkg
,我认为该--clear-selections
参数可以解决问题。愚蠢的我输入了sudo
,之后我再次检查了选择状态,结果大吃一惊。
dpkg
已选择所有(非重要)已安装的软件包进行卸载!
这当然是我的错,但绝对不是故意的。那么,我该如何恢复呢?
我仍然打开终端窗口,在dpkg --get-selections | grep deinstall
其中运行了前(85 个包裹)和后(2614 个包)意外的命令。
我现在需要做的是从第二个(当前)卸载列表中减去第一个(旧)卸载列表,并再次将所有这些包标记为需要。将它们设置为manual
并不好,因为这会影响数百个库,如果没有它们的应用程序,这些库的安装就没有意义。所以我们必须将其设置为auto
,然后我可能必须手动找出要选择的顶级包manual
。或者有什么可以帮助我吗?
信息:我有两个单独的文本文件,一个包含第一个--get-selections
输出,一个包含第二个输出。它们仅包含具有以下语法的行:
package-name deinstall
其中package-name
,是实际的包名称,并且中间的空格是未定义数量的制表符。
更新:dpkg --get-selections
我刚刚发现事故发生前的输出没有任何grep
过滤!事故发生后只安装了两个包,我可以稍后手动修复它们。
请帮助我恢复我之前的包裹选择!
答案1
设置全部要将当前选定的包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
是保存旧输出的文件的名称。