適切なパッケージの依存関係とインストールされたバージョンを再帰的にリストする方法は?

適切なパッケージの依存関係とインストールされたバージョンを再帰的にリストする方法は?

特定のパッケージの再帰依存関係をリストしたいと思います。現在インストールされている各依存関係のバージョンです。また、各行に項目があるので、ソートして区別できるようにしたいです。

tcpdump基本的に、出力が次のようになりたいとします。

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

...など。各行の正確な形式は重要ではなく、重要なことは区別して整列する能力です。

質問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この場合、見つかったすべての依存関係を提供するわけではありません。 (たとえば、debfosterfindはvia、andtcpdumpに依存しますが、via、andには依存しません。)aptlibssl1.0.0debconfapt-utilsapt-rdepends

答え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インストールされているバージョンを見つけ、バージョン自体を抽出するためにgrep使用されます。sed

それは次のものを生成します:

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これを行います。注:「rdependents」の「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

関連情報