アメリエフの技術ブログ

Amelieff Staff Blog

ファイル内容の一字一句完全一致を一瞬でチェック

ネットから変異データベースなどの大容量ファイルをダウンロードした時や、HDDからデータを移動した時、データ破損なくダウンロードできているか不安になりませんか?
あるいは、書き換えがあっては困るデータに対して、経時的に何回も改変有無をチェックしたいことはありませんか?

  • オリジナルファイルとコピーファイル
  • ネット上のファイルとダウンロードしたファイル
  • 過去のファイルと現在のファイル
  • 圧縮前のファイルと解凍後のファイル
    などでファイル同士の内容の同一性を確かめたい。そして何より、目視確認の手間と不正確さからは逃れたい!

そんなあなたにおすすめなのが、linuxコマンドの md5sum です。
md5sum は、ファイルのハッシュ値を算出・比較するコマンドです。

ハッシュ値とは?
文字列から、ある決まった計算手法によって導かれる値です。
決まった計算手法なので、同じ文字列からは必ず同じ値が導かれます。
ファイル内容の同一性を確かめるには、各ファイルに書かれた文字列(アルファベット、漢字、数字、0/1など何でも)のハッシュ値を照合すれば良いのです。

md5sum の使い方をいくつかご紹介します。

md5sumの使い方(基本)
md5sum は、引数に指定されたファイル内の文字列について、ハッシュ値計算手法の一種であるMD5によるハッシュ値を表示します。

$ md5sum original.txt  
a76289353e865de26911a266a564b632d original.txt  

この a76289353e865de26911a266a564b632d がハッシュ値です。
ファイルを複数並べれば全てのハッシュ値を同時に表示します。

$ md5sum original.txt original_copied.txt  
a76289353e865de26911a266a564b632d original.txt  
b94e143127614029862f41177f61939b4 original_copied.txt  

これらを見比べて一致していれば文字列も完全一致、してなければ不一致です。

md5sumの使い方(ダウンロード後チェック)
変異データベースなどはダウンロードファイルのMD5ハッシュ値も公開していることがあります。
例えば、こちらはClinVarのダウンロードファイルが置かれているサイトですが……
f:id:miya-y:20181207144119p:plain clinvar_20181028.vcf.gz のMD5ハッシュ値が clinvar_20181028.vcf.gz.md5に書かれています。
中はこのように、ハッシュ値とファイル名になっています。

512318a04638225668b26ccc2cee50be  clinvar_20181028.vcf.gz  

こういったファイルの名前はサイトによりまちまちですが、 (ダウンロードファイル名).md5 md5sum.txt などであることが多いですね。

MD5ハッシュ値のファイルも配布されている場合、一緒にダウンロードしておくと良いことがあります。
md5sum コマンドにより、ネット上のファイルとダウンロードしたファイルで、ハッシュ値の計算のみでなく比較まで自動で済ませられるのです。
ダウンロードしたファイルとMD5ファイルを同じディレクトリに置き、 -c オプションでMD5ファイルを指定します。
すると、ネット上のファイルとダウンロードしたファイル(のハッシュ値)の一致・不一致が表示されます。

$ ls  
clinvar_20181028.vcf.gz clinvar_20181028.vcf.gz.md5  
$ md5sum -c clinvar_20181028.vcf.gz.md5  
clinvar_20181028.vcf.gz: OK  

OKと出たなら、ダウンロード時にデータ破損はなかったと言えます。逆に、

$ md5sum -c clinvar_20181028.vcf.gz.md5  
clinvar_20181028.vcf.gz: FAILED  
md5sum: WARNING: 1 computed checksum did NOT match  

このように出たなら、おそらくダウンロードに失敗しています。

md5sumの使い方(圧縮・解凍後チェック、経時チェック)
-c オプションは、もちろん自分で作ったMD5ファイルに対しても使えます。
ファイルの現在のハッシュ値を控えておき、圧縮・解凍後、または将来などに、同一性を確認することができます。

$ md5sum sample.txt > sample.txt.md5
$ cat sample.txt.md5
0fe9878f295b10f222c0123799c27da6 sample.txt
  
一年後…  
  
$ md5sum -c sample.txt.md5
sample.txt: OK 

いかがでしたか?
バイオインフォでは大容量ファイルの転送などは日常茶飯事ですから、md5sum コマンドひとつ覚えておくととっても便利ですよ!
ぜひご活用ください。