![Debian はインストールされたパッケージのリストをどこに保存しますか?](https://rvso.com/image/192238/Debian%20%E3%81%AF%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E3%81%A9%E3%81%93%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
Debian (Armbian) サーバーがダウンする前にインストールされていたパッケージのリストを見つける必要があります。オフラインなので、apt
またはdpkg
(または他のコマンド) は使用できません。どのファイルリストが含まれています (バイナリであっても)。検索してみましたが、すべて前述のコマンドを実行するように指示されているだけで、これはオプションではありません。
答え1
/etc および /var のバックアップから `dpkg --get-selections` を近似するにはどうすればよいですか?あなたの根本的な懸念に対処します。
インストールされたパッケージのリストは に保存されます/var/lib/dpkg/status
。 行を探しますStatus: install ok installed
。これは、パッケージが正しくインストールされていることを示します。
次の AWK 呼び出しは、ファイルからインストールされたパッケージ名を抽出しますstatus
。
awk '/^Package:/ { package = $2 }
/^Status: install ok installed/ { print package }' /path/to/status
システムが複数のアーキテクチャをサポートしている場合は、それも追跡する必要があります。
awk '/^Package:/ { p = $2; i = 0 }
/^Status: install ok installed/ { i = 1 }
i && /^Architecture: all/ { print p; next }
i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status
もう一つの興味深いファイルは、/var/lib/apt/extended_states
インストールされたパッケージの「自動インストール」フラグを記録するファイルです。フラグを復元するには、次のように実行します。
awk '/^Package:/ { p = $2 }
/^Architecture/ { a = $2 }
/^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto
両方のファイルを組み合わせて手動でインストールされたパッケージを一覧表示し、依存関係管理を利用して自動的にインストールされたパッケージをインストールすることができます (ただし、必ずしも同じパッケージ セットがインストールされるわけではありません)。
awk 'FNR == NR && /^Package:/ { p = $2 }
/^Status: install ok installed/ { i = 1 }
FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
FNR != NR && /^Package:/ { p = $2 }
FNR != NR && /^Architecture:/ { a = $2 }
/^Auto-Installed: 1/ { delete ps[p ":" a] }
END { for (p in ps) print p }' /path/to/status /path/to/extended_states
「ファイル」セクションを参照してくださいman dpkg
:
/var/lib/dpkg/ステータス
利用可能なパッケージのステータス。このファイルには、パッケージが削除対象としてマークされているかどうか、インストールされているかどうかなどの情報が含まれています。