会社のプライベートaptリポジトリからインストールされているパッケージのリストを取得しようとしています。
これは働きます:
#!/bin/bash
fqdn=$1
for pkg in $(dpkg-query --show | awk '{print $1;}'); do
if apt-cache showpkg $pkg | grep -q $fqdn; then
echo $pkg
fi
done
ただし、〜3466()パッケージがインストールされているシステムでそれを実行するにはdpkg -l | wc -l
1分45.812秒かかります。 「インストールされたパッケージをローカルで検索」がユーザーに表示されるのに時間がかかりすぎます。
もっと良い方法がありますか?
私は交互に行を読み取ろapt-cache showpkg
うとします。これはCLIインターフェイスが不安定で15分35.913秒かかるという警告です。apt show
APT-Sources:
答え1
パッケージを繰り返さないでください。
dpkg -l | awk '/^ii/ { print $2 }' | xargs apt-cache showpkg |
awk "/^Package:/ { package = \$2 } /$1/ { print package }" | uniq
私のシステムはこれに数秒かかり、6,000を超えるパッケージをインストールして/var/lib/apt
直接使用しません。
いくつかの制限があります。特にどんなアイテムなのか確認しません。バージョン現在インストールされているバージョンはリポジトリで使用でき、Debianはパッケージが実際にインストールされているリポジトリを確認する方法を提供しません。
答え2
これは必要です0m3.654s
が、使用されます/var/lib/apt
。
#!/bin/bash
fqdn=$1
for pkg in $(dpkg-query --show | awk -F "[ \t:]" '{print $1;}'); do
if grep -q "Package: $pkg" /var/lib/apt/lists/${fqdn}_*_Packages; then
echo $pkg
fi
done
私はこれが/var/lib/apt
内部的であることを知っapt
ているのでapt
、実装を変更してスクリプトを中断するオプションがあります。このようなことが起こる可能性は低いですが、起こることがあります。代わりに、一般的にapt
ツールを使用してこのデータにアクセスすることをお勧めします。