Linuxシステム全体の比較


8

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

追加、削除、または変更されたすべてのファイルに関する何らかのレポートと、変更の行ごとの分析が必要です。ファイル差分ツールの出力のようなものが素晴らしいでしょう。

スクリプトを実行する前に何らかのスナップショットを作成し、その後に2番目のスナップショットを作成する必要があると思います。次に、それらのスナップショットをある種のdiffまたはdiffのようなツールにフィードするとします。

使用するツールとシステム全体を比較する方法を知っている人はいますか?

差分画像機能を備えたVirtualboxを使用していますが、この目的に適応できるかどうかはわかりません。さらに、可能であれば、より一般的なソリューションを使用します。


差分画像(別名スナップショット)は、あなたが探しているものではありません。彼らの目標は、詳細なテキスト差分ではなく、可能な限り小さなバイナリ差分を生成することです。
Dmitry Grigoryev 2015

@DmitryGrigoryevそれは私がリンクから得た印象です。確認していただきありがとうございます。

実際、あなたが望むものは非常に簡単ですが、達成するのは複雑です。リソースを考慮して、2つのシステムをまったく同じようにインストールします。ファイルが変更されるシステムでファイルシステム監査を有効にします。監査からレポートを取得して、何が追加/変更/削除されたかを特定します。次に、これらのファイルを他のインストール済みシステムと比較します。
BitsOfNix 2015

1
を使用rsyncして、スナップショットを作成し、変更後に別のファイルを実行して、変更されたファイルのレポートを生成できます。差分部分はおそらくもっと難しいでしょう。
FloHimself 2015

回答:


1

あなたの考えは解決策からほど遠くないと思います。可能な方法の概要を説明します。私はrsnapshotバックアップに使用しています。ファイルのすべてまたはサブセットのディレクトリ(バックアップ)構造を作成します。エントリポイントは(例)/backup/hourly.1/...および/backup/hourly.0/...で、各ブランチはデータ全体を持ちますが、変更が行われていないファイルには(ハード)リンクを使用します。 。再帰的lsまたはfind両方の構造を実行し、(findの場合はソートされた)出力を比較すると、不足しているファイルが表示され、リンク数(ls -l2列目)を調べると新しいファイル(リンク数がある)が表示されます1)。(識別されたファイルに対して)使用できるファイルの変更の詳細については、通常のdiffツール。これは概要であると述べたように、実装にはいくつかの作業が必要であり、明らかでない癖があるかもしれないので、塩の粒でその提案を取る


0

私はおそらくコメントの1つで示唆されているようにrsyncを使用してこれを行うでしょう。Rsyncには予行モードとチェックサム機能があり、変更点の正確なレポートを作成できます。

それをさらに進めると、変更されたファイルの差分を実行するスクリプトを書くことができますが、バイナリファイルを回避する必要があります(方法はわかりません)。

または、まったく異なるアプローチをとることもできます。gitを使用します。したがって、「ベース」システムで/でgit initを実行してから、サードパーティの処理を実行した後、次のようにします。

git status > /tmp/changed-files.txt
git diff > /tmp/changes.txt

gitを使用すると、かなりの柔軟性が得られます。システム全体で苦労する可能性があり、/ procなどについて混乱する可能性があると述べました。


0

libguestfsと呼ばれるものを使用して、diffを実行できます。それは私が過去に使用したもので、今では操作が組み込まれているかもしれないので、guestfishシェルを使用する必要がないと思います。

もう1つのオプションは、Dockerコンテナーで操作を実行し、結果のファイルツリーをtarファイルとしてエクスポートして差分をとることです。

ただし、スクリプトが仮想ファイルに書き込むことによってシステム設定を変更した場合、それらの変更はファイルツリーに表示されず、それらの変更をキャプチャするには別のものが必要になることに注意してください。そのようなものの例は、iptableルールです。これらの変更をキャプチャするには、カスタムロジックが必要です。


ルールは永続的であれば、ネットワークが起動後にそれが再実行/再有効にすることができますので、それはなど、どこかに保存しなければならない場合を除き
ivanivan

0

Linuxクックブックのページには、変更前と変更後のfind-grepと、それに続く差分が表示されています。それは非常に単純です。それは出発点かもしれませんが、あなたの問題は、より洗練された解決策を指摘することでよりよく対処されるかもしれません。

これは追加と削除のみをキャッチし、変更はキャッチしないようです...乾杯、drl


0

これらの答えはすべて正しい方向に向かっています。私の8ビットを投入することもできます...

virtualboxにベースシステムをインストールします。初期セットアップとベースの準備ができたら、他のライブメディアでvmを起動します。次に、/proc関与するような揮発性のディレクトリなしで、ファイルシステムをtarまたはその他の方法でエクスポートできます。

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

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

diff --brief -Nr /tree1 /tree2

で異なるファイルstdoutの一覧と、でツリーまたはその他のツリーで見つからないファイルの一覧が表示されますstderr

実際に行われた変更を確認するにstdoutは、異なるファイルの出力を解析し、diffそれらに対して個別に定期的に実行して、出力をファイルにリダイレクトします。または、リストを調べて、特に関心のあるファイルに対してdiffを実行することもできます。

を使用して、これらすべてを1つのコマンドに組み合わせることができgitます。リポジトリを初期化せずに使用でき、任意の2つのディレクトリを指定するだけです。少ないページ番号でページ分けされた素敵な色の出力を提供します。

git diff --no-index /tree1 /tree2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.