假设有一个名为 的 Debian 软件包Foo
,其版本1.1.1
依赖于名为 的软件包Bar
。
想象一下,有一个更新版本的Foo==1.1.2
,它不再依赖于Bar
。
升级后,该软件包Bar
不会自动卸载。而且,apt autoremove
也不卸载这个包。
Bar
在升级依赖于这些软件包的过程中,如何自动检测此类软件包?我如何摆脱这样的包裹Bar
?
答案1
如果在命令的输出中找到,您的包可能已以以下状态结束,而不是可以确认的Bar
状态:manual
auto
apt-mark showmanual
因此不再由 处理apt-get autoremove
。
您可以使用该工具deborphan
从包装中deborphan
专门寻找此类包。它不使用包的manual
状态来进行启发。
可以找到未使用的包(例如库)的程序
deborphan 在您的系统上找到“孤立”包。它根据安装情况确定哪些软件包没有其他软件包,并向您显示这些软件包的列表。它在查找库时最有用,但它可以用于所有部分的包。
请注意,它也可能会产生误报,特别是对于插件库(可以删除而不会导致依赖性问题的库,但删除它们会删除某处的功能)。
您可以使用 给出的结果deborphan
自行删除软件包,或者将它们标记回来,auto
如
apt-mark auto package1 package2 ...
以便进一步处理apt-get autoremove
。
答案2
我相信apt remove
Debian 相当于 Arch 的pacman -Qdtq
,它只是查询不再需要作为依赖项的包。要删除它们,我怀疑你必须运行类似的命令
apt remove $(apt autoremove)
(对于 Arch 你必须运行类似的东西pacman -R $(pacman -Qdtq)
)。
至于自动删除这些包,我不确定是否更改 的配置apt
,但您可以将以上行添加到您的.bashrc
.
免责声明:我没有在 Debian 上这样做过,但我已经使用 Arch 做了你想做的事情。