file (1) et magic (5): description d'autres formats

8

Puis-je utiliser fileet magic( http://linux.die.net/man/5/magic ) pour remplacer la description de certains autres formats connus?

par exemple, je voudrais décrire les formats suivants:

qui ne sont que des fichiers texte

Ou

c'est "juste" un fichier gzippé commençant par le nombre magique BAM\1

?

connaissez-vous un exemple?

Est-il possible de fournir un code C personnalisé pour tester le fichier au lieu d'utiliser le format magique?

Pierre
la source

Réponses:

8

Vous pouvez utiliser l' -moption pour spécifier une autre liste de fichiers magiques, et si vous incluez le vôtre avant le fichier magique compilé ( /usr/share/file/magic.mgcsur mon système) dans cette liste, ces modèles seront testés avant ceux "globaux". Vous pouvez créer une fonction, ou un alias, pour utiliser de manière transparente et transparente cette option en émettant simplement la filecommande.

Le langage utilisé dans le fichier magique est assez puissant, il est donc rarement nécessaire de revenir au codage C personnalisé. La seule fois où je me suis senti enclin à le faire, c'était dans les années 90, lorsque la correspondance de fichiers HTML et XML était difficile, car il n'y avait aucun moyen (à l'époque) d'avoir le boîtier flexible et la correspondance de décalage nécessaires pour pouvoir analyser <HTMLet < Htmlet < htmlavec un modèle . J'ai implémenté cela en C comme modificateur du modèle 'string', permettant l'ignorance de la casse et le compactage des blancs (facultatifs) .

Ces changements en C ont également nécessité une adaptation des fichiers magiques . Et à moins que le filecode source n'ait considérablement changé depuis lors, vous devrez toujours modifier (ou fournir des règles supplémentaires) dans les magicfichiers qui correspondent à ces changements de code C. Donc, vous pourriez tout aussi bien commencer à essayer de le faire avec des modifications uniquement dans les fichiers magiques, et revenir à changer le code C si cela ne fonctionne vraiment pas.

Anthon
la source
Merci, le dépôt github avec les exemples a été très utile.
Pierre
1

Pour le prochain utilisateur $ (user_searchengine) trouver ceci:

Des règles simples comme celle de BAM ressemblent à ceci:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Dans le cas de BAM:
0 string BAM\1 BAM
Cela afficherait la chaîne BAM lors de la recherche de l'en-tête.

Pour plus d'informations, ces informations sur les sites IBM semblent un peu obsolètes, mais devraient néanmoins suffire pour les cas d'utilisation simples. l'homme a également un tas d'informations sur le format.

SleepProgger
la source
0

Vous n'avez pas besoin de toujours utiliser l' -moption; comme documentend dans sa page de manuel file(1)lira également par défaut le ~/.magicfichier (ou une version compilée de celui-ci ~/.magic.mgc:), vous pouvez donc y ajouter vos définitions; pas besoin de jouer avec l'ensemble du système /usr/share/magic*ou /etc/magic.

mosvy
la source