对于特定的包,我可以找出它的安装原因吗?
那么,我可以看到它还是手动安装,还是作为另一个包的依赖项安装?或者它是作为发行版的一部分安装的?
快速解决方案是在终端中输入以下命令:
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
选项以列出直接或间接依赖它的所有包。
通过在终端(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页面
要找出何时安装特定包,有两个选项:
Install
(请注意这种情况)以列出有关安装的所有条目。但是,这只会显示使用Synaptic安装的软件包在终端中运行以下命令。这将搜索dpkg日志以获取安装历史记录条目。但是,最大限度地保留了这些日志的数量,因此如果您要查找的软件包很久以前就安装了,那么您可能找不到它。更多细节 这里
zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
是的,你可以,事实上这是一个非常明显的命令。假设您已安装aptitude,您可以打开终端窗口广告类型:
aptitude why package
这应该给出依赖于特定包的包列表。如果它是一个手动安装的软件包,它会说“无法找到安装软件包的原因”。
这是一种不依赖aptitude
的简单方法,默认情况下10.10不再出货。
打开Synaptic并尝试将其删除。
如果弹出一个对话框,要求您删除其他包,那么这些包(递归地)依赖于它。
apt-get remove package_name_goes_here -s
同样,作为结果将被删除的包都是(递归地)依赖它的那些包。 (-s
参数告诉apt-get
实际上没有删除包。)