如何在 Debian 中列出已安装的软件包以及源 URI、发行版和部分?

如何在 Debian 中列出已安装的软件包以及源 URI、发行版和部分?

我有一组(源)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-versionsapt-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或获取它应该不那么困难。

相关内容