它列出了 1546 个要删除的软件包。包括xorg
、xserver
和其他核心软件包。我以前输入过“是”,正如预期的那样,它破坏了操作系统,我不得不从头开始重新安装它。这次我回答“否”,并尝试:
sudo apt-get -y update --fix-missing
但它还是想删除所有内容。请问我该如何修复它?
答案1
这种情况最常发生在人们将桌面固定到最小安装上时。但当你将任何类型的主要堆栈固定到 Ubuntu 系统上时,这种情况也可能发生。
在桌面示例中,这意味着整个桌面堆栈都挂在单个元包(如ubuntu-desktop
包)上。当您删除桌面的某些元素或应用程序(即删除桌面元包)时,该操作会使整个桌面堆栈符合自动删除条件。
预防
当人们使用真正的桌面安装程序时,会有一层额外的 apt-marking 保护,以防止人们自动删除整个桌面。
您还可以明确安装(或 apt-mark)您使用的应用程序。这样,您的大多数桌面依赖项就不会被自动删除。
sudo apt install shotwell # Example of explicitly installing sudo apt-mark manual shotwell # Example of apt-marking
使用任务包安装,例如 Ubuntu MATE 可以通过以下方式安装
sudo apt-get install ubuntu-mate-desktop^
注意
^
sudo apt autopurge ubuntu-mate-desktop
,意思是任务;如果有人想运行潜在危险的命令(比如元包),以这种方式安装将防止破坏系统。
恢复
您可以简单地重新安装桌面任务包。
sudo apt install --reinstall ubuntu-desktop^ # Example of re-installing a Ubuntu desktop task
您还可以复制删除的长列表,并将该列表粘贴到安装命令中。请注意命名软件包使其不再符合将来的自动移除条件,但您担心的似乎是自动移除次数过多而不是次数过少。如果您需要恢复该列表,它就在您的
/var/log/apt/history.log
文件中。
答案2
如果您认为自动删除会删除您想要保留的内容,那么对于每个包您应该:
- 用于
dpkg -l | grep $shortpackagename
检查是否还安装了较新的版本,如果安装了,则可以删除较旧的版本 - 使用
apt rdepends $packagename
来查看是否有您也需要的父包。如果有,则安装该父包或该父包的反向依赖项 - 如果没有您想要保留的(明显的)父依赖包,但您仍然想保留它,
apt install $packagename
那么它就不会被自动删除卸载。
上面的一个很好的例子(如评论中所述),如果自动删除想要删除xorg
然后安装ubuntu-desktop
,您可能会发现许多自动删除现在都会安装父依赖项,并且列表会变短。
一旦列表足够短,剩下的就是过时的软件包或者你确定不关心的东西,那么自动删除就是安全的。
这种情况是不正常的,它不会自动发生,而是由于在某个时候,一些关键的东西从系统中删除,导致一些重要的父包(如 ubuntu-desktop)被删除。