次の一部のファイルを削除しました/var/lib/dpkg/
。
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
私はDebianがインストールされているパッケージに関するいくつかの情報を保存するためにこのファイルを使用することを知っています。これを行うと、apt-get update
次のエラーが発生します。
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
私が知る限りFHS、見つかったファイルは/var
システムにとって重要ではありません。評価者は一時ファイル、ログ、キャッシュなどでなければなりません。
それでは、削除されたファイルを再作成する方法はありませんか?
答え1
見たらファイルシステム階層標準で指定された/varの目的、それは言う:
/var
可変データファイルを含みます。これには、スプールディレクトリとファイル、管理およびロギングデータ、一時ファイルと一時ファイルが含まれます。
「一時的および一時的な」ファイルはただ一つ含まれている内容。また、「スプールディレクトリとファイル」と「管理およびロギングデータ」も含まれています。重要な「管理データ」を削除しました。
続いて/var
それが存在する理由を説明します。
/var
/usr
読み取り専用でマウントできるようにここで指定します。/usr
インストールとソフトウェアのメンテナンスとは異なり、システムの操作中に作成されたすべての内容は/var
。
キーは/var
次のとおりです/usr
(ソフトウェアが追加/削除/更新されたときにのみ変更されます)。
さまざまなサブディレクトリは他のセクションで説明されています/var
。たとえば、/var/lib
(一度削除したファイルが存在した場合)、「プログラムの実行中に変更され、対応するデータ」として定義された「アプリケーションまたはシステムに関連する状態情報」が含まれます。特定のマシンに関連しています。「ホスト関連」。
あなた本物目的を知らずにファイルを削除しないでください。削除したファイルはバックアップしておかない限りバックアップ/home
などをして再インストールするしかないようです/etc
。そうしないと、そのサービスdpkg
(およびAPTなど)は利用できません。それ以外の場合は、システムが機能し続ける必要があります。
答え2
見つかったファイルは/var
システムにとって非常に重要です。たとえば、ユーザーの電子メールを含める/var/mail
か/var/spool/mail
、近隣のメールボックスを点灯させるよりも削除しません。特定のサブディレクトリ内のファイルには/var
かなり一時的なファイルが含まれます。のログファイル/var/log
、で通常再生成することができるキャッシュ/var/cache
、の一時ファイル(使用中に削除しないでください!)/var/tmp
。
入力したデータは/var/lib
重要かもしれません。たとえば、MySQLは/var/lib/mysql
デフォルトでデータベースを保存するように設定されていることがよくあります。これを削除すると、データベースが消去されます。 Dpkgには/var/lib
独自のデータベースもあります/var/lib/dpkg/status
。
/var/lib/dpkg/status
インストールされたパッケージに関する情報が含まれています。削除した場合は、バックアップから復元する必要があります。バックアップが完全に最新でない場合は、/var/log/apt
最近のパッケージジョブログを確認してください/var/log/dpkg.log
。dpkg
これを行うには、まずこのファイルを作成する必要があります。
/var/lib/dpkg/available
インターネットからダウンロードしたデータで作成されました。apt-get update
再建する必要があります。
/var/lib/dpkg/info
Debianパッケージに含まれるファイルが含まれています。パッケージを再インストールすると、これらのファイルを復元できます。もちろん、インストールされたパッケージのリストが必要です。すでに復元している場合は、/var/lib/dpkg/status
そこからパッケージのリストを抽出できます。
apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')
ファイルを紛失した場合は、空のファイルを作成し、/var/lib/dpkg/status
パッケージapt-get install --reinstall
リストから実行して再作成できます。パッケージリストを保存できる場所の1つは、/var/lib/apt/extended_states
少なくともAPTを使用してパッケージをインストールした場合(直接インストールではない)、上記のintコマンドのdpkg
代わりにそのファイルを使用することです。このアイテムも削除した場合、ほとんどのパッケージでアイテムが生成されるため、/var/lib/dpkg/status
おおよそのパッケージリストの再構築を使用できます。いくつかの例外があるかもしれません。$(cd /usr/share/doc && ls)
/usr/share/doc
このシステムのパッケージ管理に関する支援を求めないでください。削除されたシステムの重要なファイルを回復することは正確な科学ではありません。バックアップから復元できない場合は、できるだけ早くクリーンな新しいシステムをインストールする必要があります。
答え3
「再作成」コマンドを実行できず、ファイルが魔法のように見え/var/lib/dpkg/status
ます。いいえ、ファイルのバックアップを使用し、/var/lib
ディレクトリの内容を絶対に削除しない方法を学ぶ必要があります。
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
これにより、前日のパッケージのステータスが表示されます。それが他のものを壊さないように祈り始めます。
答え4
誰かが "/var/lib/dpkg"をヌッキングする場合:
sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives
sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch
sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.