我可以看到安装这个包的原因吗?

我可以看到安装这个包的原因吗?

对于特定的包,我能否找出安装它的原因?

那么,我能看到它是手动安装的吗?还是作为另一个软件包的依赖项安装的?还是作为发行版的一部分安装的?

答案1

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

aptitude why $package

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

aptitude why $package --show-summary

代替$包带有包的名称,您可能需要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

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

答案2

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>

这将输出如下行(输出的第三行):

Automatically installed: no

要了解更多信息,请运行info aptitude(在终端中)或访问Aptitude 维基页面

找出答案什么时候安装了一个特定的包,有两个选项:

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

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

答案3

这是一个不依赖于的简单方法aptitude,10.10 不再默认提供该方法。

图形化

打开 Synaptic 并尝试将其删除。

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

从航站楼

apt-get remove package_name_goes_here -s

再次,结果将被删除的是所有(递归地)依赖它的包。(该-s参数指示apt-get不要真正删除该包。)

答案4

是的,你可以,事实上这是一个非常明显的命令。假设你已经安装了 aptitude,你可以打开终端窗口并输入:

aptitude why package

这应该会给出依赖于该特定软件包的软件包列表。如果是手动安装的软件包,它会显示类似“无法找到安装软件包的原因”的内容。

相关内容