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

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

インストールされているパッケージのリストがあり、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)

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

おすすめ記事