是否可以确定一个软件包是如何安装在 debian 上的?

m00*_*000 3 debian package-management ubuntu apt

有没有办法找出软件包是如何安装在 Debian 上的?

即查看它是否是手动安装的或哪个包将其作为依赖项。

此信息应该在某处可用(例如用于apt-get autoremove工作),但我不确定如何为单个包显示它。

Dan*_*son 5

例如使用能力:

$ 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>
Run Code Online (Sandbox Code Playgroud)

这显示了我系统上的两个示例包。“自动安装”字段显示它是手动安装还是由依赖项拖入。

正如您怀疑的那样,此信息可供 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
Run Code Online (Sandbox Code Playgroud)

(前两行是单个命令,为了便于阅读而分开)。

这表明linux-headers-3.2.0-3-686-pae由 拖入linux-headers-686-pae,而后者对我的系统没有任何反向依赖关系。查看man apt-rdepends可用的开关。


更新:稍微扩展一下:确切知道哪个包A拖到包B 中并不是很有用,因为也依赖于B 的C可能已经安装了,因此删除A不应该/不会删除B。在这种情况下,将列出AC 都依赖于B,但没有给出AC最初负责安装B 的指示。apt-rdepends