コマンド
md5sum
ファイルや文字列のメッセージダイジェスト (チェックサム) を求める
md5sum コマンドは、主に Linux において、ファイルや文字列の MD5 メッセージダイジェストを求めるコマンドである。
GNU が配布している textutils に含まれている。動作は md5 コマンドと全く同じ。
●md5sum コマンドの基本的な使い方
ファイルの MD5 値を取得するには下記のようにする。
% md5sum file.txt
3c6adcb79006dc3bfec714aec0de7199 flie.txt
標準入力から読ませても同じである。
% md5sum < file.txt
3c6adcb79006dc3bfec714aec0de7199 -
% cat file.txt | md5sum
3c6adcb79006dc3bfec714aec0de7199 -
文字列の MD5 値を取得するには下記のようにする。
% echo -n hoge | md5sum
ea703e7aa1efda0064eaa507d9e8ab7e -
下記だと "hoge(改行)" の MD5 値を取得してしまうことに注意。
% echo hoge | md5sum
c59548c3c576228486a1f0037eb16a1b -
echo コマンドの改行抑止の差異については下記を参照。
md5sum コマンドは複数ファイルに対して MD5 値を求めることができる。
% md5sum *.txt
b3416952d45f2882d41923ac83d62acd sample1.txt
88e79eb363b8e433e9bba8fd5e5757cd sample2.txt
●シェルスクリプトでの md5sum コマンド
sh・bash スクリプト内での md5sum コマンドの使い方 (エラー処理付き) を以下に示す。md5sum コマンドの出力ではファイル名が邪魔であるが、どうやら md5sum コマンドには MD5 値のみを出力するようなオプションはないようである。よって、${var%%[パターン]} にてスペース以降を削除している。
#!/bin/sh
file="sample.txt"
md5result=`md5sum < $file`
ret=$?
if [ $ret != 0 ]; then
echo "エラー発生。終了します"
exit 1
fi
# スペース以降を削除
md5result=${md5result%% *}
echo "md5 is [$md5result]"
bash であれば、下記のように配列に突っ込んで 0 番目だけを使う手もある。
#!/bin/bash
file="foo.txt"
md5result=($(md5sum $file))
ret=$?
if [ $ret != 0 ]; then
echo "エラー発生。終了します"
exit 1
fi
echo "md5 is [$md5result]"
●md5sum コマンドのオプション
▷ -t または --text
テキストモードでファイルを読み込むが、UNIX/Linux においてはテキストモード・バイナリモードという区別がそもそもないので付ける意味はない (Windows 等では違いが出る)。
▷ -b または --binary
バイナリモードでファイルを読み込むが、UNIX/Linux においてはテキストモード・バイナリモードという区別がそもそもないので付ける意味はない (Windows 等では違いが出る)。
●関連コマンド
FreeBSD の場合は md5 コマンドを使うとよい。また、openssl dgst コマンドでもメッセージダイジェストを生成できる。
% echo -n hoge | openssl dgst -md5
ea703e7aa1efda0064eaa507d9e8ab7e
⇒ 文字列 hoge の MD5 値を表示
% openssl dgst -sha1 file.txt
31f30ddbcb1bf8446576f0e64aa4c88a9f055e3c
⇒ ファイル file.txt の SHA1 値を表示