パッケージと依存関係の識別

パッケージと依存関係の識別

インストールされているパッケージのリストがあり、aptすでにリストにある他のパッケージの依存関係であるすべてのパッケージを削除したいと思います。

https://gist.github.com/rubo77/bd9183fe2794467f482c

これらのパッケージは400を超えるが、ほとんどはこのリストの他のパッケージのためにインストールされました。

このリストの範囲を絞り込み、このリストの本当に興味深い主要プログラムにどのように固執できますか?

何とかこれを使用する必要があります:aptで特定のパッケージに依存するパッケージを見つける方法は?

それとも、楽しいプログラムと基本プログラムと一緒にインストールされている小さなヘルパーパッケージを区別するより簡単な方法はありますか?

答え1

次のコードは、$package_nameリストの一部のパッケージが依存するパッケージのリストを印刷します。dpkg -sインストールされているパッケージリストのデータを使用するために入力を渡すか、apt-cache show利用可能なパッケージリストのデータを使用するために入力を渡すことができます。このコードは、PACKAGE1 | PACKAGE2インポートする項目を決定する方がはるかに複雑であり、実際に大きな違いを生むことはないので、すべてのOR依存関係()をスキップします。

dpkg -s $package_names | awk -F '[:,] *' '
    $1=="Depends" || $1=="Recommends" {
        for (i=2; i<=NF; i++) {
            if ($i ~ /\|/) continue;
            sub(/ .*/, "", $i);
            print $i
        }
    }'

ファイルをフィルタリングするには、Packages次のawkスニペットを使用できます。

<Packages awk -v RS= -v packages="$package_names" '
    BEGIN {split(packages, pa)}
    $2 in pa
' | awk -F '[:,] *' '…'

これで、パッケージリストを含むテキストファイルがあると仮定すると、他のパッケージの依存関係であるパッケージを次のように削除できます。

comm -23 <(sort packages.txt) <(apt-cache show $(cat packages.txt) |
                                awk -F '[:,] *' ' '…' |
                                sort)

入力リストにあるが依存関係で見つからなかったパッケージが出力されます。

答え2

apt-getまた、aptitude依存関係によって自動的にインストールされたパッケージを追跡します。少なくとも適性では、依存関係によってインストールされていないすべてのパッケージを一覧表示できますaptitude search '!~M'

残念ながら、これは通常、システムのインストール中にインストールされたパッケージには含まれません。また、apt-get install引数として渡したすべてのパッケージに対して「自動インストール」フラグを削除します。これは、パッケージをそのようにアップグレードしたい場合でも、パッケージを明示的にインストールしたいと仮定するためです。

バラより適性を使用してサイレントインストールとしてマークされていないライブラリを見つける方法に関する私のブログ投稿"autoinstall"フラグが欠落しているパッケージを見つける方法の詳細。

答え3

apt-cache depends package(依存関係の場合)またはapt-cache rdepends package(逆方向依存関係の場合)を使用できます。

関連情報