it-swarm.cn

我能看到为什么要安装软件包吗?

对于特定的包,我可以找出它的安装原因吗?

那么,我可以看到它还是手动安装,还是作为另一个包的依赖项安装?或者它是作为发行版的一部分安装的?

108
Peter Smit

快速解决方案是在终端中输入以下命令:

aptitude why $package

或者,如果您只对最终原因感兴趣:

aptitude why $package --show-summary

$ package替换为包的名称,您可能需要先安装aptitude包。

这是aptitude why aspell --show-summary可能得到的输出

Packages requiring aspell:
  inkscape

有关更多详细信息,请运行aptitude why aspell。您可以按如下方式阅读下面的示例输出:“您手动安装inkscape,这需要libgtkspell,这需要libenchantic2a,这需要aspell”。 (i标记表示已安装的包; A标记表示自动安装的包。)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

最后,以下命令

apt-cache rdepends --installed $package

列出计算机上安装的其他直接依赖于$ package的软件包。您可以添加--recurse选项以列出直接或间接依赖它的所有包。

104
enzotib

通过在终端(Applications -> Accessories -> Terminal)中键入以下命令,可以快速找到安装某个软件包的原因:

aptitude why <package-name>

替换为您感兴趣的包的名称。例如,键入aptitude why libgoo-canvas-Perl会输出以下内容:

i   shutter Suggests libgoo-canvas-Perl

这基本上意味着在这种情况下包shutter建议安装libgoo-canvas-Perl。然后输入aptitude why shutter我可以走依赖链。

但是,有一个警告。我经常注意到才能找到最可能的情况解释,这可能不是实际情况,但仍会给你一个进一步观察的线索。

就我而言,shutter建议libgoo-canvas-Perl - 但是,默认情况下不会自动安装建议的包。然而,由于无法使用shutter编辑屏幕截图而导致我手动安装ligbgoo-canvas-Perl,这让我对“经验”感到震惊。

最后,您可以通过运行以下命令来查明是否自动安装了一个软件包(意味着软件包管理系统决定是否必须通过查看您要求它安装的其他软件包的依赖关系和建议)。

aptitude show <package-name>

这将输出如下所示的行(输出的第3行):

Automatically installed: no

有关更多信息,请运行info aptitude(在终端中)或访问 Aptitude wiki页面

要找出何时安装特定包,有两个选项:

  1. Synaptic包管理器维护所有活动的历史记录。要查看历史日志文件,请从“文件”菜单中选择“历史记录”。您可以搜索Install(请注意这种情况)以列出有关安装的所有条目。但是,这只会显示使用Synaptic安装的软件包
  2. 在终端中运行以下命令。这将搜索dpkg日志以获取安装历史记录条目。但是,最大限度地保留了这些日志的数量,因此如果您要查找的软件包很久以前就安装了,那么您可能找不到它。更多细节 这里

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
30
koushik

是的,你可以,事实上这是一个非常明显的命令。假设您已安装aptitude,您可以打开终端窗口广告类型:

aptitude why package

这应该给出依赖于特定包的包列表。如果它是一个手动安装的软件包,它会说“无法找到安装软件包的原因”。

12
Daniel Rodrigues

这是一种不依赖aptitude的简单方法,默认情况下10.10不再出货。

图形

打开Synaptic并尝试将其删除。

如果弹出一个对话框,要求您删除其他包,那么这些包(递归地)依赖于它。

从终端

apt-get remove package_name_goes_here -s

同样,作为结果将被删除的包都是(递归地)依赖它的那些包。 (-s参数告诉apt-get实际上没有删除包。)

4
badp