![如何检测先前依赖的软件包升级后不再需要的 Debian 软件包?](https://linux22.com/image/168511/%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E5%85%88%E5%89%8D%E4%BE%9D%E8%B5%96%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%8D%87%E7%BA%A7%E5%90%8E%E4%B8%8D%E5%86%8D%E9%9C%80%E8%A6%81%E7%9A%84%20Debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
假设有一个名为 的 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 做了你想做的事情。