Scroll to navigation

FILE(1) General Commands Manual FILE(1)

NOMBRE

file — determina el tipo de archivo

SINOPSIS

file [-bcdEhiklLNnprsSvzZ0] [--apple] [--exclude-quiet] [--extension] [--mime-encoding] [--mime-type] [-e nombre_de_prueba] [-F separador] [-f archivo_de_nombres] [-m archivos_mágicos] [-P nombre=valor] file ... file -C [-m archivos_mágicos] file [--help]

DESCRIPCIÓN

Esta página del manual documenta la versión 5.47 de la orden file.

file comprueba cada argumento para intentar clasificarlo. Hay tres grupos de pruebas, que se realizan en este orden: pruebas del sistema de archivos, pruebas de números mágicos y pruebas de idioma. La prueba que da resultado determina el tipo de archivo que se muestra.

El tipo mostrado suele contener una de estas palabras: (el archivo contiene solo caracteres imprimibles y algunos caracteres de control habituales, y probablemente sea seguro leerlo en un terminal ASCII), (el archivo contiene el resultado de compilar un programa en una forma comprensible para algún núcleo UNIX), o , que significa cualquier otra cosa (los datos suelen ser “binarios” o no imprimibles). Hay excepciones para formatos de archivo conocidos, como los volcados de memoria y los archivos tar, que contienen datos binarios. Al modificar archivos mágicos o el propio programa, asegúrese de . Los usuarios cuentan con que todos los archivos legibles de un directorio se identifiquen con la palabra “text”. No haga como Berkeley, que cambió “shell commands text” por “shell script”.

Las pruebas del sistema de archivos se basan en examinar el resultado de una llamada al sistema stat(2). El programa comprueba si el archivo está vacío o si es algún tipo de archivo especial. Los tipos de archivo conocidos y pertinentes para el sistema en uso (sockets, enlaces simbólicos o tuberías con nombre [FIFO], en los sistemas que los implementan) se deducen si están definidos en el archivo de cabecera del sistema <sys/stat.h>.

Las pruebas de números mágicos se utilizan para comprobar archivos con datos en formatos fijos específicos. El ejemplo clásico es un archivo ejecutable binario (un programa compilado), a.out, cuyo formato se define en <elf.h>, <a.out.h> y posiblemente <exec.h> en el directorio estándar de archivos de cabecera. Estos archivos contienen un “número mágico” almacenado en una ubicación concreta cerca del principio, que indica al sistema operativo UNIX que el archivo es un ejecutable binario y cuál de sus distintos tipos es. El concepto de “número mágico” se ha extendido también a los archivos de datos. Por lo general, cualquier archivo que tenga un identificador invariable en una posición fija cercana al principio puede describirse de este modo. La información que permite identificar estos archivos se lee de /etc/magic y del archivo mágico compilado /usr/share/misc/magic.mgc, o de los archivos del directorio /usr/share/misc/magic si el archivo compilado no existe. Además, si existe $HOME/.magic.mgc o $HOME/.magic, se utilizará con preferencia a los archivos mágicos del sistema.

Si un archivo no coincide con ninguna de las entradas del archivo mágico, se examina para determinar si parece ser un archivo de texto. Los juegos de caracteres ASCII, ISO-8859-x, ASCII extendido de 8 bits no ISO (como los utilizados en sistemas Macintosh y PC IBM), Unicode codificado en UTF-8, Unicode codificado en UTF-16 y EBCDIC pueden distinguirse por los distintos rangos y secuencias de bytes que constituyen texto imprimible en cada juego. Si un archivo supera alguna de estas pruebas, se informa de su juego de caracteres. Los archivos ASCII, ISO-8859-x, UTF-8 y ASCII extendido se identifican como “texto”, porque suelen ser legibles en casi cualquier terminal; UTF-16 y EBCDIC se identifican únicamente como “datos de caracteres”, porque, aunque contienen texto, este requiere una conversión antes de poder leerse. Además, file intenta determinar otras características de los archivos de texto. Si las líneas terminan en CR, CRLF o NEL, en lugar del LF estándar de Unix, se indica. También se identifican los archivos que contienen secuencias de escape incrustadas o sobreimpresiones.

