El comando es un programa estándar de Unix y sistemas operativos similares a Unix para reconocer el tipo de datos contenidos en un archivo de computadora .file
Desarrollador (es) | Laboratorios AT&T Bell |
---|---|
Versión inicial | 1973 como parte de Unix Research Version 4 ; 1986 Reimplementación de código abierto |
Repositorio | github |
Escrito en | C |
Sistema operativo | Unix , similar a Unix , Plan 9 , IBM i |
Plataforma | Multiplataforma |
Tipo | Detector de tipo de archivo |
Licencia | Licencia BSD , CDDL |
Sitio web | darwinsys |
Historia
La versión original de se file
originó en Unix Research Version 4 [1] en 1973. System V trajo una actualización importante con varios cambios importantes, más notablemente moviendo la información del tipo de archivo a un archivo de texto externo en lugar de compilarlo en el propio binario.
Más importante BSD y Linux distribuciones utilizan un libre , de código abierto reimplementación que fue escrito en 1986-87 por Ian Darwin [2] a partir de cero. Fue ampliado por Geoff Collyer en 1989 y desde entonces ha recibido aportaciones 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 subconjuntos escrita desde cero, pero aún usa la colección Darwin / Zoulas de información formateada en archivos mágicos.
El file
comando también se ha trasladado al sistema operativo IBM i . [3]
Especificación
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:
- si el archivo no se puede leer, o su tipo de archivo Unix no está determinado, el
file
programa indicará que el archivo fue procesado pero su tipo era indeterminado. file
debe poder determinar el directorio de tipos , FIFO , socket , archivo especial de bloque y archivo especial de carácter- Los archivos de longitud cero se identifican como tales
- se considera una parte inicial del archivo y
file
se utilizan pruebas sensibles a la posición - se considera el archivo completo y
file
se utilizan pruebas sensibles al contexto - el archivo se identifica como un
data
archivo
file
Las pruebas sensibles a la posición 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 extensiones de archivo y esquemas como MIME .
En la mayoría de las implementaciones, 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 estar en /etc/magic
, /usr/share/file/magic
o una ubicación similar.
Uso
El SUS [4] exige las siguientes opciones:
- -M file, especifique un archivo especialmente formateado que contenga pruebas sensibles a la posición; No se realizarán pruebas sensibles a la posición y pruebas sensibles al contexto predeterminadas.
- -m file, en cuanto a -M, pero las pruebas predeterminadas se realizarán después de las pruebas contenidas en
file
. - -d, realiza pruebas predeterminadas sensibles a la posición y sensibles al contexto para el archivo dado; este es el comportamiento predeterminado a menos que se especifique -Mo -m.
- -h, no elimine la referencia a los enlaces simbólicos que apuntan a un archivo o directorio existente.
- -L, elimine la referencia al enlace simbólico que apunta a un archivo o directorio existente.
- -i, no clasifique el archivo más allá de identificarlo como: inexistente, un archivo especial de bloque, un archivo especial de caracteres, un directorio, un FIFO , un socket, un enlace simbólico o un archivo normal. Los sistemas Linux [5] y BSD [6] se comportan de manera diferente con esta opción y, en su lugar, generan un tipo de medio de Internet (" tipo MIME ") que identifica el formato de archivo reconocido.
Otro Unix y Unix-como sistemas operativos pueden añadir opciones adicionales que éstas, como -s'archivos especiales', -k'Keep-va' o -r'en bruto' (ejemplos a continuación).
El comando solo dice cómo se ve el archivo , no qué es (en el caso de que el archivo vea el contenido). Es fácil engañar al programa poniendo un número mágico en un archivo cuyo contenido no coincide. Por lo tanto, el comando no se puede utilizar como herramienta de seguridad más que en situaciones específicas.
Ejemplos de
$ archivo file.cfile.c: texto del programa C
$ programa de archivoprograma: ejecutable LSB ELF de 32 bits , Intel 80386 , versión 1 ( SYSV ), vinculado dinámicamente (utiliza bibliotecas compartidas ), despojado
$ archivo / dev / hda 1/ dev / hda1: bloque especial (0/0)
$ archivo -s / dev / hda1/ dev / hda1: sistema de archivos Linux / i386 ext2
Tenga en cuenta que -s es una opción no estándar disponible solo en algunas plataformas, que le indica file
que lea los archivos del dispositivo e intente identificar su contenido en lugar de simplemente identificarlos como archivos del dispositivo. Normalmente file
no intenta leer archivos de dispositivo, ya que leer un archivo de este tipo puede tener efectos secundarios no deseados.
$ archivo -k -r libmagic-dev_5.35-4_armhf.deb # (en Linux)libmagic-dev_5.35-4_ armhf . deb : paquete binario Debian (formato 2.0)- archivo ar actual- datos
A través de la opción no estándar, -kel programa no se detiene después de que se encuentra el primer resultado, 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.
$ archivo comprimido.gzcompressed.gz: datos comprimidos gzip , desinflado , nombre de archivo original, `comprimido ', último modificados: Jue Ene 26 de 2006 14:08:23, SO : Unix
$ archivo -i compressed.gz # (en Linux)compressed.gz: aplicación / x-gzip ; juego de caracteres = binario
$ archivo de datos.ppmdata.ppm: datos de imagen "rawbits" de Netpbm PPM
$ archivo / bin / cat/ bin / cat: binario universal Mach-O con 2 arquitecturas / bin / cat (para la arquitectura ppc7400 ): ejecutable ppc de Mach-O/ bin / cat (para arquitectura i386): ejecutable Mach-O i386
Biblioteca libmagic
A partir de la versión 4.00 de la versión de Ian Darwin / Christos Zoulas de file
, la funcionalidad de file
está incorporada en 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]
Referencias
- ^ "Fuente del archivo" página de manual "de UNIX V4 .
- ^ La historia temprana de este programa se registra en su repositorio CVS privado; ver [1] el registro del programa principal
- ^ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . Consultado el 5 de septiembre de 2020 .
- ^ El problema 7 de las especificaciones de Open Group Base - comando de archivo
- ^ - Manual del usuario de Linux - Comandos de usuario
- ^ - Manual de comandos generales de NetBSD
- ^ - Manual del programador de Linux - Funciones de biblioteca
- ^ - Manual de funciones de la biblioteca NetBSD
- ^ Zoulas, Christos (27 de febrero de 2003). "archivo-3.41 ya está disponible" . Archivo (lista de correo) . Consultado el 1 de enero de 2013 .
- ^ Zoulas, Christos (24 de marzo de 2003). "archivo-4.00 ya está disponible" . Archivo (lista de correo) . Consultado el 1 de enero de 2013 .
enlaces externos
- : determinar el tipo de archivo: referencia de comandos y utilidades, la especificación única de UNIX , número 7 de The Open Group
- archivo de lista de correo
- lanzamientos de archivos
Páginas del manual
- - Manual del programador de Plan 9 , Volumen 1
- - Manual de comandos de usuario de Linux
- - Manual de funciones de la biblioteca NetBSD
- - Manual de funciones de la biblioteca de Linux
- - Manual de comandos generales de OpenBSD
Otro
- Fine Free File Command : página de inicio para la versión
file
utilizada en las principales distribuciones de BSD y Linux. - Archivo para Windows : página web del puerto nativo GnuWin32
file
para Windows de 32 bits. - El paquete libmagic-dev en packages.debian.org
- TrID , una alternativa que proporciona respuestas clasificadas (en lugar de solo una) basadas en estadísticas.