私は20年近くプログラマとして飯を食べてます。
Linuxの知識もプロとして恥ずかしくない程度には持ち合わせているつもりです。
そんな私にもまだまだ知らないことは多いもので、
つい昨日、また知らないことに出くわしました。
「マジックナンバーファイル」です。
マジックナンバーファイルの説明の前に、まず file
コマンドの説明が必要です。
Linuxの file
コマンドはファイルの種類を調べるときに使うコマンドで、こんな風に使います。
$ file some_text_file
some_text_file: ASCII text
上の例ではファイルの種類がアスキーテキストだと教えてくれています。
そして、 file
コマンドがファイルの種類を特定するときに使うのがマジックナンバーファイルと呼ばれるものです。
マジックナンバーファイルは一般的には /usr/share/file/magic
ディレクトリに置かれていることが多いです。
そのディレクトリの中を見ると様々な種類のマジックナンバーファイルが存在することがわかると思います。
このマジックナンバーファイル、中身はテキストファイルなので自分で作ることも可能です。
試しに今回は、37バイト目に Ruby
という文字列を見つけたら I love Ruby
と表示するマジックナンバーファイルを作ってみます。
37ruby
というファイル名で以下の内容を持つファイルを作ります。
たった1行のファイルだが、これもれっきとしたマジックナンバーファイルです。
36 string Ruby "I love Ruby"
次に、動作確認用に、37バイト目に Ruby
という文字列をもつファイル sample.txt
を作ります。
123456789012345678901234567890123456Ruby1234
準備が整ったので試してみます。
以下の様に期待通りの出力が得られたら成功です。
$ file -m 37ruby sample.txt
ruby: "I love Ruby"
-m
オプションによって自作のマジックナンバーファイルを認識させています。
マジックナンバーファイルについてはここに詳しいことが載ってます。(とても難解な書き方では有るが)
http://manpages.ubuntu.com/manpages/bionic/ja/man4/magic.4.html
ここまで書いておいて何ですが、この知識を使うことは多分一生無いと思います。