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

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

我正在寻找与这个问题类似的内容:Zypper:如何显示来自某个存储库的所有包?

因为我使用的是 Ubuntu,所以我需要一个基于能力的解决方案:如何获取已安装来自特定存储库的软件包?

答案1

使用 aptitude 来查找稳定分支之外的已安装软件包,您可以使用:

aptitude search "?narrow(?installed,?not(?archive(stable)))"

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

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

如需更多格式,请参阅手册页(这里有文档可用选项)。

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

您可以通过 查看已安装的包来自哪里apt-cache policy,用法如下:

apt-cache policy <package-name>

例如,我的 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

这意味着我比当前 sid/main 分支落后一个版本,所以我安装的是旧 sid 版本。我发现我没有稳定版本,因为它还没有稳定1.4.1-5,而我目前处于稳定状态1.6.2-1

提交时此包已经更新:)

答案2

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

aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'

或同等学历):

aptitude search '~S ~i (!~Atesting ~Aunstable)'

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

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

aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))'

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

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

答案3

检查来源标签(例如o=Debian)针对您当前的每个存储库:

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

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

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

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

答案4

我发现了这个:

aptitude search "?origin (<repository>) ?installed"

您还可以找到“aptitude search”支持的搜索词列表这里

相关内容