使用 aptitude 查找从某个存储库安装的软件包

Bol*_*wyn 42 repository packages aptitude

我正在寻找类似于这个问题的东西:Zypper:如何显示某个存储库中的所有包?

由于我使用的是 Ubuntu,因此我需要一个基于 aptitude 的解决方案:如何从某个存储库中获取已安装软件包的列表?

小智 18

在阅读了 aptitude 的信息页面和十几次尝试后,我终于得到了这个:

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
Run Code Online (Sandbox Code Playgroud)

或同等学历):

aptitude search '~S ~i (!~Atesting ~Aunstable)'
Run Code Online (Sandbox Code Playgroud)

它将搜索从任何存储库的不稳定档案中安装的软件包;您必须从默认存档中过滤掉包(在上面的示例中进行测试)。

如果要过滤从www.debian-multimedia.org/unstable以下位置安装的软件包:

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))'
Run Code Online (Sandbox Code Playgroud)

编辑:
Release存储库的文件中扣除“存档”、“来源”等,但不幸的是,并非所有工具都可以查看所有这些行,并且它们使用不同的语法。您可以在 找到这些文件/var/lib/apt/lists/*Release,或者只需键入apt-cache policy即可获得概览。apt-cache更改了其输出格式 - 更高版本使用apt_preferences样式。

  • Suite:Archive:(旧名!)
    • 能力搜索:?archive(___)~A___
    • 资质格式: %t
    • apt_preferences: release a=___
    • Ubuntu 示例:natty-backports, trusty-security,stable
  • Origin:
    • 能力搜索:?origin(___)~O___
    • 资质格式:不适用
    • apt_preferences: release o=___
    • Ubuntu 示例:Canonical, Google, Inc., LP-PPA-dockbar-main,Ubuntu
  • 所有其他线路
    • 资质:不适用


ssi*_*ice 18

使用 aptitude,为了在稳定分支之外寻找已安装的软件包,您可以使用:

aptitude search "?narrow(?installed,?not(?archive(stable)))"
Run Code Online (Sandbox Code Playgroud)

要查看版本以及包名称(而不是描述),您可以使用带有格式选项(-F简称)的命令,如下所示。

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
Run Code Online (Sandbox Code Playgroud)

有关更多格式,请查看联机帮助页(这里是包含Avail.options的文档)。

例如,如果您在 Squeeze 之外安装了软件包(例如,通过运行apt-get install -t sid package-name.

可以通过 via 查看安装包的来源apt-cache policy,用法如下:

apt-cache policy <package-name>
Run Code Online (Sandbox Code Playgroud)

例如,我的 python-numpy 包呈现以下输出:

$ LANG=C apt-cache policy python-numpy
python-numpy:
  Installed: 1:1.6.2-1
  Candidate: 1:1.6.2-1.2
  Version table:
     1:1.7.0-1 0
          1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
     1:1.6.2-1.2 0
        500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
 *** 1:1.6.2-1 0
        100 /var/lib/dpkg/status
     1:1.4.1-5 0
        990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)

这意味着我是当前 sid/main 分支的一个版本,所以我安装了一个旧的 sid 版本。我看到我还没有稳定版,因为它是1.4.1-5,而我目前在1.6.2-1.

在提交时,这个包已经更新了:)


小智 17

检查每个当前存储库的源标记(例如o=Debian):

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
Run Code Online (Sandbox Code Playgroud)

然后搜索来自(或不来自)特定来源的包:

aptitude search "?installed?origin(Debian)"
Run Code Online (Sandbox Code Playgroud)
aptitude search "?installed?not(?origin(Debian))"
Run Code Online (Sandbox Code Playgroud)

适合安全审计,因为它依赖于每个存储库提供自己的来源信息,但它可能有助于对多个存储库中存在的包的来源进行故障排除。

  • 你的“能力搜索”模式不好。– 他们像这样选择“列出安装了一个版本的软件包,并且在 Debian 中存在任何其他版本”或“安装了某个版本,并且该软件包的至少一个版本在非 Debian 上可用”。– 我们寻找的是“安装的版本来自 Debian(或不是)”。这必须通过`?narrow()` 或`?any-version()` 来完成。 (3认同)

Bol*_*wyn 6

为了完整性:在 Ubuntu 系统上,您也可以使用 Synaptic 来完成此任务。在左栏中,您可以按来源过滤包。