file (comando) - file (command)

file
Sviluppatore/i AT&T Bell Laboratories
Versione iniziale 1973 come parte di Unix Research Version 4 ; Reimplementazione dell'open source nel 1986 ( 1973 ) ( 1986 )
Repository github .com /file /file
Scritto in C
Sistema operativo Unix , Unix-like , Plan 9 , IBM i
piattaforma Multipiattaforma
Tipo Rilevatore del tipo di file
Licenza Licenza BSD , CDDL
Sito web darwinsys .com /file /

Il comando di è uno standard del programma di Unix e Unix-like sistemi operativi per riconoscere il tipo di dati contenuti in un file del computer . file

Storia

La versione originale di è filenata in Unix Research Version 4 nel 1973. System V ha apportato un importante aggiornamento con diversi importanti cambiamenti, in particolare spostando le informazioni sul tipo di file in un file di testo esterno piuttosto che compilarlo nel binario stesso.

La maggior parte delle principali distribuzioni BSD e Linux utilizzano una reimplementazione gratuita e open source che è stata scritta nel 1986-87 da Ian Darwin da zero. È stato ampliato da Geoff Collyer nel 1989 e da allora ha ricevuto input da molti altri, tra cui Guy Harris, Chris Lowth ed Eric Fischer; dalla fine del 1993 in poi la sua manutenzione è stata curata da Christos Zoulas . Il sistema OpenBSD ha la propria implementazione del sottoinsieme scritta da zero, ma utilizza ancora la raccolta Darwin/Zoulas di informazioni formattate sui file magici.

Il filecomando è stato anche portato sul sistema operativo IBM i .

Specifiche

La Single Unix Specification (SUS) specifica che una serie di test viene eseguita sul file specificato nella riga di comando:

  1. se il file non può essere letto, o il suo tipo di file Unix non è determinato, il fileprogramma indicherà che il file è stato elaborato ma il suo tipo non è stato determinato.
  2. filedeve essere in grado di determinare i tipi directory , FIFO , socket , block special file e character special file
  3. i file di lunghezza zero sono identificati come tali
  4. viene considerata una parte iniziale del file e fileconsiste nell'utilizzare test sensibili alla posizione
  5. l'intero file viene considerato e filedeve utilizzare test sensibili al contesto
  6. il file è identificato come un datafile

filei test di posizione di 's sono normalmente implementati confrontando varie posizioni all'interno del file con un database testuale di numeri magici (vedi la sezione Utilizzo). Questo differisce da altri metodi più semplici come estensioni di file e schemi come MIME .

Nella maggior parte delle implementazioni, il filecomando utilizza un database per guidare l'analisi dei lead byte. Quel database è implementato in un file chiamato magic, la cui posizione è solitamente in /etc/magic, /usr/share/file/magico una posizione simile.

utilizzo

Il SUS prevede le seguenti opzioni:

-M file, specificare un file appositamente formattato contenente test sensibili alla posizione; i test sensibili alla posizione predefiniti e i test sensibili al contesto non verranno eseguiti.
-m file, come per -M, ma i test di default verranno eseguiti dopo i test contenuti in file.
-d, esegue test predefiniti sensibili alla posizione e al contesto per il file specificato; questo è il comportamento predefinito a meno -Mche non -msia specificato o .
-h, non dereferenziare i collegamenti simbolici che puntano a un file o una directory esistente.
-L, dereferenziare il collegamento simbolico che punta a un file o una directory esistente.
-i, non classificare il file oltre a identificarlo come: inesistente, un file speciale a blocchi, un file speciale a caratteri, una directory, un FIFO , un socket, un collegamento simbolico o un file normale. I sistemi Linux e BSD si comportano diversamente con questa opzione e generano invece un tipo di supporto Internet (" tipo MIME ") che identifica il formato di file riconosciuto.

Altri sistemi operativi Unix e Unix-like possono aggiungere opzioni extra rispetto a queste, come -s"file speciali", -k"continua" o -r"raw" (esempi sotto).

Il comando dice solo come appare il file , non di cosa si tratta (nel caso in cui il file guardi il contenuto). È facile ingannare il programma inserendo un numero magico in un file il cui contenuto non corrisponde. Pertanto il comando non è utilizzabile come strumento di sicurezza se non in situazioni specifiche.

Esempi

$ file file.c
file.c: C program text
$ file program
program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked
    (uses shared libs), stripped
$ file /dev/hda1
/dev/hda1: block special (0/0)
$ file -s /dev/hda1
/dev/hda1: Linux/i386 ext2 filesystem

Nota che -s è un'opzione non standard disponibile solo su alcune piattaforme, che dice filedi leggere i file di dispositivo e provare a identificare il loro contenuto piuttosto che identificarli semplicemente come file di dispositivo. Normalmente filenon tenta di leggere i file del dispositivo poiché la lettura di un file di questo tipo può avere effetti collaterali indesiderati.

$ file -k -r libmagic-dev_5.35-4_armhf.deb    # (on Linux)
libmagic-dev_5.35-4_armhf.deb: Debian binary package (format 2.0)
- current ar archive
- data

Tramite l'opzione non standard -kil programma non si ferma dopo il primo colpo trovato, ma cerca altri pattern di corrispondenza. L' -ropzione, disponibile in alcune versioni, fa sì che il carattere di nuova riga non stampabile venga visualizzato nella sua forma grezza anziché nella sua rappresentazione ottale.

$ file compressed.gz
compressed.gz: gzip compressed data, deflated, original filename, `compressed', last
    modified: Thu Jan 26 14:08:23 2006, os: Unix
$ file -i compressed.gz    # (on Linux)
compressed.gz: application/x-gzip; charset=binary
$ file data.ppm
data.ppm: Netpbm PPM "rawbits" image data
$ file /bin/cat
/bin/cat: Mach-O universal binary with 2 architectures
/bin/cat (for architecture ppc7400):	Mach-O executable ppc
/bin/cat (for architecture i386):	Mach-O executable i386
$ file /usr/bin/vi
/usr/bin/vi: symbolic link to vim

L'identificazione dei collegamenti simbolici non è disponibile su tutte le piattaforme e verrà dereferenziata se -Lviene passata o POSIXLY_CORRECTimpostata.

Biblioteca Libmagic

A partire dalla versione 4.00 della versione di Ian Darwin/Christos Zoulas di file, la funzionalità di fileè incorporata in una libmagic libreria accessibile tramite collegamento C (e compatibile con C); fileè implementato usando quella libreria.

Riferimenti

link esterno

Pagine del manuale

Altro