Una vez que file ha determinado el juego de caracteres utilizado en un archivo de texto, intenta determinar en qué idioma está escrito. Las pruebas de idioma buscan cadenas concretas (véase <names.h>) que pueden aparecer en cualquier lugar de los primeros bloques de un archivo. Por ejemplo, la palabra clave indica que probablemente se trate de un archivo de entrada de troff(1), del mismo modo que la palabra clave indica un programa en C. Estas pruebas son menos fiables que los dos grupos anteriores, por lo que se realizan al final. Las rutinas de prueba de idioma también comprueban algunos formatos diversos, como los archivos tar(1) y JSON.

Todo archivo que no pueda identificarse como escrito en alguno de los juegos de caracteres anteriores se clasifica simplemente como “datos”.

OPCIONES

Hace que la orden file muestre el tipo de archivo y el código de creador utilizados por las versiones antiguas de MacOS. El código consta de ocho letras: las cuatro primeras describen el tipo de archivo y las cuatro últimas, el creador. Esta opción solo funciona correctamente con formatos de archivo que tengan definida la salida al estilo de Apple.
, --brief
No anteponga los nombres de archivo a las líneas de salida (modo breve).
, --compile
Escribe un archivo de salida magic.mgc que contiene una versión preanalizada del archivo o directorio mágico.
, --checking-printout
Muestra la representación analizada del archivo mágico para comprobarla. Suele utilizarse junto con la opción -m para depurar un archivo mágico nuevo antes de instalarlo.
Muestra información interna de depuración por la salida de error estándar.
Si se producen errores del sistema de archivos (por ejemplo, si no se encuentra un archivo), en vez de tratar el error como una salida normal y continuar, como exige POSIX, muestra un mensaje de error y termina.
, --exclude nombre_de_prueba
Excluye de la lista de pruebas utilizadas para determinar el tipo de archivo la prueba indicada en nombre_de_prueba. Los nombres de prueba válidos son:
apptype
Tipo de aplicación EMX (solo en EMX).
ascii
Diversos tipos de archivos de texto (esta prueba intenta deducir la codificación del texto, independientemente del valor de la opción ‘encoding’).
encoding
Distintas codificaciones de texto para las pruebas de números mágicos blandos.
tokens
Se ignora por compatibilidad con versiones anteriores.
cdf
Muestra información detallada de archivos de documentos compuestos.
compress
Comprueba si hay archivos comprimidos y examina su contenido.
csv
Comprueba archivos CSV (valores separados por comas).
elf
Muestra información detallada de archivos ELF, siempre que estén habilitadas las pruebas de números mágicos blandos y se encuentre la firma mágica ELF.
json
Examina archivos JSON (RFC 7159) analizándolos para comprobar que cumplen el formato.
soft
Consulta los archivos mágicos.
simh
Examina archivos de cinta SIMH.
tar
Examina archivos tar comprobando la suma de verificación de la cabecera tar de 512 bytes. Excluir esta prueba puede proporcionar una descripción más detallada del contenido mediante el método de números mágicos blandos.
text
Sinónimo de ‘ascii’.
Igual que --exclude, pero ignora las pruebas que file no conoce. Está pensado para mantener la compatibilidad con versiones anteriores de file.
Muestra una lista de extensiones válidas, separadas por barras, para el tipo de archivo encontrado.
, --separator separador
Utiliza la cadena especificada como separador entre el nombre del archivo y el resultado obtenido. El valor predeterminado es ‘:’.
, --files-from archivo_de_nombres
Lee los nombres de los archivos que se van a examinar desde archivo_de_nombres (uno por línea) antes de la lista de argumentos. Debe indicarse archivo_de_nombres o al menos un nombre de archivo como argumento; para comprobar la entrada estándar, utilice ‘-’ como nombre de archivo. Tenga en cuenta que archivo_de_nombres se procesa y sus nombres de archivo se incorporan a la lista de argumentos cuando se encuentra esta opción, antes de procesar las opciones posteriores. Esto permite procesar varias listas de archivos con distintos argumentos de línea de órdenes en una misma invocación de file. Por tanto, si desea establecer el separador, debe hacerlo antes de indicar la lista de archivos, por ejemplo: “-F @ -f archivo_de_nombres”, y no: “-f archivo_de_nombres -F @”.
, --no-dereference
Esta opción hace que no se sigan los enlaces simbólicos (en los sistemas que los admiten). Es el comportamiento predeterminado si la variable de entorno POSIXLY_CORRECT no está definida.
, --mime
Hace que la orden file muestre cadenas de tipo MIME en lugar de las descripciones tradicionales, más legibles para las personas. Por ejemplo, puede mostrar ‘text/plain; charset=us-ascii’ en vez de “texto ASCII”.
, --mime-encoding
Igual que -i, pero muestra solo los elementos especificados.
, --keep-going
No se detiene en la primera coincidencia, sino que continúa. A las coincidencias posteriores se les antepone la cadena ‘\012- ’. (Si desea un salto de línea, consulte la opción -r.) Primero se muestra el patrón mágico con mayor fuerza (véase la opción -l).
, --list
Muestra una lista de patrones y su fuerza, ordenados de mayor a menor según la fuerza de magic(5) utilizada para la concordancia (véase también la opción -k).
, --dereference
Esta opción hace que se sigan los enlaces simbólicos, como sucede con la opción del mismo nombre de ls(1) (en los sistemas que admiten enlaces simbólicos). Es el comportamiento predeterminado si está definida la variable de entorno POSIXLY_CORRECT.
, --magic-file archivos_mágicos
Especifica una lista alternativa de archivos y directorios que contienen reglas mágicas. Puede ser un único elemento o una lista separada por dos puntos. Si junto a un archivo o directorio se encuentra un archivo mágico compilado, se utilizará este en su lugar.
, --no-pad
No rellena los nombres de archivo con espacios para alinearlos en la salida.
, --no-buffer
Fuerza el vaciado de la salida estándar después de comprobar cada archivo. Esto solo resulta útil cuando se comprueba una lista de archivos. Está pensado para programas que necesitan obtener información sobre los tipos de archivo a través de una tubería.
, --preserve-date
En sistemas que admiten utime(3) o utimes(2), intenta conservar la hora de acceso de los archivos analizados, como si file nunca los hubiera leído.
, --parameter nombre=valor
Establece varios límites de parámetros.
1M número máximo de bytes que se leerán de un archivo
256 número máximo de notas ELF procesadas
2K número máximo de secciones de programa ELF procesadas
32K número máximo de secciones ELF procesadas
128MB tamaño máximo de las secciones ELF procesadas
65K número máximo de bytes utilizados para determinar la codificación
50 límite de recursión para números mágicos indirectos
150 límite de usos de las reglas mágicas name/use
8K longitud máxima de las búsquedas con expresiones regulares
, --raw
No convierte los caracteres no imprimibles a la forma \ooo. Normalmente, file representa los caracteres no imprimibles mediante su valor octal.
, --special-files
Normalmente, file solo intenta leer y determinar el tipo de los archivos que stat(2) identifica como archivos ordinarios. Esto evita problemas, ya que la lectura de archivos especiales puede tener consecuencias peculiares. Al especificar la opción -s, file también lee los archivos de argumento que sean archivos especiales de bloques o de caracteres. Esto resulta útil para determinar los tipos de sistema de archivos de los datos de particiones de disco sin procesar, que son archivos especiales de bloques. Esta opción también hace que file ignore el tamaño de archivo indicado por stat(2), ya que algunos sistemas informan de un tamaño cero para las particiones sin procesar.
, --no-sandbox
En los sistemas donde esté disponible libseccomp (https://github.com/seccomp/libseccomp), la opción -S desactiva el aislamiento en entorno restringido (sandbox), habilitado de forma predeterminada. Esta opción es necesaria para que file ejecute programas externos de descompresión, es decir, cuando se especifica -z y no están disponibles los descompresores integrados. En los sistemas que no admiten este aislamiento, la opción no tiene efecto.

esta versión de file para Debian se compiló sin compatibilidad con seccomp, por lo que esta opción no tiene efecto.

, --version
Muestra la versión del programa y termina.
, --uncompress
Intenta examinar el contenido de los ficheros comprimidos.
, --uncompress-noreport
Intenta examinar el contenido de los archivos comprimidos, pero informa solo sobre el contenido, no sobre la compresión.
, --print0
Escribe un carácter nulo ‘\0’ al final del nombre de archivo. Esto facilita el procesamiento de la salida con cut(1). No afecta al separador, que se sigue imprimiendo.

Si esta opción se repite más de una vez, file muestra, para cada entrada, solo el nombre de archivo seguido de un NUL, y después la descripción (o el texto ERROR:) seguida de un segundo NUL.

Muestra un mensaje de ayuda y termina.

ENTORNO

La variable de entorno MAGIC permite establecer el nombre predeterminado del archivo mágico. Si se define esa variable, file no intentará abrir $HOME/.magic. file añade “.mgc” al valor de esta variable cuando corresponde. La variable de entorno POSIXLY_CORRECT controla, en los sistemas que admiten enlaces simbólicos, si file intenta seguirlos. Si está definida, file sigue los enlaces simbólicos; de lo contrario, no lo hace. Este comportamiento también se controla mediante las opciones -L y -h.

ARCHIVOS

/usr/share/misc/magic.mgc
Lista compilada predeterminada de reglas mágicas.
/usr/share/misc/magic
Directorio que contiene los archivos mágicos predeterminados.

ESTADO DE SALIDA

file termina con el estado 0 si la operación se realiza correctamente y con un estado >0 si se produce un error. Los errores siguientes generan mensajes de diagnóstico, pero no afectan al código de salida del programa (como exige POSIX), salvo que se especifique -E:

  • No se encuentra un archivo
  • No hay permiso para leer un archivo
  • No se puede determinar el tipo de archivo

EJEMPLOS

$ file file.c file /dev/{wd0a,hda}
file.c:	  C program text
file:	  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
	  dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)

