【问题标题】:Debian packages: distinguish "requested install" from "installed to satisfy dependencies"Debian 软件包:区分“请求安装”和“安装以满足依赖关系”
【发布时间】:2009-11-06 09:13:06
【问题描述】:

我如何确定安装了哪些软件包,因为我请求了安装以及为了满足依赖关系而自动安装了哪些软件包?

在 aptitude 中,此信息显示为“A”:

i A fam         ...
i   grub        ...
i A grub-common ...

这表明我请求了 grub 软件包,因此安装了 grub-common。但是,aptitude 是一个交互式程序,我无法自动提取此信息以使用脚本对其进行处理。

使用 debian 包管理工具 'dpkg -l' 或 'dpkg --get-selections',我可以获得已安装包的列表以及附加信息。例如

> dpkg -l
...
ii  grub                                 0.97-47lenny2              GRand Unified Bootloader (Legacy version)
ii  grub-common                          1.96+20080724-16           GRand Unified Bootloader, version 2 (common files)
ii  gs-common                            8.62.dfsg.1-3.2lenny1      Dummy package depending on ghostscript
...

这个列表可以很容易地用脚本处理,但它只显示包已安装——不管是通过请求还是依赖项。

【问题讨论】:

    标签: debian


    【解决方案1】:

    确实可以用所谓的搜索模式调用能力搜索;请参阅http://algebraicthunk.net/~dburrows/projects/aptitude/doc/en/ch02s03s05.html#tableSearchTermQuickGuide 的参考资料 search ~i 产生已安装的软件包。使用 grep 丢弃带有 A 的包会得到未自动安装的包,因此它几乎回答了最初的问题。

    但它包含属于原始发行版的软件包,因此没有完全整理出来。就我而言,它仍然是 1500 个包裹,我可以处理。

    应该可以通过搜索组合来实现,我没挖,这里是我的命令:

    aptitude search ~i|grep -v '^i A'|
    

    grep -v 丢弃依赖包

    【讨论】:

    • 非常感谢!我用 !~M 过滤掉自动安装的包。我通过运行此搜索来处理原始发行版在安装其他软件包之前:稍后,我可以从结果列表中删除这些软件包。
    【解决方案2】:

    Aptitude 也可以作为仅命令行、无 gui 的程序运行。试试:

    aptitude search grub
    

    信息会在那里。

    【讨论】:

    • 太棒了!我对此进行了深入研究,发现“aptitude search ~M”将列出所有自动安装的软件包。
    【解决方案3】:

    Apt 支持精确描述这一点的“自动”标志。

    查看http://man.he.net/man8/apt-mark 并在需要时深入挖掘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2014-06-24
      • 2012-01-18
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多