file − determina il tipo di file
SINTASSI
file [ −vbczL ] [ −f nome_file ] [ −m file_magici ] file ...
DESCRIZIONE
Questa pagina di manuale documenta la versione 3.25 del comando file. File analizza ognuno degli argomenti con lo scopo di classificarli. Ci sono tre insiemi di test, eseguiti nell’ordine seguente: test sul filesystem, test sul numero magico, e test sul linguaggio. Il tipo del file viene determinato dal primo test che ha successo.
Il tipo stampato contiene, solitamente, una parole fra text (il file contiene solo caratteri ASCII ed è probabilmente sicuro leggerlo su di un terminale ASCII), executable (il file contiene il risultato della compilazione di un programma, ed è in una qualche forma comprensibile ad un kernel UNIX , o altro) o data, col ché s’intende qualsiasi altra cosa ( questi file sono si solito «binari» non stampabili). Le eccezioni sono dei formati file ben noti (file core, archivi tar) che contengono notoriamente dati binari. Quando si modifica il file /etc/magic o il programma stesso, si conservino queste parole chiave. La gente può dipendere dal fatto che tutti i file leggibili di una directory abbiano associata la parola «text». Non fate come a Berkeley dove hanno cambiato «shell commands text» in «shell script».
I test sul filesystem si basano sul valore restituito dalla chiamata di sistema stat(2). Il programma prova a vedere se il file è vuoto o se è un un qualche tipo di file speciale. I tipi di file noti, e pertinenti al sistema in questione (socket, collegamenti simbolici, FIFO --- nei sistemi che le implementano), sono riconosciuti, purché siano stati definiti nel header di sistema sys/stat.h.
I test sul
numero magico sono usati per analizzare file i cui dati
abbiano particolari formati conosciuti. L’esempio
canonico sono i binari eseguibili (programmi compilati)
a.out, il cui formato è definito in
a.out.h e possibilmente in exec.h nella
directory standard di include. Questi file hanno un
«numero magico», posto in una posizione
specifica vicino all’inizio del file, per comunicare
al sistema operativo UNIX che sono dei binari
eseguibili, e, fra i molti, di quale tipo. Il concetto di
«numero magico» si applica, per estensione,
anche
ai file di dati. Qualsiasi file con un identificativo
costante posto ad un piccolo offset fisso può di
solito essere descritto in tal modo. Le informazioni per
questi file sono lette dal file magico
/etc/magic.
Se un argomento sembra essere un file ASCII, file prova a indovinarne il linguaggio. I test sul linguaggio cercano una particolare stringa (vedi names.h) che può comparire ovunque nei primi blocchi del file. Per esempio, la parola chiave .br indica che il file è molto probabilmente un file d’input per troff(1), così come la parola chiave struct indica un programma C. Queste analisi sono meno attendibili di quelle dei due gruppi precedenti e quindi sono fatte per ultime. Le routine di test sulla linguaggio verificano anche altre cose (come gli archivi tar(1)) e determinano quando un file sconosciuto potrebbe essere etichettato come «ascii text» o come «data».
OPZIONI
−v |
Stampa la versione del programma ed esce. |
−m elenco
Specifica un elenco alternativo di file contenti i numeri magici. L’elenco può essere un singolo file, oppure più file separati da dei due punti.
−z |
Prova a guardare dentro i file compressi. | ||
−b |
Non precede le righe di output con il nome dei file (modalità breve). | ||
−c |
Fa una stampa di verifica della valutazione sintattica del file magico. È usata di solito assieme a −m per verificare il funzionamento di un nuovo file magico prima dell’installazione. |
−f nome_file
Legge i nomi dei file da analizzare (uno per riga) da nome_file prima dell’elenco degli argomenti. Nome_file, o almeno un nome di file, deve essere presente come argomento; per verificare lo standard input, si usi l’argomento «-» come nome di file.
−L |
Fa sì che siano seguiti i collegamenti simbolici (nei sistemi in cui esistono), come l’omonima opzione di ls(1) |
FILE
/etc/magic − elenco predefinito dei numeri magici.
VARIABILI D’AMBIENTE
La variabile ambientale MAGIC può essere usata per predefinire i file coi numeri magici.
VEDERE ANCHE
magic(4)
− descrizione del formato dei file magici.
strings(1), od(1), hexdump(1) −
strumenti per l’analisi di file non di testo.
CONFORMITÀ AGLI STANDARD
Si suppone che questo programma ecceda la «System V Interface Definition» per FILE(CMD), per quanto si possa capire dalle sue vaghe definizioni. Il suo comportamento è compatibile con il programma omonimo di System V; questa versione, però, riconosce più numeri magici e quindi dà in molti casi risultati diversi (ma più accurati).
Una differenza
significativa tra questa versione e quella di System V
è che questa tratta ogni spazio bianco come un
delimitatore, cosicché gli spazi nelle stringhe di
modello devono essere prodotti come sequenze di escape. Per
esempio,
>10 stringa language impress (imPRESS data)
in un file magico precedente, deve essere cambiato in
>10 stringa language\ impress (imPRESS data)
Inoltre, in questa versione, se una stringa di modello
contiene backslash, anche questi devono essere prodotti con
le sequenze di escape. Per esempio,
0 stringa \begindata Andrew Toolkit document
in un file magico precedente, deve essere cambiato in
0 string \\begindata Andrew Toolkit document
Le versioni 3.2
e successive di SunOs della Sun Microsystems includono un
comando file(1) derivato dalla versione System V, ma
con qualche altra estensione. La mia versione ha sole
differenze secondario con quella della Sun: include
un’estensione dell’operatore
«&», usato, ad esempio, per
>16 long&0x7fffffff >0 not stripped
RISORSE MAGICHE
Le voci nel file magico sono state raccolte da varie fonti, principalmente USENET, e con il contributo di vari autori. Christos Zoulas (per l’indirizzo si veda sotto) è felice di ricevere voci nuove o corrette per il file magico. Un file magico aggiornato sarà distribuito periodicamente.
L’ordine delle voci nel file magico è significativo. A seconda del sistema che si sta usando, l’ordine con il quale sono state messe assieme potrebbe essere sbagliato. Se il vecchio comando file usa un file magico, si conservi il vecchio file magico per poterlo confrontare (lo si rinomini in /etc/magic.orig).
STORIA
C’è stato un comando file in ogni UNIX a partire almeno dalla Research Version 6 (la pagina di manuale è datata gennaio 1975). La versione System V ha introdotto un cambiamento importante: l’elenco esterno dei tipi di numero magico. Ciò ha rallentato un po’ il programma ma lo ha reso più flessibile.
Questo programma, pur basato sulla versione System V, è stato scritto da Ian Darwin senza che nessun codice altrui sia stata letto.
John Gilmore ha revisionato il codice estensivamente, migliorandolo rispetto alla prima versione. Geoff Collyer ha trovato diverse inadeguatezze ed ha fornito alcune delle voci del file magico. Il programma è in continua evoluzione.
AUTORE
Scritto da Ian F. Darwin, indirizzo UUCP: {utzoo | ihnp4}!darwin!ian, indirizzo Internet: ian [AT] sq.com, indirizzo postale: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.
Modificato da Rob McMahon, cudcv [AT] warwick.uk, 1989, per estendere ’&’ dal semplice ’x&y != 0’ a ’x&y op z’.
Modificato da Guy Harris, guy [AT] netapp.com, 1993, per:
rimettere com’era l’operatore ’&’ «vecchio stile», in quanto 1) i cambiamenti di Rob McMahon avevano sconvolto abitudini consolidate, 2) l’operatore ’&’ nel nuovo stile SunOs, che questa versione di file supporta, può trattare anche ’x&y op z’, e 3) i cambiamenti di Rob non erano documentati da nessuna parte;
aggiungere livelli multipli di ’>’;
aggiungere le parole chiave «beshort», «leshort», ecc. per leggere i numeri nel file in uno ordine di byte specifico, piuttosto che nell’ordine di byte nativo del processo che lancia file.
Cambiato da Ian Darwin e da vari autori fra i quali Christos Zoulas (christos [AT] astron.com), 1990-1997.
INFORMAZIONI LEGALI
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
NdT: questa traduzione non ha nessun valore legale, ma è a puro titolo informativo; si consulti la versione originale.
Questo software non è oggetto e non può essere fatto oggetto di alcuna licenza della American Telephone and Telegraph Company, della Sun Microsystems Inc., della Digital Equipment Inc., della Lotus Development Inc., dei Regents of the University of California, del X Consortium o del MIT, o della Free Software Foundation.
Questo software non è soggetto a nessun provvedimento del United States Department of Commerce, e può essere esportato in qualsiasi nazione o pianeta.
Ognuno ha il permesso di usare questo software per qualsiasi scopo in qualsiasi sistema di computer, e di modificarlo e ridistribuirlo gratuitamente, con le seguenti limitazioni:
1. L’autore non è responsabile delle conseguenze derivanti dall’uso di questo software, per quanto orribili, e nemmeno se sono originate da suoi difetti.
2. Le origini di questo software non devono essere mal attribuite, né con pretese eplicite né con ammissioni. Poiché pochi utenti leggono i sorgenti, le attribuzioni devono apparire nella documentazione.
3. Le versioni alterate devono essere segnalate come tali, e non devono essere spacciate per il software originale. Poiché pochi utenti leggono i sorgenti, le attribuzioni devono apparire nella documentazione.
4. Questi avvisi non possono essere né rimossi né modificati.
Alcuni file di supporto (getopt, strtok) distribuiti con questo pacchetto sono di Henry Spencer e sono soggetti ai suddetti termini.
Alcuni file di supporto (strtol, strchr) distribuiti con questo pacchetto sono nel dominio pubblico; sono così marcati.
I file tar.h e is_tar.c sono stati scritti da John Gilmore nel suo programma tar nel dominio pubblico, e non sono soggetti alle suddette restrizioni.
BACHI
Ci deve essere un modo migliore per automatizzare la costruzione del file magico da tutte le fonti in Magdir. Quale? Meglio ancora, il file magico dovrebbe essere compilato dentro il binario (diciamo, ndbm(3) o, meglio ancora, stringhe ASCII di lunghezza fissa per l’uso in ambienti di rete eterogenei) per un avvio più veloce. Allora il programma potrebbe essere tanto veloce quanto il programma omonimo di Version 7, ma con la flessibilità della versione del System V.
File usa diversi algoritmi che favoriscono la velocità a scapito dell’accuratezza, quindi può sbagliarsi sul contenuto dei file ASCII.
Il supporto per il file ASCII (principalmente per i linguaggi di programmazione) è semplicistico, inefficiente e richiede la ricompilazione per essere aggiornato.
Ci dovrebbe essere una clausola «else» che segua una serie di righe di continuazione.
Il file magico e le parole chiave dovrebbero poter accettare le espressioni regolari. Il loro uso del TAB ASCII come delimitatore è brutto e rende difficile editare il file, ma è consolidato.
Potrebbe essere utile permette l’uso delle lettere maiuscole nelle parole chiave, p.es. per distinguere i comandi troff(1) dalle macro delle manpagine. Ciò verrebbe facilitato dal supporto per le espressioni regolari.
Il programma non identifica il FORTRAN . Dovrebbe essere in grado di scovare il FORTRAN vedendo alcune parole chiave che sono identate all’inizio della riga. Ciò sarebbe facilitato dal supporto per le espressioni regolari.
La lista delle parole chiave in ascmagic probabilmente dovrebbe far parte del file magico. Ciò potrebbe essere fatto usando qualche keyword come ’*’ per il valore di offset.
Un’altra ottimizzazione potrebbe essere l’ordinamento del file magico in modo da poter saltare i test sul primo byte, il primo word, il primo long, ecc., una volta passato il primo. Protestare per i conflitti nelle voci del file magico. Aggiungere una regola per la quale l’ordine delle voci magiche si basi sull’offset nel file piuttosto che sulla posizione all’interno del file magico?
Il programma dovrebbe fornire un modo per stimare la «bontà» della predizione; alla fine rimuovendo le «sparate» (p.es. «From» come primi 5 caratteri del file) perché alcune non sono così buone come altre (p.es. «Newsgroups:» contro "Return-Path:"). Ma se le altre non hanno successo, dovrebbe essere ancora possibile usare la prima.
Questo programma è più lento del comando file di qualche produttore.
Questa pagina di manuale, e in particolare questa sezione, è troppo lunga (NdT: non posso far altro che confermare :-).
DISPONIBILITÀ
È possibile ottenere l’ultima versione originale dell’autore con FTP anonimo a ftp.astron.com nella directory /pub/file/file-X.YY.tar.gz