对于一个特定的软件包,我能否查看它为何被安装?
所以,我能否看到它是手动安装的,还是作为其他软件包的依赖项安装的?或者它是作为发行版的一部分安装的?
所以,我能否看到它是手动安装的,还是作为其他软件包的依赖项安装的?或者它是作为发行版的一部分安装的?
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
--recurse
选项以列出所有直接或间接依赖于它的软件包。apt-cache rdepends --recurse $package
可能会返回太多的软件包。我建议添加 --installed
选项来限制只返回已安装的软件包。-i
选项将限制返回与先决条件和依赖关系相关的软件包。但是,某个软件包可能被另一个软件包推荐而被安装。为了包括这些推荐相关的软件包,我认为以下命令可以得到正确的结果:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
。 - jarnoapt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
。 - akavel应用程序 -> 辅助工具 -> 终端
),可以快速简短地解释为什么安装了特定的软件包。aptitude why <package-name>
aptitude why libgoo-canvas-perl
。例如,键入aptitude why libgoo-canvas-perl
会输出以下内容:i shutter Suggests libgoo-canvas-perl
shutter
建议安装libgoo-canvas-perl
。然后通过键入aptitude why shutter
,我可以追溯依赖关系链。shutter
建议安装libgoo-canvas-perl
- 然而,默认情况下并不会自动安装建议的软件包。尽管如此,这提醒了我无法使用shutter
编辑截图的“体验”,于是我手动安装了libgoo-canvas-perl
最后,您可以通过运行以下命令来查看软件包是否被自动安装(也就是由软件包管理系统根据您要求安装的其他软件包的依赖关系和推荐项来决定)aptitude show <package-name>
Automatically installed: no
欲知详情,请运行info aptitude
(在终端中)或访问Aptitude wiki page页面。
要找出特定软件包的安装时间,有两个选项:
Synaptic软件包管理器会维护所有活动的历史记录。要查看历史记录文件,请从文件菜单中选择“历史记录”。您可以搜索Install
(注意大小写)以列出所有与安装相关的条目。然而,这只会显示使用Synaptic安装的软件包。zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install\ |\ upgrade\ "
。 - Chris Goodapt-get remove package_name_goes_here -s
-s
参数告诉apt-get
不要真正删除该软件包。)-s
时打错字,还会有额外的y/N
确认请求。不过我已经添加了一个警告。 - badpapt-get
和-s
标志运行,您不需要root权限。我经常以有限用户身份运行apt-get -s remove ...
。看起来是这样的。 另一方面,apt-get(8)确实说我“可能没有读取所有apt配置扭曲模拟”。我长期以来假设在正确配置且权限设置合理的系统上,这不太可能成为问题,前提是没有同时进行其他软件包管理操作(正如输出所警告的)。你知道吗? - Eliah Kaganapt-get remove -s
解决方案表示赞同。如果你需要用它来清理嵌入式设备,你肯定不想先安装18 MB的aptitude
和相关依赖! - Philipposaptitude why package