有没有办法找出软件包在 Debian 上是如何安装的?
看看它是否是手动安装的,或者哪个软件包将其作为依赖项拉取。
该信息应该在某处可用(例如,为了apt-get autoremove
工作)但我不确定如何显示单个包。
答案1
例如使用 Aptitude:
$ aptitude show gimp linux-headers-3.2.0-2-686-pae
Package: gimp
New: yes
State: installed
Automatically installed: no
<snip>
Package: linux-headers-3.2.0-2-686-pae
New: yes
State: installed
Automatically installed: yes
<snip>
这显示了我的系统上的两个示例包。“自动安装“字段显示它是否是手动安装或通过依赖项拖入。
正如您所怀疑的,APT 可以获取此信息。根据您喜欢使用的工具,它会出现在不同的地方,但它很可能被称为“自动安装”,并带有“是/否”值。
拖入特定包的特定包的信息
您可以使用apt-rdepends
(在主存储库中可用)列出包的前向或后向依赖项。示例:
$ apt-rdepends -rp --state-follow=Installed \
--state-show=Installed linux-headers-3.2.0-3-686-pae
Reading package lists... Done
Building dependency tree
Reading state information... Done
linux-headers-3.2.0-3-686-pae
Reverse Depends: linux-headers-686-pae (3.2+45) [Installed]
linux-headers-686-pae
(前两行是单个命令,为了便于阅读而分开)。
这表明linux-headers-3.2.0-3-686-pae
被 拖入linux-headers-686-pae
,而 又对我的系统没有任何反向依赖关系。查看man apt-rdepends
以了解可用的开关。
更新:稍微扩展一下:知道这一点其实没什么用。确切地哪个包A拖入包裹乙,因为包C这也取决于乙可能已经安装了,因此删除A不应该/不会删除乙.apt-rdepends
在这种情况下会列出A和C取决于乙但没有表明是否A或者C最初负责安装乙。
答案2
使用 aptitude 我发现它的操作why
非常有用。
例如,我想知道为什么我screen
的系统上有:
$ aptitude why screen
i byobu Depends screen
但为什么byobu
?
$ aptitude why byobu
Unable to find a reason to install byobu.
byobu
是手动安装的。