file (1) e magic (5): descrivono altri formati


8

Posso usare filee magic( http://linux.die.net/man/5/magic ) per sovrascrivere la descrizione di altri formati noti?

ad esempio, vorrei descrivere i seguenti formati:

che sono "solo" file di testo

O

questo è "solo" un file gzipped che inizia con il numero magico BAM\1

?

conosci qualche esempio?

È possibile fornire un codice C personalizzato per testare il file invece di utilizzare il formato magico?


1
Possibile duplicato dell'elenco dei file magici
JdeBP

Risposte:


8

È possibile utilizzare l' -mopzione per specificare un elenco alternativo di file magici e se si include il proprio prima del file magico compilato ( /usr/share/file/magic.mgcsul mio sistema) in tale elenco, tali schemi verranno testati prima di quelli "globali". È possibile creare una funzione o un alias per utilizzare in modo trasparente sempre trasparente quell'opzione semplicemente emettendo il filecomando.

Il linguaggio utilizzato nel file magico è piuttosto potente, quindi raramente è necessario tornare alla codifica C personalizzata. L'unica volta che mi sono sentito propenso a farlo è stato negli anni '90, quando corrispondenti file HTML e XML è stato difficile perché non c'era modo (a quel tempo) per avere il corpo flessibile e offset corrispondenza necessaria per essere in grado di analizzare <HTMLe < Htmle < htmlcon uno schema . L'ho implementato in C come modificatore del modello "stringa", consentendo l'ignoranza del case e la compattazione di spazi (facoltativi) .

Questi cambiamenti in C richiedevano anche l' adattamento dei file magici . E a meno che il filecodice sorgente non sia cambiato in modo significativo da allora, sarà sempre necessario modificare (o fornire ulteriori) regole nei magicfile che corrispondono a tali modifiche al codice C. Quindi potresti anche iniziare a provare a farlo solo con modifiche ai file magici, e tornare a cambiare il codice C se davvero non funziona.


Grazie, il repository github con gli esempi è stato molto utile.
Pierre,

1

Per il prossimo utente $ (user_searchengine) che trova questo:

Regole semplici come quella BAM sono simili alle seguenti:
OFFSET TYPE [OPERAND]FLAG MESSAGE
Nel caso di BAM:
0 string BAM\1 BAM
questo stampa la stringa BAM quando trova l'intestazione.

Per ulteriori informazioni, queste informazioni sui siti IBM sembrano essere un po 'obsolete, ma dovrebbero comunque essere sufficienti per semplici casi d'uso. man ha anche un sacco di informazioni sul formato.


0

Non è necessario utilizzare sempre l' -mopzione; come documentend nella sua pagina man file(1)leggerà anche di default il ~/.magicfile (o una versione compilata di esso:) ~/.magic.mgc, in modo da poter aggiungere le tue definizioni lì; non c'è bisogno di pasticciare con il sistema /usr/share/magic*o /etc/magic.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.