FILE(1)

NOME
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@sq.com, indirizzo postale: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.

Modificato da Rob McMahon, cudcv@warwick.ac.uk, 1989, per estendere `&' dal semplice `x&y != 0' a `x&y op z'.

Modificato da Guy Harris, guy@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@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