APTにインストールされたパッケージの(再帰的な)依存関係を一覧表示する


17

インストールしたパッケージごとに、アンインストールするとどのパッケージがインストールされるかを知りたいと思います。必要な出力の例は(package: list of deps)です。

abc: foo bar
bcd: baz abc
bdd: baz fuubar

追記

pppを使用してパッケージを削除すると、実際に削除されるものを確認するとapt-get

$ echo $(apt-get --dry-run remove ppp | grep '^Remv ' | cut -d' ' -f2)
gnome-ppp mint-meta-xfce network-manager-pptp-gnome network-manager-pptp wvdial pppoeconf pppoe pptp-linux pppconfig ppp

私はそれがapt-cacheショーが私に与えるものとは異なることがわかります(再帰的な依存関係を含むとは思わない):

$ apt-cache show ppp | grep '^Breaks: '
Breaks: network-manager (<= 0.8.0.999-1), network-manager-pptp (<= 0.8.0.999-1), pppdcapiplugin (<= 1:3.9.20060704+dfsg.1-1)

追加2

dpkg --get-selections | cut -f1インストールされたパッケージのリストを取得して反復処理する信頼できる方法はありますか?


1
解析apt-get --dry-run removeは基本的に正しいようです。削除するパッケージにのみ必要な自動インストールパッケージにのみ必要な自動インストールパッケージが欠落する場合があります。それが適切な答えだと思わないのはなぜですか?
ジル「SO-悪であるのをやめる」

回答:


11

ここでいくつかの異なる質問をしましたが、少なくとも1つまたは2つは助けられると思います。

インストールされているすべてのパッケージをリストするdpkgには、フィールド区切りリストに出力するために使用します

dpkg -l 

追加のフィールドなしでパッケージリストを取得するだけで、他の場所にパイプできます。

dpkg -l | awk '{print $2 }' # Pipe to grep after the awk, or glob from dpkg

たとえば、古いカーネルを削除したい場合、

apt-get purge `dpkg -l linux* | awk '{print $2}' | grep 3.0.0-12`

不要な依存関係をすべて処理する最も簡単な方法は、debfosterです。対話的に実行され、必要なものとその依存関係を調べ、再帰的な依存関係ではないものを削除または一覧表示できます。

特定のパッケージのすべての再帰的な依存関係をリストするには、

debfoster -d $PACKAGE ## PACKAGE is the specific package.

実行後debfoster、パッケージに含まれる依存関係も確認できます。

debfoster -e $PACKAGE ## PACKAGE is the specific package.

「孤立した」パッケージをリストする本当に素晴らしい方法は、deborphanです。deborphanオプションなしで実行すると、すべての「孤立した」パッケージがリストされます。「孤立」とは、何も依存しないパッケージであり、明示的にインストールしていないパッケージです。

また、新規インストール後に、「孤立した」パッケージをすべて削除したいです。特定のパッケージを削除した後、あなたが見逃したものapt-get autoremove --purgeを手に入れることができます。

apt-get purge `deborphan`

最後に--purge、パッケージが「残り物」にならないことがありますが、の新しいバージョンでapt-getは自動的に削除されます。アンインストールしたパッケージからすべての「残り物」を削除するには、

apt-get autoclean

の新しいバージョンがない場合はapt-get、これらのコマンドでいつでも削除できます。「残り」のファイルが存在しない場合はエラーが発生しますが、autocleanは場合によってはいくつかを見逃すことがあります。

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs dpkg --purge

デブフォスターはまだ存在しますが、適性の機能に取って代わられたと見なされます
ジョシュアクレイトン

4
apt-cache show pkgname1 pkgname2...

(特に)これらの(実行時)依存関係をリストします。通常は、さらに処理するためにマシンにフィードしない限り、これで十分です。指定した形式どおりにしたい場合は、おそらくスクリプトを作成する必要があります。


申し訳ありませんが、質問を間違って作成しました。インストールしたパッケージごとに、どのパッケージがアンインストールされるかを知りたいです。また、インストールしたすべてのパッケージをリストする必要もあります。
削除

2
@削除:申し訳ありませんが、私は今までこのコメントを見ませんでした。「インストールしたパッケージごとにどのパッケージがアンインストールされるか」(パッケージごとにこの質問に答えてほしいと思います)に応答してくださいapt-get remove -s packagename。インストールしたすべてのパッケージのリストはただdpkg -lです。
ファヒームミタ

@FaheemMitha:古い投稿ですが、まだ素晴らしいヒントapt-get remove -s packagenameです!
twan163 14

@ twan163それはあなたにとって有用だった幸せ。
ファヒームミサ

1

私はあなたが続けて同じことのループを作成する必要があると思います:

apt-cache depends libtext-wrapi18n-perl |xargs apt-cache depends

もちろん、ヘッダーを削除します。


2
apt-cacheには再帰オプションがありますapt-cache depends --recurse libtext
ジョシュアクレイトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.