危うくプログラムを自分で書きそうになったところ*1、便利なコマンドが既にあるわけで 様々なハッシュ アルゴリズムが用意されていますが、とりあえず、よく使うであろう MD5 と SHA1 だけでも覚えておくと便利かもしれません。CRC32 もあると便利だったのに。
一つ以上のファイルをまとめて指定できます。
$ md5sum file1.txt file2.txt file3.txt >files.md5 $ cat files.md5 e7b37f993271bcecbc5d0acac01b5511 file1.txt ecb6d3479ac3823f1da7f314d871989b file2.txt e894a56c64e73e3bcbaf72f9fb8ff3d9 file3.txt $ sha1sum file1.txt file2.txt file3.txt >files.sha1 $ cat files.sha1 96f76d144bfec0b5d41e97ed4285bdc84180c719 file1.txt 58f0551b43a154655db68d9065aeedf6cb192856 file2.txt 79d58526d0e0bf4df4f01b383ed3f49c428aaa2a file3.txt
これが地味に便利そう。-c オプションに計算済みのハッシュ値とファイル名のリストを与えると、これを照合します。
$ md5sum -c files.md5 # または $ cat files.md5 |md5sum -c file1.txt: 完了 file2.txt: 失敗 file3.txt: 完了 md5sum: 警告: 1 個の計算したチェックサムが一致しませんでした
文字列などのデータ列からハッシュ値を計算する場合、コマンドの標準入力にパイプします。下記のように echo
を無指定で使うと、文字列の末尾に改行コードが入るためハッシュ値が違ってきますので注意。
$ echo "Hello" |sha1sum # 文字列+改行コード 1d229271928d3f9e2bb0375bd6ce5db6c6d348d9 - $ echo -n "Hello" |sha1sum # 末尾の改行コードを除いた場合 f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 -
-c オプションを指定した際に与えられるハッシュ値とファイル名のリストですが、ファイル内容をいじってカット&エラーしてみたところ、書式に関して幾つか制限があるようです。
# コメント # 空白が先行するコメント行 96f76d144bfec0b5d41e97ed4285bdc84180c719 success.txt 96f76d144bfec0b5d41e97ed4285bdc84180c719 file1.txt 96f76d144bfec0b5d41e97ed4285bdc84180c719 file1.txt 58f0551b43a154655db68d9065aeedf6cb192856 file2.txt 79d58526d0e0bf4df4f01b383ed3f49c428aaa2a file3.txt # comment
#
で始まる行は、コメント行として無視されます。#
の前に空白やタブが先行する場合、書式が不適切として警告されます。#
を続けてコメントを書いても、それを含めたファイル名のファイルを開こうとしてエラーになります。
書式に融通がほとんどきかない感じ。まぁ、#
でコメントを書き足すくらいに留め、あまり派手には弄らない方が良いでしょう。