El comando es un programa estándar de los sistemas operativos Unix y similares para reconocer el tipo de datos contenidos en un archivo de computadora .file
La versión original file
se originó en Unix Research Version 4 [1] en 1973. System V trajo una actualización importante con varios cambios importantes, el más notable fue mover la información del tipo de archivo a un archivo de texto externo en lugar de compilarlo en el binario mismo.
La mayoría de las distribuciones principales de BSD y Linux utilizan una reimplementación libre y de código abierto que fue escrita en 1986-87 por Ian Darwin [2] desde cero; mantiene la información del tipo de archivo en un archivo de texto con un formato basado en el de la versión System V. Fue ampliada por Geoff Collyer en 1989 y desde entonces ha recibido aportes de muchos otros, incluidos Guy Harris, Chris Lowth y Eric Fischer; desde finales de 1993 en adelante, su mantenimiento ha sido organizado por Christos Zoulas. El sistema OpenBSD tiene su propia implementación de subconjunto escrita desde cero, pero aún utiliza la colección de información de archivos mágicos de Darwin/Zoulas.
El file
comando también ha sido portado al sistema operativo IBM i . [3]
La especificación única de UNIX (SUS) especifica que se realizan una serie de pruebas en el archivo especificado en la línea de comando:
file
programa indicará que el archivo fue procesado pero su tipo no está determinado.file
Debe poder determinar los tipos de directorio , FIFO , socket , archivo especial de bloque y archivo especial de caracteres.file
se utilizan pruebas sensibles a la posición.file
se deben utilizar pruebas sensibles al contexto.data
archivofile
Las pruebas sensibles a la posición de se implementan normalmente haciendo coincidir varias ubicaciones dentro del archivo con una base de datos textual de números mágicos (consulte la sección Uso). Esto difiere de otros métodos más simples, como las extensiones de archivo y esquemas como MIME .
En la implementación de System V, la implementación de Ian Darwin y la implementación de OpenBSD, el file
comando utiliza una base de datos para controlar el sondeo de los bytes principales. Esa base de datos se implementa en un archivo llamado magic
, cuya ubicación suele ser /etc/magic
, /usr/share/file/magic
o una ubicación similar.
El SUS [4] contempla las siguientes opciones:
file
.Es posible que otros sistemas operativos Unix y similares a Unix añadan opciones adicionales a estas. La implementación de Ian Darwin añade -s"archivos especiales", -k"mantener en marcha" o -r"sin formato" (ejemplos a continuación), entre muchas otras. [5]
El comando solo indica cómo se ve el archivo , no qué es (en el caso de que el archivo mire el contenido). Es fácil engañar al programa colocando un número mágico en un archivo cuyo contenido no coincide con él. Por lo tanto, el comando no se puede utilizar como herramienta de seguridad, salvo en situaciones específicas.
$ file file.c
archivo.c: texto del programa en C
$ file program
programa: ejecutable ELF LSB de 32 bits , Intel 80386 , versión 1 ( SYSV ), vinculado dinámicamente (usa bibliotecas compartidas ), despojado
$ file
/dev/ hda1/dev/hda1: bloque especial (0/0)
$ file -s /dev/hda1
/dev/hda1: sistema de archivos ext2 de Linux/ i386
Tenga en cuenta que -s es una opción no estándar disponible solo en la rama Ian Darwin, que indica file
que se deben leer los archivos del dispositivo e intentar identificar su contenido en lugar de simplemente identificarlos como archivos del dispositivo. Normalmente file
no intenta leer archivos del dispositivo, ya que leer un archivo de este tipo puede tener efectos secundarios no deseados.
$ file -k -r libmagic-dev_5.35-4_armhf.deb # (on Linux)
libmagic-dev_5.35-4_ armhf . deb : paquete binario Debian (formato 2.0)- archivo ar
actual- datos
Gracias a la opción no estándar de Ian Darwin, -kel programa no se detiene tras el primer resultado encontrado, sino que busca otros patrones coincidentes. La -ropción, que está disponible en algunas versiones, hace que el carácter de nueva línea no imprimible se muestre en su forma original en lugar de en su representación octal.
$ file compressed.gz
compression.gz: datos comprimidos gzip , desinflados , nombre de archivo original, `comprimido', último modificado: jue 26 ene 14:08:23 2006, sistema operativo : Unix
$ file -i compressed.gz # (on Linux)
comprimido.gz: aplicación/x-gzip ; conjunto de caracteres = binario
$ file data.ppm
data.ppm: datos de imagen "rawbits" de Netpbm PPM
$ file /bin/cat
/bin/cat: binario universal Mach-O con 2 arquitecturas
/bin/cat (para la arquitectura ppc7400 ): ejecutable Mach-O ppc/bin/cat (para arquitectura i386): ejecutable Mach-O i386
$ file /usr/bin/vi /usr/bin/vi: enlace simbólico a vim
La identificación de enlaces simbólicos no está disponible en todas las plataformas y se desreferenciará si -Lse pasa o POSIXLY_CORRECTse configura.
A partir de la versión 4.00 de la versión de Ian Darwin/Christos Zoulas de file
, la funcionalidad de file
se incorpora a una libmagic
biblioteca a la que se puede acceder a través de enlaces C (y compatibles con C); [7] [8] file
se implementa utilizando esa biblioteca. [9] [10]
file
utilizada en las principales distribuciones de BSD y Linux.