`dpkg -i`相当のワンライナー
目次
インストール済みのパッケージ一覧を得るには、/var/lib/dpkg/info/*
を調べれば良い。
ディスクイメージからインストール済みのパッケージ一覧を取得する必要があり、そのためにワンワイナーを作成しました。
パッケージ情報
dpkg -i
が実際に何を見ているのか分かりませんが、/var/lib/dpkg/info
ディレクトリに各パッケージのファイル一覧が書かれたファイルなどが置かれています。
インストール済みのパッケージ名は、*.list
というファイルから得られます。また一度インストールされた後に削除remove
されたパッケージは、*.list
のみで*.md5sums
というファイルが無くなっています。
そこで*.list
と*.md5sums
の両方が有るパッケージを探すことで、インストール済みのパッケージ一覧を取得できます。
ワンライナー
インストール済みのパッケージ一覧
ls /var/lib/dpkg/info/* | grep -e '\.list$' -e '\.md5sums$' | sed -e 's/\/var\/lib\/dpkg\/info\///' -e 's/\.list$//' -e 's/\.md5sums$//' | sort | uniq -c | grep '^\s*2 ' | sed -e 's/^\s*2 //'
インストール済みのパッケージは*.list
と*.md5sums
の両方あるので、拡張子を削除すると同じ basename が 2 つ出てきます。そこで、basename を数えて二つ有る basename を抜き出します。
削除したパッケージも一覧に含める
dpkg -i
のように削除したパッケージ名も一覧に含めるには、basename の数でインストール済みか削除済みかをマークします。
ls /var/lib/dpkg/info/* | grep -e '\.list$' -e '\.md5sums$' | sed -e 's/\/var\/lib\/dpkg\/info\///' -e 's/\.list$//' -e 's/\.md5sums$//' | sort | uniq -c | sed -e 's/^\s*2 /ii /' -e 's/^\s*1 /rc /'