MAGIC(5) — NEWS-OS Programmer’s Manual
名称
magic − file コマンドの magic number ファイル
解説
file(1) は他のテストと共にファイルの magic number を見て、 ファイルのタイプを判別します。 magic number は通常ファイルの先頭に置かれ、 そのファイルタイプが何であるかを示す 数値、もしくは文字列をいいます。
(例)
シェルプログラム#!/bin/sh
ポストスクリプト%!
MIPS endian big0x0160 (short)
/etc/magic には magic number と、その magic number が見つかった場合に 表示されるメッセージが書かれています。 /etc/magic の各行は下記のフォーマットで書かれています。
offsettype valuemessage
offset ファイル中の比較されるデータ(magic number)のファイルの先頭からの バイト数。
type 比較されるデータの型。
byte1 バイトの値
short2 バイトの値
long4 バイトの値
string文字列
value value はファイルの offset で示された位置のデータと比較されます。 type が byte, short, long のとき C に準じたビット演算子、 および比較命令を使うことができます。
> valueデータが valueより大きい
< valueデータが valueより小さい
! value等しくない
& value(value & データ)
^ value! (value & データ)
比較命令がない場合および type が string の場合 ‘=’ と解釈され、 value とデータが比較されます。
value は C の形式で表されます。例えば、 13 は 10進、 013 は 8進、 0x13 は 16進数となります。 value が ‘x’ の場合任意の数値または文字列と一致します。
message
ファイル中のデータが比較条件を満足した場合 message が表示されます。 message の文字列に printf(3S) のフォーマットがある場合、 offset の位置のデータが指定された フォーマットでプリントされます。
ファイルによってはファイルタイプに続いて追加情報を表示します。 ‘>’ で始まらない行でデータが比較条件を満足すると、 次の行が ‘>’ で始まる場合、 追加情報を表示するための比較を行ないます。 この比較作業は ‘>’ で始まらない行が来るまで続けられます。
例
0short0x0160MIPS endian big
>20short0407 executable
>20short0410 pure
>20short0413 demand paged
>8long!0 not stripped
>8long0 stripped
>22bytex - version %ld.
>23bytex ^H%ld
1) 1行目でファイルの 0バイト目に short の 16進で 160があれば MIPS endian big と表示します。
2) 20バイト目が8進で 0413であれば demand page と表示します。
3) 8バイト目が long で 0でないなら not stripped と表示します。
4) 22バイト目を byte で読み出して - version に続いて %ld形式で表示します。
5) 23バイト目を byte で読み出して %ld形式で表示します。 23バイト目を表示するとき、間にスペースを入れるので ^H(Ctrl-H)で、スペースをとります。
この結果次のように表示されます。
/usr/bin/file : MIPS endian big demand paged not stripped - version 2.0
関連ファイル
/etc/magic
関連事項
バグ
‘>’ で始まる行で、もう一度チェックを行なって、 ファイルの判別をすべきです。
NEWS-OSRelease 4.1C