| 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
primera prueba
que da resultado determina el tipo de archivo que se muestra.
El tipo mostrado suele contener una de estas palabras:
text (el archivo
contiene solo caracteres imprimibles y algunos caracteres de control
habituales, y probablemente sea seguro leerlo en un terminal
ASCII),
executable
(el archivo contiene el resultado de compilar un programa en una forma
comprensible para algún núcleo UNIX), o
data, 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
conservar
estas palabras clave. 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
.br indica que
probablemente se trate de un archivo de entrada de
troff(1), del mismo modo que la palabra clave
struct
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¶
--apple- Hace que la orden
filemuestre 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. -b,--brief- No anteponga los nombres de archivo a las líneas de salida (modo breve).
-C,--compile- Escribe un archivo de salida magic.mgc que contiene una versión preanalizada del archivo o directorio mágico.
-c,--checking-printout- Muestra la representación analizada del archivo mágico para
comprobarla. Suele utilizarse junto con la opción
-mpara depurar un archivo mágico nuevo antes de instalarlo. -d- Muestra información interna de depuración por la salida de error estándar.
-E- 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.
-e,--excludenombre_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’.
--exclude-quiet- Igual que
--exclude, pero ignora las pruebas quefileno conoce. Está pensado para mantener la compatibilidad con versiones anteriores defile. --extension- Muestra una lista de extensiones válidas, separadas por barras, para el tipo de archivo encontrado.
-F,--separatorseparador- Utiliza la cadena especificada como separador entre el nombre del archivo y el resultado obtenido. El valor predeterminado es ‘:’.
-f,--files-fromarchivo_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@-farchivo_de_nombres”, y no: “-farchivo_de_nombres-F@”. -h,--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_CORRECTno está definida. -i,--mime- Hace que la orden
filemuestre 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-type,--mime-encoding- Igual que
-i, pero muestra solo los elementos especificados. -k,--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). -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). -L,--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. -m,--magic-filearchivos_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.
-N,--no-pad- No rellena los nombres de archivo con espacios para alinearlos en la salida.
-n,--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.
-p,--preserve-date- En sistemas que admiten utime(3) o
utimes(2), intenta conservar la hora de acceso de los
archivos analizados, como si
filenunca los hubiera leído. -P,--parameternombre=valor- Establece varios límites de parámetros.
Nombre Valor_predeterminado Explicación bytes1M número máximo de bytes que se leerán de un archivo elf_notes256 número máximo de notas ELF procesadas elf_phnum2K número máximo de secciones de programa ELF procesadas elf_shnum32K número máximo de secciones ELF procesadas elf_shsize128MB tamaño máximo de las secciones ELF procesadas encoding65K número máximo de bytes utilizados para determinar la codificación indir50 límite de recursión para números mágicos indirectos name150 límite de usos de las reglas mágicas name/use regex8K longitud máxima de las búsquedas con expresiones regulares -r,--raw- No convierte los caracteres no imprimibles a la forma \ooo. Normalmente,
filerepresenta los caracteres no imprimibles mediante su valor octal. -s,--special-files- Normalmente,
filesolo 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,filetambié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 quefileignore el tamaño de archivo indicado por stat(2), ya que algunos sistemas informan de un tamaño cero para las particiones sin procesar. -S,--no-sandbox- En los sistemas donde esté disponible libseccomp
(https://github.com/seccomp/libseccomp), la
opción
-Sdesactiva el aislamiento en entorno restringido (sandbox), habilitado de forma predeterminada. Esta opción es necesaria para quefileejecute programas externos de descompresión, es decir, cuando se especifica-zy no están disponibles los descompresores integrados. En los sistemas que no admiten este aislamiento, la opción no tiene efecto.Nota: esta versión de
filepara Debian se compiló sin compatibilidad con seccomp, por lo que esta opción no tiene efecto. -v,--version- Muestra la versión del programa y termina.
-z,--uncompress- Intenta examinar el contenido de los ficheros comprimidos.
-Z,--uncompress-noreport- Intenta examinar el contenido de los archivos comprimidos, pero informa solo sobre el contenido, no sobre la compresión.
-0,--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,
filemuestra, 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. --help- 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¶
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 |