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

Joh*_*hny 6 package-management apt

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

sudo apt-get -y update --fix-missing
Run Code Online (Sandbox Code Playgroud)

但它仍然想删除一切。我该如何解决这个问题!

use*_*733 5

当人们将桌面固定到最小安装时,这种情况最常见。但当您将任何类型的主要堆栈连接到 Ubuntu 系统时,这种情况都可能发生。

在桌面示例中,这意味着整个桌面堆栈挂在单个元包上(如ubuntu-desktop包)。当您删除桌面的某些元素或应用程序时(这会删除桌面元包),该操作会使整个桌面堆栈符合自动删除的条件。

预防

  • 当人们使用真正的桌面安装程序时,会有一层额外的 apt-marking 保护来防止人们自动删除整个桌面。

  • 您还可以显式安装(或 apt 标记)您使用的应用程序。这样,您的大部分桌面依赖项就不会被自动删除。

    sudo apt install shotwell         # Example of explicitly installing
    sudo apt-mark manual shotwell     # Example of apt-marking
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用任务包安装,例如 Ubuntu MATE 可以通过以下方式安装

    sudo apt-get install ubuntu-mate-desktop^
    
    Run Code Online (Sandbox Code Playgroud)

    注意^,表示任务;sudo apt autopurge ubuntu-mate-desktop如果有人想运行元包等潜在危险命令,以这种方式安装可以防止破坏系统。

恢复

  • 您只需重新安装桌面任务包即可。

    sudo apt install --reinstall ubuntu-desktop^ # Example of re-installing a Ubuntu desktop task
    
    Run Code Online (Sandbox Code Playgroud)
  • 您还可以复制长的删除列表并将该列表粘贴到安装命令中。请注意,命名一个包会使其没有资格进行未来的自动删除,但您担心的似乎是自动删除太多而不是太少。如果您需要恢复该列表,它就在您的/var/log/apt/history.log文件中。


use*_*489 0

如果您认为自动删除会删除您想要保留的内容,那么对于每个包,您应该:

  • 用于dpkg -l | grep $shortpackagename检查是否还安装了较新的版本,在这种情况下可以删除旧版本
  • 用于apt rdepends $packagename查看是否有您也想要的父包。如果有,请安装该父包或该父包的反向依赖项
  • 如果您没有要保留的(明显的)父依赖包,但您仍然想保留它,apt install $packagename那么它不会被自动删除卸载。

上面的一个很好的例子(如评论中提到的),如果自动删除想要删除xorg然后安装ubuntu-desktop,您可能会发现许多自动删除现在将安装父依赖项,并且列表会变得更短。

一旦列表足够短,剩下的要么是过时的软件包,要么是您确定不关心的东西,那么自动删除就是安全的。

这种情况是不正常的,它不会自动发生,它是由于在某些时候从系统中删除某些关键内容导致某些重要的父包(例如 ubuntu-desktop)被删除而引起的。