LoginSignup
51
23

More than 1 year has passed since last update.

君はマジックナンバーファイルを知っているか

Last updated at Posted at 2022-06-14

私は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

ここまで書いておいて何ですが、この知識を使うことは多分一生無いと思います。

51
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
23