如何递归地列出 apt 软件包的依赖项及其安装版本?

如何递归地列出 apt 软件包的依赖项及其安装版本?

我想列出给定包的递归依赖项,其中当前安装的每个依赖项的版本。我还希望每一行都有一个条目,这样它就可以排序和区分。

基本上,假设tcpdump,我希望输出如下所示:

libtext-wrapi18n-perl: 0.06-7
perl-base: 5.14.2-21+deb7u2

...ETC。每行的确切格式并不重要,重要的是区分和排序的能力。

问题列出 APT 中已安装软件包的(递归)依赖项类似,但不提供包版本。使用debfoster -d看起来很有希望,但其输出不适合进一步处理。

答案1

已经提供的两个答案都有其优点和缺点。

从 开始debfoster给出了一个易于解析的包列表,因此以下给出了请求的结果:

apt-cache policy $(debfoster -q -d tcpdump|tail -n +2)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

使用tail跳过第一行并awk在单个操作中处理结果。 (使用命令替换可以避免处理换行符。)开始debfoster意味着我们只能使用已经安装的包来执行此操作,因此我们可以使用来dpkg提供更多信息:

dpkg -l $(debfoster -q -d tcpdump|tail -n +2)

从 开始apt-rdepends给出了一个比较难处理的包列表,并且有重复项;但它的优点是能够处理尚未安装的包:

apt-cache policy $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)|awk '/^[^ ]/ { package=$0 } /  Installed/ { print package " " $2 }'

这也可以与以下命令一起使用dpkg -l

dpkg -l $(apt-rdepends -p tcpdump 2>| /dev/null|awk '/Depends/ {print $2}'|sort -u)

但这需要dpkg了解所有涉及的包,如果未安装正在处理的包,情况可能并非如此。

debfosterRecommends默认包含;可以使用以下方法禁用此功能--option UseRecommends=no

debfoster -q --option UseRecommends=no -d tcpdump

apt-rdependsRecommends默认不包含;可以使用以下命令启用此功能-f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends -p tcpdump

尽管它没有给出debfoster在这种情况下找到的所有依赖项。 (例如,debfosterfindtcpdump依赖于aptvia libssl1.0.0debconfand apt-utils,但apt-rdepends不依赖于 via 、 and 。)

答案2

下面的命令集似乎可以做到这一点:

debfoster -q -d tcpdump |
 sed -n '1!p' |
 tr -s ' ' |
 xargs |
 tr '\n' ' ' |
 xargs -I _ -d ' ' -n 1 sh -c "echo  _: \"\$(apt-cache policy _ | grep '  Installed: ' | sed -e 's/  Installed: //')\""

这使用:

  • debfoster打印(递归)依赖关系
  • sed删除第一行
  • tr折叠多余的空间
  • xargs修剪前导和尾随空格
  • tr删除尾随换行符
  • xargs到:
    • echo包名
    • 用于apt-cache policy查找已安装的版本(以及grepsed来提取版本本身。

它生产:

apt-utils: 1.0.1ubuntu2.6
debconf: 1.5.51ubuntu2
debconf-i18n: 1.5.51ubuntu2
dpkg: 1.17.5ubuntu5.3
gcc-4.8-base: 4.8.2-19ubuntu1
[...etc...]

如果有人能找到简化此操作的方法,请告诉我。

答案3

海报写道(在评论中):

我想要 tcpdump 依赖的所有包,以及它们的所有依赖项,以及它们的所有依赖项,等等。

apt-rdepends做这个。注意:“rdepends”中的“r”表示“递归”。

apt-rdepends -p tcpdump
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tcpdump
  Depends: libc6 (>= 2.7) [Installed]
  Depends: libpcap0.8 (>= 1.0.0) [Installed]
  Depends: libssl0.9.8 (>= 0.9.8m-1) [NotInstalled]
libc6
  Depends: libc-bin (= 2.11.3-4) [Installed]
  Depends: libgcc1 [Installed]
libc-bin
libgcc1
  Depends: gcc-4.4-base (= 4.4.5-8) [NotInstalled]
  Depends: libc6 (>= 2.2.5) [Installed]
gcc-4.4-base
libpcap0.8
  Depends: libc6 (>= 2.7) [Installed]
libssl0.9.8
  Depends: debconf (>= 0.5) [Installed]
  Depends: debconf-2.0 [NotInstalled]
  Depends: libc6 (>= 2.7) [Installed]
  Depends: zlib1g (>= 1:1.1.4) [Installed]
debconf
  Depends: debconf-english [NotInstalled]
  Depends: debconf-i18n [Installed]
  PreDepends: perl-base (>= 5.6.1-4) [Installed]
debconf-english
  Depends: debconf [Installed]
debconf-i18n
  Depends: debconf [Installed]
  Depends: liblocale-gettext-perl [Installed]
  Depends: libtext-charwidth-perl [Installed]
  Depends: libtext-iconv-perl [Installed]
  Depends: libtext-wrapi18n-perl [Installed]
liblocale-gettext-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  PreDepends: perl-base (>= 5.10.0-25) [Installed]
  PreDepends: perlapi-5.10.0 [NotInstalled]
perl-base
  PreDepends: dpkg (>= 1.14.20) [Installed]
  PreDepends: libc6 (>= 2.4) [Installed]
dpkg
  PreDepends: coreutils (>= 5.93-1) [Installed]
  PreDepends: libbz2-1.0 [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
  PreDepends: xz-utils [Installed]
  PreDepends: zlib1g (>= 1:1.1.4) [Installed]
coreutils
  PreDepends: libacl1 (>= 2.2.11-1) [Installed]
  PreDepends: libattr1 (>= 2.4.41-1) [Installed]
  PreDepends: libc6 (>= 2.6) [Installed]
  PreDepends: libselinux1 (>= 1.32) [Installed]
libacl1
  Depends: libattr1 (>= 2.4.41-1) [Installed]
  Depends: libc6 (>= 2.2.5) [Installed]
libattr1
  Depends: libc6 (>= 2.2.5) [Installed]
libselinux1
  Depends: libc6 (>= 2.3.4) [Installed]
libbz2-1.0
  Depends: libc6 (>= 2.3) [Installed]
xz-utils
  Depends: libc6 (>= 2.6) [Installed]
  Depends: liblzma2 (>= 5.0.0) [NotInstalled]
liblzma2
  Depends: libc6 (>= 2.2.5) [Installed]
zlib1g
  Depends: libc6 (>= 2.2.5) [Installed]
perlapi-5.10.0
libtext-charwidth-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-iconv-perl
  Depends: libc6 (>= 2.2.5) [Installed]
  Depends: perl-base (>= 5.10.0-13) [Installed]
  Depends: perlapi-5.10.0 [NotInstalled]
libtext-wrapi18n-perl
  Depends: libtext-charwidth-perl [Installed]
debconf-2.0

相关内容