是否有可能确定软件包是如何在 Debian 上安装的?

是否有可能确定软件包是如何在 Debian 上安装的?

有没有办法找出软件包在 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在这种情况下会列出AC取决于但没有表明是否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是手动安装的。

相关内容