完全なLinuxシステムの比較

完全なLinuxシステムの比較

デフォルトのLinuxシステムがインストールされています。システム全体のさまざまな部分を大幅に変更する非常に大きくて複雑なサードパーティのスクリプトを実行したいと思います。これらの変更には、新しいファイルの追加、既存のファイルの変更、および既存のファイルの削除が含まれます。スクリプトが完了すると、変更されたシステムがあります。変化は広範囲で実質的であろう。

追加、削除、または変更されたすべてのファイルの一種のレポートと修正を1行ずつ分析したいと思います。ファイル比較ツールの出力のようなものが良いでしょう。

スクリプトを実行する前にある種のスナップショットを撮ってから、2番目のスナップショットを撮る必要があるとします。私はこれらのスナップショットを一種のdiffまたはdiffのようなツールに入力すると仮定します。

どのツールを使用する必要があり、システム全体を区別する方法を知っている人はいますか?

私はVirtualboxを使用しています。差分画像機能、私がこの目的に適応できるかどうかはわかりません。また、可能であれば、より一般的な解決策を好みます。

答え1

私はあなたのアイデアが解決策から遠くないと思います。 1つの可能なアプローチを簡単に説明すると、次のようになります。rsnapshotバックアップに使用します。 (たとえば)/backup/hourly.1/...などのエントリポイントを使用して、すべてのファイルまたはファイルサブセットのディレクトリ(バックアップ)構造を作成します/backup/hourly.0/...。ここでは、各ブランチはデータ全体を渡しますが、変更されていないファイルには(ハード)リンクを使用します。両方の構造に対して再帰またはls比較を実行しfind、出力を比較(検索する場合はソート)すると欠落しているファイルが表示され、リンク数(ls -l2番目の列になる)を確認すると新しいファイル(リンク数1)が表示されます。ファイルの変更の詳細については、(識別されたファイルに対して)一般的なツールを使用できますdiff。言ったように、これは概要であり、実装には少しの作業が必要で、明確ではない欠点がある可能性があるため、この提案を無視してください。

答え2

ページの場所は次のとおりです。Linuxのレシピ修正前後の find-grep を表示し、diff を表示します。これは非常に簡単で出発点になりますが、指摘されたより複雑なソリューションを使用すると、問題をよりよく解決できます。

これは修正ではなく、追加と削除だけをキャッチするようです...乾杯、drl

答え3

これらの答えはすべて正しい方向、同じ方向に進みます。 8ビットを入れても構いません...

virtualboxにプライマリシステムをインストールします。初期設定と基本が準備されたら、追加のライブメディアを使用して仮想マシンを起動します。その後、揮発性ディレクトリを含まずにファイルシステムを圧縮またはエクスポートできます/proc

大規模なスクリプトを実行し、エクスポート処理を繰り返します。

これで2つのファイルシステムが利用できるため、さまざまな比較ツールを使用できます。

diff --brief -Nr /tree1 /tree2

では、他のファイルのクールなリストと1つのstdoutツリーまたは別のツリーに見つからないファイルのリストを提供しますstderr

実際にどのような変更が発生したかを調べるには、さまざまなstdoutファイルの出力を解析し、diffそのファイルに対して個別に一般的なタスクを実行して出力をファイルにリダイレクトできます。あるいは、リストをチェックし、特に興味のあるファイルに対してdiffを実行することもできます。

を使用して、これらすべてを1つのコマンドにまとめることができますgit。リポジトリを初期化せずに動作し、任意の2つのディレクトリを指すだけです。 Less でページ化された美しいカラー出力を提供します。

git diff --no-index /tree1 /tree2

答え4

diffを実行するために使用できるlibguestfsというものがあります。これは私が過去に使用していたもので、今はこれが組み込まれているので、guestfishシェルを使用する必要はないと思います。

別のオプションは、Dockerコンテナでタスクを実行し、結果のファイルツリーをtarファイルにエクスポートして比較することです。

ただし、スクリプトがダミーファイルに作成してシステム設定を変更する場合、その変更はファイルツリーに表示されず、その変更をキャプチャするには他のものが必要になることに注意してください。同様の例がiptableルールです。これらの変更をキャプチャするには、カスタムロジックが必要です。

関連情報