Bashからディレクトリのチェックサムを取得する

Bashからディレクトリのチェックサムを取得する

私は知りたいです:

  1. md5sumのようなものを使ってディレクトリのチェックサムを生成できますか?
  2. ディレクトリ内の各ファイルに対して繰り返しチェックサムを作成して印刷できますか?
  3. それとも両方?

バッシュを使っています

答え1

md5sumただし、ディレクトリは入力として使用されません。

 tar cf - FOO | md5sum

チェックサムが適用され、FOOでファイルが変更されると、チェックサムも変更されますが、どのファイルなのかについてのヒントはありません。ファイルメタデータが変更されると(権限、タイムスタンプなど)、チェックサムも変更されます。

以下を使用することを検討できます。

 find FOO -type f -exec md5sum {} \;  > FOO.md5

各ファイルを個別に md5 し、結果を FOO.md5 に保存します。これにより、どのファイルが変更されたかを簡単に確認できます。このバリエーションは、メタデータではなくファイルコンテンツにのみ依存します。

答え2

ZFSはこれらのチェックサムを生成しますが、これは内部でのみ使用されます。

オブジェクトのチェックサムを計算するには、オブジェクトを読み取る必要があります。これはディレクトリでは不可能です。

多くのファイルシステムは、(2)ディレクトリを読み取ろうとするとEISDIRエラーを返し、ZFSはさらにディレクトリの「サイズ」をバイト数ではなくディレクトリのエントリ数に設定します(2)ディレクトリ)。

一部のファイルシステムでまだread(2)ディレクトリを許可しているという事実はバグです。 readdir() 呼び出しがなかった 1970 年代のバグです。

注:私のWOFSにはファイル形式のコンテンツがないため、すべてのディレクトリのサイズは0です。ファイルのメタデータに「こんにちは、私はこのディレクトリにあります」と表示されているからです。 WOFSが何であるか疑問に思うなら、WOFSの他のすべての基本概念はZFSにマージされました。

答え3

1. ディレクトリに md5sum が必要なのはなぜですか?ファイルの一貫性および/または整合性を確保するために、ファイルを圧縮してファイルのハッシュを作成できtarますtar.gz

2. サブディレクトリがあれば、もう少し難しいです。ファイルのみがある場合は、次の例を試してください。

#!/bin/bash

for i in /home/{username}/Books/rhel/; do
  md5sum "$i"
done

出力例:

dd7a684cc8668d208ca5dcf00bc58e8d  Red_Hat_Enterprise_Linux-6-Deployment...
775602071a1ec5a1ac1a99cee9d065fa  Red_Hat_Enterprise_Linux-7-High_Av..

答え4

存在するhttps://blake2.net/彼らは次のように主張します。

「BLAKE2は暗号化ハッシュ関数です。急いでMD5、SHA-1、SHA-2、SHA-3よりも優れていますが、少なくとも安全なほど最新規格SHA-3。 BLAKE2は、高速、安全性、シンプルさのため、多くのプロジェクトで採用されています。 」

したがって、いくつかのツールはrmlintのようにそれを使用しています。https://github.com/sahib/rmlint

とにかくフォローしてくださいhttps://unix.stackexchange.com/a/228758/9689、次のこともできます。

find "${dirname}"/ -type f -exec b2sum -b -l 256 {} \;  > "${dirname}".blake2sum_l256

次に、次の点を確認してください。

b2sum -c "${dirname}".blake2sum_l256

または、次のように失敗した項目を確認してください。

b2sum --quiet -c "${dirname}".blake2sum_l256

関連情報