file(1)およびmagic(5):他のフォーマットの説明


8

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

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

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

または

マジックナンバーで始まるgzip圧縮されたファイルです BAM\1

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

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


回答:


8

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

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

Cでのこれらの変更には、マジックファイルの調整も必要です。fileその後、ソースコードが大幅に変更されていない限り、magicCコードの変更に一致するファイルのルールを常に変更(または追加)する必要があります。そのため、マジックファイルのみを変更することから始めて、それが本当にうまくいかない場合は、Cコードの変更にフォールバックすることもできます。


ありがとう、例付きのgithubリポジトリは非常に役に立ちました。
Pierre

1

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

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

詳細については、このIBMサイトの情報は少し古くなっているように見えますが、単純な使用例には十分です。 男はまた、フォーマットに関するたくさんの情報を持っています。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.