UNIX/Linuxの部屋 md5sumコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド 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 値を表示
>> Linuxオンラインマニュアル(man) Linux md5sum(1)