archivo (comando)

Programa estándar de Unix
archivo
Desarrollador(es)Laboratorios Bell de AT&T
Lanzamiento inicial1973 como parte de Unix Research Version 4 ; reimplementación de código abierto en 1986 ( 1973 ) ( 1986 )
Repositoriogithub.com/archivo/archivo
Escrito endo
Sistema operativoUnix , similar a Unix , Plan 9 , IBM i
PlataformaMultiplataforma
TipoDetector de tipo de archivo
LicenciaLicencia BSD , Plan CDDL
9: Licencia MIT
Sitio webdarwinsys.com/archivo/

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

Historia

La versión original filese 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 filecomando también ha sido portado 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:

  1. Si no se puede leer el archivo, o su tipo de archivo Unix no está determinado, el fileprograma indicará que el archivo fue procesado pero su tipo no está determinado.
  2. fileDebe poder determinar los tipos de directorio , FIFO , socket , archivo especial de bloque y archivo especial de caracteres.
  3. Los archivos de longitud cero se identifican como tales
  4. Se considera una parte inicial del archivo y filese utilizan pruebas sensibles a la posición.
  5. Se considera todo el archivo y filese deben utilizar pruebas sensibles al contexto.
  6. El archivo se identifica como un dataarchivo

fileLas 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 filecomando 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/magico una ubicación similar.

Uso

El SUS [4] contempla las siguientes opciones:

  • -M file, especifica un archivo especialmente formateado que contenga pruebas sensibles a la posición; las pruebas sensibles a la posición predeterminadas y las pruebas sensibles al contexto no se realizarán.
  • -m file, como para -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 al contexto en el archivo dado; este es el comportamiento predeterminado a menos que se especifique -Mo .-m
  • -h, no desreferencia los enlaces simbólicos que apuntan a un archivo o directorio existente.
  • -L, desreferenciar el 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 bloques, 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.

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.

Ejemplos

$ file file.carchivo.c: texto del programa en C 
$ file programprograma: 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 fileque se deben leer los archivos del dispositivo e intentar identificar su contenido en lugar de simplemente identificarlos como archivos del dispositivo. Normalmente fileno 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.gzcompression.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.ppmdata.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.

Biblioteca Libmagic

A partir de la versión 4.00 de la versión de Ian Darwin/Christos Zoulas de file, la funcionalidad de filese 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]

Referencias

  1. ^ "Fuente de la página de manual "archivo" de UNIX V4". Archivado desde el original el 2019-12-10 . Consultado el 2022-03-13 .
  2. ^ La historia temprana de este programa está registrada en su repositorio CVS privado; consulte [1] Archivado el 1 de abril de 2017 en Wayback Machine el registro del programa principal
  3. ^ "Programación Qshell para IBM System i versión 7.2" (PDF) . IBM . Archivado (PDF) del original el 2021-03-05 . Consultado el 2020-09-05 .
  4. ^ "Especificaciones básicas de The Open Group, número 7: comando de archivo". Archivado desde el original el 12 de octubre de 2018. Consultado el 20 de agosto de 2014 .
  5. ^ ab file(1) –  Manual de usuario de Linux – Comandos de usuario
  6. ^ file(1)  –  Manual de comandos generales de NetBSD
  7. ^ libmagic(3)  –  Manual del programador de Linux – Funciones de la biblioteca
  8. ^ libmagic(3)  –  Manual de funciones de la biblioteca NetBSD
  9. ^ Zoulas, Christos (27 de febrero de 2003). «El archivo 3.41 ya está disponible». Archivo (Lista de correo). Archivado desde el original el 4 de marzo de 2016. Consultado el 1 de enero de 2013 .
  10. ^ Zoulas, Christos (24 de marzo de 2003). «El archivo 4.00 ya está disponible». Archivo (Lista de correo). Archivado desde el original el 28 de diciembre de 2016. Consultado el 1 de enero de 2013 .

Páginas del manual

  • file(1) –  Manual de usuario de Linux – Comandos de usuario
  • libmagic(3) –  Manual de funciones de la biblioteca NetBSD
  • libmagic(3) –  Manual del programador de Linux – Funciones de la biblioteca
  • file(1) –  Manual de comandos generales de OpenBSD : una implementación que no es de Ian Darwin
  • file(1) –  Manual del programador de Plan 9 , volumen 1: una implementación que no es de Ian Darwin ni del SUS

Otro

  • Comando de archivo gratuito fino: página de inicio de la versión de Ian Darwin fileutilizada en las principales distribuciones de BSD y Linux.
    • lista de correo
    • comunicados
  • binwalk, una herramienta de análisis de firmware que crea archivos basándose en firmas libmagic
  • TrID, una alternativa que ofrece respuestas clasificadas (en lugar de una sola) basadas en estadísticas.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Archivo_(comando)&oldid=1226206592"