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

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

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

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

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标记表示已安装的包;标记表示自动安装的包。)

 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选项以列出直接或间接依赖它的所有包。

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

 aptitude why  

替换为您感兴趣的包的名称。例如,键入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  

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

 Automatically installed: no 

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

要了解安装特定软件包的时间,有两个选项:

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

     zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i  

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

 aptitude why package 

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

这是一种不依赖于aptitude的简单方法,10.10不再默认发布。

注意

您需要root访问权才能运行这些命令。

图形

打开Synaptic并尝试将其删除。

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

从终端

 apt-get remove package_name_goes_here -s 

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