`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 /'