我正在寻找与这个问题类似的内容: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_preferences
style。
Suite:
或Archive:
(旧名称!)- 能力搜索:
?archive(___)
或~A___
- 能力格式:
%t
- apt_preferences:
release a=___
- Ubuntu 示例:
natty-backports
,,trusty-security
stable
- 能力搜索:
Origin:
- 能力搜索:
?origin(___)
或~O___
- 能力格式:n/a
- apt_preferences:
release o=___
- Ubuntu示例:
Canonical
,,,Google, Inc.
LP-PPA-dockbar-main
Ubuntu
- 能力搜索:
- 所有其他线路
- 资质:无
答案3
检查来源标签(例如o=Debian)针对您当前的每个存储库:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
然后搜索来自(或不是来自)特定来源的包:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
这是不是适合安全审计,因为它依赖于每个存储库提供自己的来源信息,但它可能有助于排除存在于多个存储库中的包的来源故障。