对于特定的软件包,我可以查明为什么安装了该软件包吗?还是将其作为发行版的一部分安装?

评论

这与此问题有关(一部分),有关详细信息,请参见此答案。

2017年更好的答案在这里:askubuntu.com/questions/128524/…

如何列出依赖包(反向依赖)的可能重复项?

#1 楼

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

aptitude why $package


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

aptitude why $package --show-summary


将$ package替换为软件包的名称,然后可能需要先安装aptitude软件包。 />
Packages requiring aspell:
  inkscape


有关更多详细信息,请运行aptitude why aspell --show-summary。您可以阅读以下示例输出:“您手动安装了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)


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

评论


默认情况下不包括可怜的资质:(

– Badp
2010-10-10 14:21

@badp谢谢指出。这是特立独行的不良新做法,只是在livecd iso映像上节省了一些空间。但这是一个无价的工具,我一定会努力。

– Enzotib
2010-10-10 14:31

apt-cache rdepends --recurse $ package可能提供了太多的软件包。我将添加--installed选项以限制安装的软件包。 -i选项限制为与依赖关系相关的软件包。但是可能会安装一个软件包,因为另一个软件包建议这样做。为了包括与建议相关的软件包,我认为这将给出正确的软件包:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-places --no-enhances --installed-递归$ package

– jarno
2013年12月22日18:20



略短于@jarno的咒语,假设您在bash或具有大括号扩展的其他shell上:apt-cache rdepends --no- {建议,冲突,breaks,replaces,enhances} --installed --recurse $ package

–akavel
2015年11月2日,10:59

#2 楼

通过在终端(Applications -> Accessories -> Terminal)中键入以下命令,可以找到关于为什么要安装某些软件包的快速简短说明:例如,键入aptitude why libgoo-canvas-perl将输出以下内容:

aptitude why <package-name>


这基本上意味着在这种情况下,软件包shutter建议安装libgoo-canvas-perl。通过输入aptitude why shutter,我可以走到依赖关系链。我经常注意到aptitude发现了可能不是实际情况的最合理的解释,但是尽管如此,它仍可以为您提供进一步了解的线索。默认情况下,不会自动安装软件包。但是,它无法通过shutter编辑屏幕截图而使我对“体验”的记忆犹新,这导致我手动安装了libgoo-canvas-perl。通过运行以下命令,从软件包管理系统强制查看(查看您要求安装的其他软件包的依赖关系和建议)。

i   shutter Suggests libgoo-canvas-perl


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

aptitude show <package-name>


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

要了解何时安装了特定软件包,有2个选项:Synaptic软件包管理器维护所有活动的历史记录日志。若要查看历史记录日志文件,请从“文件”菜单中选择“历史记录”。您可以搜索ligbgoo-canvas-perl(注意大小写)以列出有关安装的所有条目。但是,这只会显示使用Synaptic安装的软件包


在终端中运行以下命令。这将在dpkg日志中搜索安装历史记录条目。但是,保留这些日志的最大数量是最大限制,因此,如果要查找的软件包是很久以前安装的,则可能找不到。更多详细信息

Automatically installed: no




评论


如果要了解何时安装或升级了软件包,请执行以下命令:zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep“ \安装\ | \升级\”

–克里斯·古德(Chris Good)
2015年7月31日,0:19



@ChrisGood:您可以在没有智能引号的情况下重新输入评论,所以它是可复制/可粘贴的吗?

– Dan Dascalescu
17年1月25日在16:51

感谢您指出了这一点。使用正确的双引号:zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep“ \安装\ | \升级\”

–克里斯·古德(Chris Good)
17年1月25日在23:48

#3 楼

是的,您可以,实际上,这是一个非常明显的命令。假设您已经安装了智能软件,则可以打开“终端窗口”广告类型:

aptitude why package


这将给出依赖于特定软件包的软件包列表。如果是手动安装的软件包,则会显示类似“找不到安装软件包的原因”之类的信息。

#4 楼

这是一种不依赖aptitude的简单方法,默认情况下不会再发行10.10版本。
以图形方式
打开Synaptic并尝试将其删除。删除其他程序包,这些程序包是(递归)依赖于此的程序包。依靠它。 (-s参数告诉apt-get并未实际删除软件包。)

评论


这是一个冒险的解决方案,因为如果它们单击不正确,它实际上可能会删除软件包和所有依赖项。

–想象中的机器人
2010-10-10 15:41

@ImaginaryRobots,这是很多误点击。 (您必须在第一个对话框中单击“确定”,然后单击“应用”,然后再次在确认对话框中单击“确定”。)对于终端版本,如果键入-s,还会有一个额外的y / N确认请求。我添加了一个警告。

– Badp
2010-10-10 15:44



-1,因为在查看软件包属性时,此信息在Synaptic的“依赖关系”选项卡下可用。

–alexanderpas
2010-10-29 22:46

@alex错误-该对话框不会告诉您该软件包是手动安装还是自动安装。 PS:收件箱计数器重置,请更加努力。

– Badp
2010-10-29 22:52



@badp否,但是该信息可以在主屏幕上的“已安装(手动)”状态过滤器中找到,并且在选择软件包时可以在软件包菜单中看到。

–alexanderpas
2010-10-29 23:42