$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector

$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda:   x86 boot sector
/dev/hda1:  Linux/i386 ext2 filesystem
/dev/hda2:  x86 boot sector
/dev/hda3:  x86 boot sector, extended partition table
/dev/hda4:  Linux/i386 ext2 filesystem
/dev/hda5:  Linux/i386 swap file
/dev/hda6:  Linux/i386 swap file
/dev/hda7:  Linux/i386 swap file
/dev/hda8:  Linux/i386 swap file
/dev/hda9:  empty
/dev/hda10: empty

$ file -i file.c file /dev/{wd0a,hda}
file.c:	     text/x-c
file:	     application/x-executable
/dev/hda:    application/x-not-regular-file
/dev/wd0a:   application/x-not-regular-file

VÉASE TAMBIÉN

hexdump(1), od(1), strings(1), magic(5)

CONFORMANCIA CON ESTÁNDARES

Se considera que este programa supera la definición de interfaz de System V de FILE(CMD), hasta donde puede deducirse del lenguaje impreciso que contiene. Su comportamiento es mayormente compatible con el programa de System V del mismo nombre. Sin embargo, esta versión reconoce más reglas mágicas, por lo que en muchos casos producirá resultados diferentes, aunque más precisos.

La diferencia significativa entre esta versión y la de System V es que esta versión trata cualquier espacio en blanco como delimitador, por lo que los espacios en las cadenas de patrones deben escaparse. Por ejemplo,

