web-dev-qa-db-ja.com

bash上のディレクトリのチェックサムを取得する

私は考えていた:

  1. (md5sumのようなものを使用して)ディレクトリのチェックサムを作成することは可能ですか?
  2. Dir内の各ファイルのチェックサムを再帰的に作成して(それを印刷して)することは可能ですか?
  3. または両方?

私はbashを使用しています

2
drigler

md5sumは、入力としてディレクトリを取りませんが、

 tar cf - FOO | md5sum

ファイルがFOO内の任意の場所で変更された場合、チェックサムは変更されますが、どのファイルのヒントはありません。ファイルのメタデータ(権限、タイムスタンプなど)が変更されると、チェックサムも変更されます。

あなたは使用を検討するかもしれません:

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

これにより、すべてのファイルが個別にmd5され、結果がFOO.md5に保存されます。これにより、どのファイルが変更されたかを簡単に確認できます。このバリアントは、メタデータではなく、ファイルの内容にのみ依存します。

2
Archemar

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

ZFSはそのようなチェックサムを作成しますが、これは内部使用のみです。

オブジェクトからチェックサムを計算するには、このオブジェクトを読み取る必要があります。ディレクトリの場合、これは許可されていません。

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

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

ところで:私のWOFSでは、ファイルタイプのコンテンツがないため、すべてのディレクトリのサイズは0です。これは、ファイルがメタデータで「ねえ、私はこのディレクトリにいます」と言っているためです。 WOFSとは何か疑問に思われる場合は、WOFSの他のすべての基本概念がZFSに組み込まれています。

0
schily

1.ディレクトリにmd5sumが必要なのはなぜですか?ファイルの一貫性や整合性を確認したい場合は、それをtarして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..
0
obohovyk