![为什么删除“元包”不会删除它安装的依赖项?](https://linux22.com/image/1162851/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%88%A0%E9%99%A4%E2%80%9C%E5%85%83%E5%8C%85%E2%80%9D%E4%B8%8D%E4%BC%9A%E5%88%A0%E9%99%A4%E5%AE%83%E5%AE%89%E8%A3%85%E7%9A%84%E4%BE%9D%E8%B5%96%E9%A1%B9%EF%BC%9F.png)
如果我尝试卸载元包,apt
实际上并不会删除元包的依赖项,而只会删除“包装器”本身。即使在运行 时,也不会列出这些子包。我发现删除大多数普通包的依赖项,但删除的元包却不多,apt autoremove
这让我感到困惑。为什么会这样?autoremove
答案1
元包在任何方面都不是魔术:“元包”的概念不是 APT 系统的一部分 - 元包只是一个没有实际内容、只有依赖项的包。因此,删除它们与删除具有实际内容且还依赖于其他内容的包具有相同的效果,例如 Web 服务器应用程序模块将需要 Web 服务器,但当您删除它时 - Web 服务器仍应保持安装状态。
话虽如此,APT 会跟踪哪些软件包是由于另一个软件包请求而自动安装的(例如元软件包请求“实际”软件包,或 Web 服务器应用程序模块需要 Web 服务器),并且一旦您删除需要的软件包,APT 就会建议您运行apt autoremove
以摆脱这些自动安装的软件包。
在 Ubuntu 操作系统中使用“元包”的主要问题是它们依赖于许多包,本质上就是一次安装就安装了大量软件。当安装如此多的包时,尤其是那些紧密联系在一起的包时,您会得到很多交叉依赖关系:元包需要包A
,B
并且C
对您来说,还A
依赖于B
并且B
(可能令人惊讶)还依赖于A
。因此,如果您删除元包,则只会C
删除 。
作为一个具体的例子,让我们考虑一下 LXDE 元包lubuntu-desktop
:
lubuntu-desktop
需要lxqt-core
lxqt-core
需要lxqt-panel
lxqt-panel
依赖于取决于lxqt-core
。实际上,这种依赖关系不是Requires
,但是Recommends
- 但这足以让 apt 决定不自动删除任何一个包。
以下答案有更多详细信息:
答案2
Ubuntu 安装的所有软件包无处不在安装程序被恰当地标记为‘手动’(而不是‘自动’),使得所有这些包都不符合自动删除的条件。
当然,你仍然可以删除它们,只是不能自动移除他们。
Ubuntu Server、Minimal Image 和 Cloud Image 安装程序并非基于普遍性,并且它们的软件包是有资格自动移除。
如果你不熟悉恰当标记,这只是 apt 如何跟踪管理员指定的依赖项('手动的'),并作为依赖项引入 ('汽车')。man apt-mark
有关详细信息,请参阅。
非标准 Ubiquity 行为的原因是为了保护您:人们会以各种方式修改他们的桌面系统,包括需要删除元包的方式。大多数用户通常不会打算删除他们的整个桌面,意外删除可能会带来相当大的情绪波动,因此 Ubuntu 开发人员进行了更改以保护用户免受他们自己(无意的)愚蠢行为的影响。毕竟,Ubuntu 也是为新用户和不熟练的用户设计的。
那些想要精简软件包以适应实际需要的人(我们都曾尝试过)会发现从最小图像并且要不断增强,而不是对抗、削减。