osxで使えるsha1sumをrubyで実装してみた
checksumをするのにsha1を使う場合Linuxではsha1sumを使うけど、OSXにはこのコマンドがありません。
そこでsha1chkなるツールを作ってみました。
仕様はwikipediaにあるsha1sumの説明を参考にして、rubyのDigest::SHA1で実装。
ダウンロードは以下から。(早速チェックサムとってみたw)
download sha1chk.tgz
SHA1 Checksum: 117b91cdde66d2ce0a59fbf247a118f6943d7fb3
インストール
今のところインストーラのようなものはないので適当にパスを通してもらえればコマンドとして利用できます。
たとえばこんな感じで。sha1chkを~/Downloadsにダウンロードした前提で。
$ mkdir ~/tool
$ mv ~/Downloads/sha1chk.tgz ~/tool/
$ tar xzvf ~/tool/sha1chk.tgz
$ chmod 755 ~/tool/sha1chk
$ sudo ln -s ~/tool/sha1chk /usr/local/bin/sha1chk
テスト
取ってきたsha1chk.tgzのダイジェストを取ってみて以下のように表示されていればOK
$ sha1chk ~/tool/sha1chk.tgz
117b91cdde66d2ce0a59fbf247a118f6943d7fb3
使い方
さっさと使いたい方は
$ sha1chk --help
を読んでください。
【使用法1】ファイルのチェックサムを取得する
オプションなしでファイルを引数に渡すとダイジェストを返します。
$ sha1chk somefile
da39a3ee5e6b4b0d3255bfef95601890afd80709
一応、サイズの大きなファイルにも対応しているつもりです。
(MacBookメモリー2G上で7Gのイメージファイルをテストしました。時間はかかるけど問題なく動作)
【使用法2】.sha1ファイルの利用
OSのイメージファイルなんかではsha1ファイルが用意されているケースもあります。
チェック対象のファイルが同階層にある前提で動作します。
$ ls
somefile
somefile.sha1
この前提でsomefileのダイジェストとsomefile.sha1に書いてある値を比較します。
$ sha1chk -c somefile.sha1
somefile OK
一致する場合はOK。一致しない場合はNG。
【使用法3】文字列からsha1ダイジェストを取得する
最後に文字列からsha1のダイジェストを取得する方法です。もともとsha1sumでは対話モードで実装されているらしいのですが、sha1chkではオプションを付け対話式ではない機能として実装しました。
$ sha1chk -c somestring
da63fb69aeb03c776bd23e91e2c1cb3df30135d3
まとめ
irbでささっとやれることをわざわざツールとして実装してみたのですが、やってみるとoptparseや大きなファイルを扱う処理を実装できて面白かったです。ツールとしても普通に使えるモノになってると思います。気が向いたら使ってみてください。
Posted at Sunday, April 27th, 2008comment (0) | trackback | category: ruby


