我在我的笔记本电脑上使用 Crunchbang Linux。我注意到包管理器的一个奇怪行为:当从官方存储库安装包时(libdirectfb-extra
在我的例子中)apt
告诉我不再需要一堆包(包括xflux
、obconf
和obmenu
我经常使用的其他应用程序)。我继续安装该软件包,但随后apt
删除了所有不需要的软件包。
这是什么意思?为什么会发生这种情况?我不经常更新系统,是这个原因吗?
答案1
一个包“foo”可能依靠在另一个包“bar”上。这意味着如果没有安装“bar”,则无法安装“foo”。
包管理器的任务是确保如果用户请求安装“foo”,则安装包“bar”。
现在现代的包管理器还将保留每个包的记录,无论它是否已安装手动(因为用户请求安装此软件包)或自动地(因为用户请求安装另一个包,而另一个包又需要这个包)。
如果用户卸载包“foo”,系统可能会发现系统不再需要“bar”(系统上有“bar”的唯一原因是“foo”需要它;现在“foo”将消失, “酒吧”可能也应该消失)。
这应该可以保证您的系统不会因不需要的软件包而变得过于臃肿。
有时事情会更复杂一些。想象一下“foo”依赖于“bar”...但是“foo”的新版本和更新版本依赖于“baz”(并且根本不需要旧的“bar”)。升级“foo”时会发生什么?它将安装新的“baz”软件包,并删除自动安装的“bar”软件包。
答案2
这取决于你的解释是否准确。
如果它只是说它们将被删除,那么它们就会由于依赖冲突而被删除
如果它说不再需要它们,那么它们是通过依赖项安装的(例如,gnome-desktop 依赖于吨包)并且依赖包已被删除。当发生这种情况时,所有依赖项都被视为“可以删除”,因为它们没有显式安装。
为什么他们被移除?最可能的原因(如果您使用的是apt-get
)是--auto-remove
标志已传递,在某个时刻apt-get auto remove
已运行或APT::Get::AutomaticRemove
设置了配置选项。跑去apt-config dump | grep APT::Get::AutomaticRemove
检查一下。