对于特定的软件包,我可以找出为什么安装了它吗?
那么,我可以看到它还是它是手动安装的,还是作为另一个软件包的依赖项安装的?还是将其作为发行版的一部分安装?
对于特定的软件包,我可以找出为什么安装了它吗?
那么,我可以看到它还是它是手动安装的,还是作为另一个软件包的依赖项安装的?还是将其作为发行版的一部分安装?
Answers:
一种快速的解决方案是在终端中输入以下命令:
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
选项以列出直接或间接依赖于此的所有软件包。
apt-cache rdepends --recurse $package
可能提供了太多的包裹。我将添加--installed
选项以限制安装的软件包。-i
option限制于依赖前和依赖相关的程序包。但是可能安装了一个软件包,因为另一个软件包建议这样做。为了包括与建议相关的软件包,我认为这将给出正确的软件包:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
通过在终端(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
我可以走依赖链。
但是,有一个警告。我经常注意到aptitude为这种情况找到了最合理的解释,虽然可能不是实际情况,但仍然可以为您提供进一步了解的线索。
就我而言,shutter
建议libgoo-canvas-perl
-但是,默认情况下不会自动安装建议的软件包。但是,由于无法编辑屏幕截图,shutter
这使我对“体验”的记忆犹新,导致我手动安装ligbgoo-canvas-perl
最后,您可以通过运行以下命令来确定是否已自动安装软件包(由软件包管理系统根据您要求安装的其他软件包的依赖性和建议来确定是否强制安装)。
aptitude show <package-name>
这将输出如下一行(输出的第三行):
Automatically installed: no
有关更多信息,请运行info aptitude
(在终端中)或访问Aptitude Wiki页面
要了解何时安装了特定的软件包,有两个选项:
Install
(注意大小写)以列出有关安装的所有条目。但是,这只会显示使用Synaptic安装的软件包在终端中运行以下命令。这将在dpkg日志中搜索安装历史记录条目。但是,保留这些日志的最大数量是最大限制,因此,如果要查找的软件包是很久以前安装的,则可能找不到。在这里更多细节
zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
是的,您可以,实际上,这是一个非常明显的命令。假设您已经安装了智能软件,则可以打开“终端窗口”广告类型:
aptitude why package
那应该给出依赖于该特定软件包的软件包列表。如果是手动安装的软件包,则会显示类似“找不到安装软件包的原因”之类的内容。
这是一种不依赖的简单方法,aptitude
默认情况下不会再发布10.10。
打开Synaptic,然后尝试将其删除。
如果弹出对话框要求您删除其他软件包,则这些(递归地)依赖于这些软件包。
apt-get remove package_name_goes_here -s
同样,结果将要删除的软件包是所有(递归)依赖于此的软件包。(该-s
参数告诉apt-get
您实际上并未删除软件包。)
y/N
如果您键入错误,还需要额外的确认请求-s
。我添加了一个警告。