如何在 apt-get autoremove 中找到孤立包的原因?

blu*_*e10 4 package-management apt

通常,apt-get autoremove删除已作为某些其他软件包的依赖项安装的软件包,这些软件包现在不再安装。我注意到我的孤儿包列表包括像emacs24and 之类的东西tmux,我绝对想保留它们。是否有可能首先找出哪个其他(现在丢失)软件包负责安装它们?

Rav*_*ina 5

自动地:

解决方案之一是使用aptitude,首先安装它:

sudo apt install aptitude
Run Code Online (Sandbox Code Playgroud)

现在要找出为什么在您的 Ubuntu 上安装了一个软件包,您可以运行:

aptitude why pkgname 
Run Code Online (Sandbox Code Playgroud)

但请注意:

aptitude 在这种情况下产生的依赖只是一个建议。这是因为此计算机上当前安装的软件包均不依赖或推荐“pkgname”。

还:

aptitude why不执行完全依赖解析;它只显示包之间的直接关系。

总之,如果您找不到相关的包,那么该包很有可能已作为依赖项或建议安装在将使用 删除的其他包中apt autoremove,或者以某种方式与此链相关.

手动

首先让我们产生一个情况,然后尝试找出安装包的原因,我首先安装vlc在我的系统上:

sudo apt install vlc
Run Code Online (Sandbox Code Playgroud)

之后,我只使用 删除vlc自身sudo apt remove vlc,现在如果我运行,sudo apt autoremove我会得到:

libqt5x11extras5 vlc-bin vlc-plugin-qt ...
Run Code Online (Sandbox Code Playgroud)

让我们首先使用aptitude以下方法检查其中一个:

$ aptitude why libqt5x11extras5
aptitude why libqt5x11extras5
i   xorg      Depends  xterm | x-terminal-emulator
p   qterminal Provides x-terminal-emulator
Run Code Online (Sandbox Code Playgroud)

然而,由于直接依赖链,另一个可以正常工作:

$ aptitude why vlc-bin
c   vlc      Depends  vlc-bin
Run Code Online (Sandbox Code Playgroud)

注意c这意味着该软件包已被删除,但其配置文件仍然存在于我的系统中,因此很有可能(在本例中为 100%)vlc-binvlc.

现在让我们回到我们的工作,找出为什么libqt5x11extras5我们的 Ubuntu 上存在:

$ apt-cache rdepends libqt5x11extras5 | xargs dpkg -l |& grep -e '^i' -e '^rc'
Run Code Online (Sandbox Code Playgroud)

usingapt-cache rdepends我正在寻找依赖于 的所有软件包libqt5x11extras5,然后我正在寻找已安装或已安装在我的系统上的软件包,使用dpkg的组合grep,结果是:

ii  libqt5x11extras5
ii  vlc-plugin-qt
Run Code Online (Sandbox Code Playgroud)

看?我们发现这个包与我们autoremove列表中的另一个包相关:vlc-plugin-qt,最后:

$ aptitude why vlc-plugin-qt
c   vlc
Run Code Online (Sandbox Code Playgroud)

我们回到了vlc.