web-dev-qa-db-ja.com

file(1)およびmagic(5):他の形式の記述

filemagichttp://linux.die.net/man/5/magic )を使用して、他の既知の形式の説明を上書きできますか?

たとえば、次の形式について説明したいと思います。

それは「ただの」テキストファイルです

または

つまり、マジックナンバーBAM\1で始まるgzipファイルです。

何か例を知っていますか?

魔法の形式を使用する代わりに、ファイルをテストするためのカスタムCコードを提供することは可能ですか?

8
Pierre

-mオプションを使用して、マジックファイルの代替リストを指定できます。コンパイルされたマジックファイル(私のシステムでは/usr/share/file/magic.mgc)の前に独自のリストを含めると、それらのパターンは以前にテストされます。 「グローバル」なもの。 fileコマンドを発行するだけで、そのオプションを透過的に常に透過的に使用する関数またはエイリアスを作成できます。

マジックファイルで使用される言語は非常に強力であるため、カスタムCコーディングに戻す必要はほとんどありません。 <HTMLを解析するために必要な柔軟なケーシングとオフセットのマッチングを行う方法が(当時)なかったため、HTMLファイルとXMLファイルのマッチングが困難だった90年代に私がそうしたいと思ったのは唯一のことでした。および< Htmlおよび< htmlを1つのパターンで。これを「文字列」パターンの修飾子としてCに実装しました、 大文字と小文字を区別せず、(オプションの)空白を圧縮できます

Cでのこれらの変更は必要です マジックファイルの適応も 。それ以降、fileソースコードが大幅に変更されていない限り、それらのCコードの変更に一致するmagicファイルのルールを常に変更(または追加)する必要があります。したがって、マジックファイルのみを変更してそれを実行することから始めて、それが実際にうまくいかない場合は、Cコードの変更にフォールバックすることをお勧めします。

8
Anthon

これを見つける次の$(user_searchengine)ユーザーの場合:

BAMのような単純なルールは次のようになります。
OFFSET TYPE [OPERAND]FLAG MESSAGE
BAMの場合:
0 string BAM\1 BAM
これにより、ヘッダーが見つかったときに文字列BAMが出力されます。

詳細情報 このIBMサイト 情報は少し古くなっているようですが、単純なユースケースにはまだ十分なはずです。 man には、フォーマットに関する情報もたくさんあります。

1
SleepProgger

常に_-m_オプションを使用する必要はありません。マンページのdocumentendとして、file(1)はデフォルトで_~/.magic_ファイル(またはそのコンパイル済みバージョン:_~/.magic.mgc_)も読み取るため、そこに定義を追加できます。システム全体の_/usr/share/magic*_または_/etc/magic_をいじる必要はありません。

0
mosvy