apt-get install <package>
当我通过或安装软件包aptitude install <package>
并随后使用 删除它们时apt-get purge <package>; apt-get autoremove --purge
,我的系统与以前的状态不同。它仍然安装了其他软件包。
附加软件包被标记为自动安装,如 所示apt-mark showauto
。
也就是说,这发生在 Ubuntu 18.04 下g++-8
,离开cpp-8 gcc-8 libasan5:amd64 libcc1-0:amd64 libgcc-8-dev:amd64 libisl19:amd64 libmpc3:amd64 libmpfr6:amd64 libstdc++-8-dev:amd64 libubsan1:amd64
。是否有一种干净的方法可以防止这种情况发生,即不必解析 APT 输出?
答案1
autoremove
没有像您期望的那样删除的原因是,安装的软件包自动满足您已安装的其他软件包的弱依赖关系。在您的情况下,dpkg-dev
已经安装,本身作为自动依赖项;因为它推荐虚拟c-compiler
包,所以任何提供的包c-compiler
在安装后都会保留。
换句话说,您已经安装了程序包 A,并且对程序包 B 存在弱依赖性,但尚未安装程序包 B。如果您稍后安装软件包 C,并且对软件包 B 有依赖性(强或弱,但要考虑到apt
软件包 B 的配置),则软件包 B 也将被安装,并标记为自动安装。然而,删除程序包 C 不会导致程序包 B 被考虑自动删除,因为程序包 A 就其而言使其保持“有趣” apt
。
你可以要求autoremove
忽略弱依赖项(默认情况下建议),但这可能会导致比您预期或想要的更多的包变得可移动。
我不知道对此有什么好的解决方案。aptitude
在自动删除方面更具攻击性,但它也不能处理所有情况。
看推荐和建议如何与 apt-get dist-upgrade 和 apt-get autoremove 交互?和为什么“apt-get autoremove”无法正常工作?了解更多相关信息。