>10	string	language impress	(imPRESS data)

en un fichero mágico existente tendría que cambiarse a

>10	string	language\ impress	(imPRESS data)

Además, en esta versión, si una cadena de patrón contiene una barra inversa, esta debe escaparse. Por ejemplo

0	string		\begindata	Andrew Toolkit document

en un fichero mágico existente tendría que cambiarse a

0	string		\\begindata	Andrew Toolkit document

Las versiones 3.2 y posteriores de SunOS, de Sun Microsystems, incluyen una orden file derivada de la de System V, pero con algunas extensiones. Esta versión solo difiere de la de Sun en algunos detalles. Incluye la ampliación del operador ‘&’, que se utiliza, por ejemplo,

>16	long&0x7fffffff	>0		not stripped

SEGURIDAD

En los sistemas donde esté disponible libseccomp (https://github.com/seccomp/libseccomp), file aplica restricciones para limitar las llamadas al sistema a las estrictamente necesarias para ejecutar el programa. Esta restricción no aporta ninguna ventaja de seguridad cuando se solicita a file que descomprima archivos de entrada mediante programas externos con la opción -z. Para permitir la ejecución de descompresores externos, hay que desactivar el aislamiento mediante la opción -S.

DIRECTORIO MÁGICO

Las entradas del archivo mágico se han recopilado de diversas fuentes, principalmente USENET, y han sido aportadas por numerosos autores. Christos Zoulas (cuya dirección aparece más abajo) recopilará nuevas entradas o correcciones para el archivo mágico. Periódicamente se distribuirá una recopilación consolidada de estas entradas.

El orden de las entradas del archivo mágico es importante. Según el sistema que se utilice, el orden en que se combinan puede ser incorrecto.

HISTORIAL

Ha existido una orden file en todas las versiones de UNIX desde al menos Research Version 4 (la página del manual está fechada en noviembre de 1973). La versión de System V introdujo un cambio importante: la lista externa de tipos mágicos. Esto ralentizó ligeramente el programa, pero lo hizo mucho más flexible.

Este programa, basado en la versión de System V, fue escrito por Ian Darwin ⟨ian@darwinsys.com⟩ sin consultar el código fuente de otras personas.

John Gilmore revisó el código en profundidad y lo mejoró con respecto a la primera versión. Geoff Collyer detectó varias deficiencias y aportó algunas entradas para el archivo mágico. Rob McMahon ⟨cudcv@warwick.ac.uk⟩ contribuyó al operador ‘&’ en 1989.

Guy Harris, ⟨guy@netapp.com⟩, realizó numerosos cambios desde 1993 hasta la actualidad.

Desarrollo y mantenimiento principales desde 1990 hasta la actualidad a cargo de Christos Zoulas ⟨christos@astron.com⟩.

Modificaciones de Chris Lowth ⟨chris@lowth.com⟩ en 2000: gestión de la opción -i para mostrar cadenas de tipos MIME, mediante un archivo mágico alternativo y lógica interna.

Modificaciones de Eric Fischer ⟨enf@pobox.com⟩ en julio de 2000 para identificar códigos de caracteres e intentar determinar los idiomas de archivos que no están en ASCII.

Modificaciones de Reuben Thomas ⟨rrt@sc3d.org⟩ entre 2007 y 2011 para mejorar la compatibilidad con MIME, combinar las reglas mágicas MIME y no MIME, admitir directorios además de archivos mágicos, aplicar numerosas correcciones de errores, actualizar y corregir muchas reglas mágicas, mejorar el sistema de compilación y la documentación, y reescribir los enlaces de Python en Python puro.

La lista de colaboradores del directorio ‘magic’ (archivos mágicos) es demasiado extensa para incluirla aquí. Sabéis quiénes sois; gracias. Muchos colaboradores aparecen en los archivos fuente.

ADVERTENCIA LEGAL

Copyright (c) Ian F. Darwin, Toronto, Canadá, 1986-1999. Está sujeto a la licencia estándar de Berkeley Software Distribution; véase el archivo COPYING incluido en la distribución del código fuente.

Los archivos tar.h e is_tar.c fueron escritos por John Gilmore a partir de su programa tar(1) de dominio público y no están cubiertos por la licencia indicada anteriormente.

ERRORES

Comuníquese los errores y envíe parches mediante el sistema de seguimiento de errores en https://bugs.astron.com/ o a la lista de correo ⟨file@astron.com⟩ (visite primero https://mailman.astron.com/mailman/listinfo/file para suscribirse).

TAREAS PENDIENTES

Corregir la salida para no tener que comprobar las opciones MIME y APPLE en tantos lugares y para que la salida real se genere en un único lugar. Esto requiere diseñar una solución. Una posibilidad es añadir las salidas posibles a una lista y elegir al final el último valor añadido (que, en principio, será el más específico), o utilizar un valor predeterminado si la lista está vacía. Esto no debería ralentizar la evaluación.

El tratamiento de MAGIC_CONTINUE y la impresión de \012- entre entradas son engorrosos y complicados; refactorizar y centralizar ese código.

Parte de la lógica de codificación está fijada en el código de encoding.c y podría trasladarse a los archivos mágicos si existiera una anotación !:charset.

Seguir corrigiendo todos los errores de las reglas mágicas. El sistema de seguimiento de errores de Debian (BTS) es una buena fuente de información.

Almacenar cadenas de longitud arbitraria, por ejemplo para patrones %s, de modo que puedan imprimirse. Esto corrige el error n.º 271672 de Debian. Puede hacerse reservando las cadenas en un conjunto de cadenas (string pool), almacenándolo al final del archivo mágico y convirtiendo todos los punteros a cadenas en desplazamientos relativos respecto a dicho conjunto.

Añadir sintaxis para desplazamientos relativos después del nivel actual (error n.º 466037 de Debian).

Hacer que file -ki funcione, es decir, que pueda proporcionar varios tipos MIME.

Añadir una biblioteca ZIP para poder examinar documentos de Office 2007 y mostrar más detalles sobre su contenido.

Añadir una opción para mostrar las URL de las fuentes de las descripciones de los archivos.

Combinar las búsquedas de scripts y añadir una forma de asignar nombres de ejecutables a tipos MIME (por ejemplo, disponer de un valor mágico para !:mime que haga que la cadena resultante se busque en una tabla). Así se evitaría añadir repetidamente la misma regla mágica para cada nuevo intérprete indicado mediante una línea shebang.

Cuando haya disponible un descriptor de archivo, se puede omitir y ajustar el búfer en lugar de utilizar la gestión de búferes poco elegante que se emplea ahora.

Hacer que “name” y “use” comprueben la coherencia durante la compilación (duplicados de “name” y referencias “use” a un “name” inexistente). Mejorar la eficiencia de “name” / “use” manteniendo una lista ordenada de nombres. Tratar especialmente el carácter ^ en el analizador para invertir el orden de bytes sin necesidad de escaparlo y documentar esta función.

Si los desplazamientos especificados internamente en el archivo superan el tamaño del búfer (la variable HOWMANY de file.h), no se busca en ese desplazamiento, sino que se abandona la operación. Sería mejor gestionar los búferes cuando el descriptor de archivo esté disponible, para poder desplazarse por el archivo. No obstante, hay que tener cuidado, porque esto afecta al rendimiento y, por tanto, a la seguridad: las búsquedas repetidas pueden ralentizar el programa.

Actualmente se admite mantener búferes separados y utilizar desplazamientos desde el final del archivo, pero la gestión interna de búferes aún necesita una revisión importante.

DISPONIBILIDAD

Se puede obtener la versión más reciente del autor original mediante FTP anónimo en ftp.astron.com, en la ruta /pub/file/file-X.YZ.tar.gz.

TRADUCCIÓN

La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org

17 de junio de 2025 Nixpkgs