问题描述
对于特定的软件包,我可以找出为什么安装它?
那么,我可以看到它,还是手动安装的,或者它是作为另一个软件包的依赖项安装的?或者它是作为发行版的一部分安装的?
最佳解决方法
一个快速解决方案是在终端中输入以下命令:
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
– 但是,建议的软件包默认情况下不会自动安装。尽管如此,它还是让我无法编辑”experience”的 memory ,但无法使用shutter
编辑截图,这导致我手动安装ligbgoo-canvas-perl
最后,通过运行下面的命令,你可以发现一个软件包是否被自动安装(这意味着由软件包管理系统决定是否必须查看你要求安装的其他软件包的依赖和建议)。
aptitude show <package-name>
这将输出一行如下(输出的第三行):
Automatically installed: no
有关更多信息,请运行info aptitude
(在终端中)或访问Aptitude wiki page
要找出特定软件包的安装时间,有两个选项:
-
新立得包管理器维护所有活动的历史记录。要查看历史日志文件,请从文件菜单中选择历史记录。您可以搜索
Install
(介绍该案例)以列出有关安装的所有条目。但是,这只会显示使用Synaptic安装的软件包 -
在终端中运行以下命令。这将搜索dpkg日志以获取安装历史记录条目。但是,这些日志的保留数量有最大限制,因此如果您要查找的软件包很久以前已安装,则可能无法找到它。更多细节here
zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
第三种解决方法
是的,你可以,事实上这是一个非常明显的命令。假设您已安装aptitude,您可以打开终端窗口广告类型:
aptitude why package
这应该提供依赖于特定软件包的软件包列表。如果是手动安装的软件包,则会显示“无法找到安装软件包的原因”。
第四种方法
这是一个简单的方法,不依赖于aptitude
,10.10默认不再默认出货。
Notice
You do need root access to run these commands.
Graphically
打开Synaptic并尝试删除它。
如果弹出一个对话框,要求您删除其他包,那些包(递归)依赖于它。
从终端
apt-get remove package_name_goes_here -s
再一次,因此将被删除的所有包(递归地)依赖它。 (-s
参数告诉apt-get
不实际删除软件包。)