apt-get autoremove 想要删除 1000 多个软件包和所有内容

apt-get autoremove 想要删除 1000 多个软件包和所有内容

它列出了 1546 个要删除的软件包。包括xorgxserver和其他核心软件包。我以前输入过“是”,正如预期的那样,它破坏了操作系统,我不得不从头开始重新安装它。这次我回答“否”,并尝试:

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)被删除。

相关内容