我有一组(源)URI,分布和部分在我的 Debian Wheezy apt 配置中启用。现在我想要所有已安装软件包的列表,以及每个软件包的源 URI、“发行版”和“部分”,每个软件包的当前安装版本都是从中安装的。
我基本上是在寻找类似输出的内容dpkg -l
,但它会显示源 URI、分布和部分,而不是描述。就像是:
||/ Name Version Arch InstalledFrom
+++-==========-=================-=====-===================
ii package1 1:4.14-1.1+deb7u1 amd64 ftp://ftp.se.debian.org/debian wheezy main
ii package2 1.7-1 all ftp://ftp.se.debian.org/debian wheezy/updates main
ii package3 1.0.25+3~deb7u1 all ftp://ftp.se.debian.org/debian wheezy non-free
ii package4 0.9.8~3 amd64 local
ii package5 7.2.107 i386 local
我怎样才能获得这样的软件包列表?
良好的格式将是一个额外的好处,但大多数情况下,我可以grep
为有趣的行子字符串(甚至只是浏览)做任何事情。
答案1
另外apt-cache policy
,描述于布赖安的答案,您可以使用apt-show-versions
和apt-forktracer
。
apt-show-versions
默认情况下会列出所有已安装的软件包及其来源、版本以及是否可以升级;例如
afl:amd64/experimental *manually* upgradeable from 1.28b-1 to 1.36b-1
agedu:amd64/testing 9723-1 uptodate
devio:armhf 1.2-1 installed: No available version in archive
使用该-a
选项,它会列出已安装的版本以及您配置的所有存储库中的所有可用版本:
afl:amd64 1.28b-1 install ok installed
No stable version
No testing version
No unstable version
afl:amd64 1.36b-1 experimental ftp.fr.debian.org
afl:amd64/experimental *manually* upgradeable from 1.28b-1 to 1.36b-1
agedu:amd64 9723-1 install ok installed
No stable version
agedu:amd64 9723-1 testing ftp.fr.debian.org
agedu:amd64 9723-1 unstable ftp.fr.debian.org
No experimental version
agedu:amd64/testing 9723-1 uptodate
apt-forktracer
列出不是来自标准存储库或其安装版本与标准存储库中可用的版本不匹配的软件包:
afl (1.28b-1) [Debian: 1.36b-1]
bb (1.3rc1-8.2) [Debian: 1.3rc1-8.1+b1 1.3rc1-8.1+b1]
biew (5.7.3.1-0.1) [SK2: 5.7.3.1-0.1]
答案2
我发现自己把不同答案的片段拼凑在一起,特别是Braiam 的和穆鲁的。最后,我得到了这个 oneliner,这让我足够接近开始,我应该能够弄清楚其余的事情:
dpkg-query --showformat '${Package}\n' -W | \
while read package; do \
apt-cache policy $package | grep -q wheezy/non-free && echo $package ; \
done
apt-cache policy
上面列出了所有报告来自 wheezy/non-free的包的名称(不完全准确,但目前足够接近)。通过调整脚本对apt-cache policy
输出的处理方式,虽然它不会采用良好的表格格式(至少是开箱即用的),但应该可以相当接近我所追求的结果。
感谢所有提供帮助的人!
答案3
您正在寻找apt-cache policy
输出:
➜ ~ apt-cache policy skype
skype:i386:
Installed: 4.3.0.37-1
Candidate: 4.3.0.37-1
Version table:
*** 4.3.0.37-1 0
100 /var/lib/dpkg/status
➜ ~ apt-cache policy irssi
irssi:
Installed: 0.8.17-1
Candidate: 0.8.17-1
Version table:
*** 0.8.17-1 0
900 http://http.debian.net/debian/ testing/main amd64 Packages
500 http://http.debian.net/debian/ unstable/main amd64 Packages
100 /var/lib/dpkg/status
➜ ~ apt-cache policy megasync
megasync:
Installed: 1.0.39
Candidate: 1.0.39
Version table:
*** 1.0.39 0
500 http://mega.nz/linux/MEGAsync/Debian_7.0/ ./ Packages
100 /var/lib/dpkg/status
在这种情况下,安装的 Skype 版本无法从任何存储库(包括本地安装)获得,irssi 是从 Debian 存储库安装的,而 megasync 是来自第三方存储库的。
答案4
-l
是选项之一dpkg-query
,其中还有另一个选项-W
(或--show
)。-W
允许使用选择输出格式。你可以试试:
dpkg-query --showformat '${Status}\t${Package}\t${Version}\t${Architecture}\t${Origin}\t${Section}\n' -W |
column -ts $'\t'
例如:
$ dpkg-query --showformat '${db:Status-Abbrev}\t${Package}\t${Version}\t${Architecture}\t${Origin}\t${Section}\n' -W | column -ts $'\t' | head
ii account-plugin-aim 3.8.6-0ubuntu9.1 amd64 gnome
ii account-plugin-facebook 0.11+14.04.20140409.1-0ubuntu1 all gnome
ii account-plugin-flickr 0.11+14.04.20140409.1-0ubuntu1 all gnome
ii account-plugin-google 0.11+14.04.20140409.1-0ubuntu1 all gnome
ii account-plugin-jabber 3.8.6-0ubuntu9.1 amd64 gnome
ii account-plugin-salut 3.8.6-0ubuntu9.1 amd64 gnome
ii account-plugin-twitter 0.11+14.04.20140409.1-0ubuntu1 all gnome
ii account-plugin-windows-live 0.11+14.04.20140409.1-0ubuntu1 all gnome
ii account-plugin-yahoo 3.8.6-0ubuntu9.1 amd64 gnome
ii accountsservice 0.6.35-0ubuntu7.1 amd64 admin
URI 未知dpkg
,因为这是前端 ( apt
) 关注的问题。不过,使用awk
或获取它应该不那么困难。