シェル:チェックサムの代わりにコンテンツファイルを比較する

シェル:チェックサムの代わりにコンテンツファイルを比較する

両方のファイルの内容を比較する必要があります。どちらも3番目のアプリケーションによって生成されます。

このファイルはファイルのように見えますenv

VAR1=VAL1
VAR2=VAL2
VAR3=VAL3
...

問題は、時にはアプリケーションが以下を生成することです。

VAR2=VAL2
VAR1=VAL1
VAR3=VAL3
...

私はこれをmd5sumチェックサム付きのファイルを生成し、それをcmp比較するために使用します。

したがって、内容は同じですが、チェックサムは異なります。

この問題を解決する方法についてのアイデアはありますか?

ベストアンサー1

ファイルに定数の割り当てのみが含まれている場合は、最初に並べ替えることができます。プロセス代替の使用 (Bash/zsh):

cmp <(sort foo) <(sort bar)

(あるいはいつもcmp -sのように)

標準シェルを使用する必要がある場合は、一時ファイルが必要です。

a=$(mktemp) b=$(mktemp)
sort foo > "$a"; sort bar > "$b"
cmp "$a" "$b"
rm "$a" "$b"

それにもかかわらず、意味を変更せずにファイルの行を並べ替えることができることを確認する必要があります。複数行の文字列はソートによって破損し、他の変数を参照する割り当てがある場合は割り当て順序も重要です。

ハッシュが必要な場合は、次のようにします。

cksum1=$(sort foo | sha256sum)
cksum2=$(sort bar | sha256sum)

ただし、ローカルで比較を実行している場合は、ファイルを直接比較しても問題にならない可能性があります。ファイルが同じであることを確認するには、ファイル全体を読み取る必要があり、cmp見つかった場合は早く停止できるからです。あなたができない違いsha256sum

ファイルが別のコンピュータにある場合は、ハッシュを渡す方が簡単です。ただし、可能であれば、MD5 (*)の代わりにSHA-256(上記のように)またはSHA-512を使用することをお勧めします。busybox実装されているのでsha256sum得ることもできます。

もちろん、プロセスの置き換えも一時ファイルに依存する可能性があるため、直接比較するには並べ替えられた一時ファイルが同時に必要ですが、ハッシュはそうではありません。ただし、これはファイルをコピーするときにシステムの記憶領域を使用するのに十分なファイルがある場合にのみ意味があります。

(* MD5は衝突を引き起こす可能性があるという弱点があることが知られていますが、SHA-2ハッシュはより強いと見なされます。MD5を使用できるユースケースがありますが、詳細によって異なり、安全装置が最適です。)

おすすめ記事