Manuales para la línea de comandos

Man » Manual de file en línea: documentación detallada en línea para la página de manual de file

🌍
file — determinar el tipo de archivo

SINOPSIS

file [-bcdEhiklLNnprsSvzZ0] [--apple] [--exclude-quiet] [--extension] [--mime-encoding]
[--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] [-P name=value]
file ...
file -C [-m magicfiles]
file [--help]

DESCRIPCIÓN

Esta página de manual documenta la versión 5.46 del comando file.

file realiza pruebas en cada argumento para intentar clasificarlo. Hay tres conjuntos de pruebas, que se realizan en este orden: pruebas del sistema de archivos, pruebas mágicas y pruebas de idioma. La primera prueba que tiene éxito hace que se imprima el tipo de archivo.

El tipo que se imprime normalmente contendrá una de las palabras "texto" (el archivo contiene solo caracteres imprimibles y algunos caracteres de control comunes y probablemente sea seguro de leer en una terminal ASCII), "ejecutable" (el archivo contiene el resultado de compilar un programa en un formato comprensible para algún kernel UNIX u otro), o "datos", que significa cualquier otra cosa (los datos suelen ser "binarios" o no imprimibles). Las excepciones son los formatos de archivo bien conocidos (archivos "core", archivos "tar") que se sabe que contienen datos binarios. Al modificar los archivos mágicos o el programa en sí, asegúrese de preservar estas palabras clave. Los usuarios dependen de saber que todos los archivos legibles de un directorio tienen la palabra "texto" impresa. No haga lo que hizo Berkeley y cambie "comandos de shell texto" a "script de shell".

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. Cualquier tipo de archivo conocido apropiado para el sistema en el que se está ejecutando (sockets, enlaces simbólicos o archivos con nombre (FIFOs) en los sistemas que los implementan) se intuye si están definidos en el archivo de encabezado del sistema <sys/stat.h>.

Las pruebas mágicas se utilizan para comprobar si hay archivos con datos en formatos fijos específicos. El ejemplo canónico de esto es un archivo ejecutable binario (programa compilado) "a.out", cuyo formato está definido en <elf.h>, <a.out.h> y posiblemente <exec.h> en el directorio de inclusión estándar. Estos archivos tienen un "número mágico" almacenado en un lugar fijo cerca del principio del archivo que le dice al sistema operativo UNIX que el archivo es un ejecutable binario y qué tipo de ellos. El concepto de "número mágico" se ha aplicado por extensión a los archivos de datos. Cualquier archivo con un identificador invariable en un desplazamiento fijo pequeño en el archivo normalmente se puede describir de esta manera. La información que identifica 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 $HOME/.magic.mgc o $HOME/.magic existen, se utilizarán en 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 ver si parece ser un archivo de texto. Los conjuntos de caracteres ASCII, ISO-8859-x, los conjuntos de caracteres ASCII extendidos no ISO de 8 bits (como los utilizados en los sistemas Macintosh e IBM PC), Unicode codificado en UTF-8, Unicode codificado en UTF-16 y los conjuntos de caracteres EBCDIC se pueden distinguir por los diferentes rangos y secuencias de bytes que constituyen el texto legible en cada conjunto. Si un archivo pasa alguna de estas pruebas, se informa su conjunto de caracteres. Los archivos ASCII, ISO-8859-x, UTF-8 y ASCII extendidos se identifican como "texto" porque serán mayormente legibles en casi cualquier terminal; UTF-16 y EBCDIC son solo "datos de caracteres" porque, aunque contienen texto, este texto requerirá traducción antes de que se pueda leer.

Además, file intentará determinar otras características de los archivos de tipo texto. Si las líneas de un archivo terminan con CR, CRLF o NEL, en lugar del LF estándar de Unix, esto se informará. También se identificarán los archivos que contienen secuencias de escape incrustadas u sobreimpresión.

Una vez que file ha determinado el conjunto de caracteres utilizado en un archivo de tipo texto, intentará determinar en qué idioma está escrito el archivo. Las pruebas de idioma buscan cadenas específicas (consulte <names.h>) que pueden aparecer en cualquier lugar de los primeros bloques del archivo. Por ejemplo, la palabra clave .br indica que el archivo probablemente sea un archivo de entrada de troff(1), al igual que la palabra clave struct indica un programa C. Estas pruebas son menos confiables que los dos grupos anteriores, por lo que se realizan al final. Las rutinas de prueba de idioma también prueban algunas cosas diversas (como los archivos tar(1)).

Cualquier archivo que no se pueda identificar como escrito en alguno de los conjuntos de caracteres enumerados anteriormente se identifica simplemente como "datos".

OPCIONES

--apple

Hace que el comando file genere el tipo de archivo y el código de creador tal como se usa en las versiones más antiguas de MacOS. El código consta de ocho letras, la primera que describe el tipo de archivo y la última el creador. Esta opción funciona correctamente solo para los formatos de archivo que tienen la salida de estilo apple definida.

-b, --brief

No agregue los nombres de los archivos al principio de las líneas de salida (modo breve).

-C, --compile

Escribe un archivo magic.mgc que contiene una versión preanalizada del archivo mágico o directorio.

-c, --checking-printout

Genera una salida de verificación de la forma analizada del archivo mágico. Esto se usa normalmente en conjunto con la opción -m para depurar un nuevo archivo mágico antes de instalarlo.

-d Imprime información de depuración interna en stderr.

-E En caso de errores del sistema de archivos (archivo no encontrado, etc.), en lugar de manejar el error como salida normal como lo exige POSIX y continuar, emita un mensaje de error y salga.

-e, --exclude testname
Excluye la prueba nombrada en testname de la lista de pruebas utilizadas para determinar el tipo de archivo. Los nombres de prueba válidos son:

apptype   Tipo de aplicación EMX (solo en EMX).

ascii     Varios tipos de archivos de texto (esta prueba intentará adivinar la codificación del texto, independientemente de la configuración de la opción ‘encoding’).

encoding  Diferentes codificaciones de texto para pruebas de magia suave.

tokens    Ignorado para compatibilidad con versiones anteriores.

cdf       Imprime detalles de los archivos de documentos compuestos.

compress  Comprueba y examina archivos comprimidos.

csv       Comprueba archivos de valores separados por comas.

elf       Imprime detalles de archivos ELF, siempre que las pruebas de magia suave estén habilitadas y se encuentre la magia elf.

json      Examina archivos JSON (RFC-7159) analizando su conformidad.

soft      Consulta archivos de magia.

simh      Examina archivos de cinta SIMH.

tar       Examina archivos tar verificando la suma de comprobación del encabezado tar de 512 bytes. La exclusión de esta prueba puede proporcionar una descripción del contenido más detallada mediante el método de magia suave.

text      Un sinónimo de ‘ascii’.

--exclude-quiet
Similar a --exclude, pero ignora las pruebas que el archivo no conoce. Esto está diseñado para la compatibilidad con versiones anteriores de file.

--extension
Imprime una lista separada por barras de las extensiones válidas para el tipo de archivo encontrado.

-F, --separator separator
Utiliza la cadena especificada como separador entre el nombre del archivo y el resultado del archivo devuelto. El valor predeterminado es ‘:’.

-f, --files-from namefile
Lee los nombres de los archivos que se van a examinar desde namefile (uno por línea) antes de la lista de argumentos. Debe estar presente namefile o al menos un argumento de nombre de archivo; para probar la entrada estándar, utiliza ‘-’ como argumento de nombre de archivo. Tenga en cuenta que namefile se desempaqueta y los nombres de archivo incluidos se procesan cuando se encuentra esta opción y antes de que se realice cualquier procesamiento adicional de opciones. Esto permite procesar varias listas de archivos con diferentes argumentos de línea de comandos en la misma invocación de file. Por lo tanto, si desea establecer el delimitador, debe hacerlo antes de especificar la lista de archivos, como: “-F @ -f namefile”, en lugar de: “-f namefile -F @”.

-h, --no-dereference
Esta opción hace que no se sigan los enlaces simbólicos (en los sistemas que admiten enlaces simbólicos). Este es el valor predeterminado si no está definida la variable de entorno POSIXLY\_CORRECT.

-i, --mime
Hace que el comando file emita cadenas de tipo MIME en lugar de las cadenas legibles por humanos más tradicionales. Por lo tanto, puede decir ‘text/plain; charset=us-ascii’ en lugar de “texto ASCII”.

--mime-type, --mime-encoding
Similar a -i, pero imprime solo el elemento o los elementos especificados.

-k, --keep-going
No se detenga en la primera coincidencia, continúe. Las coincidencias posteriores tendrán el prefijo de la cadena ‘\012- ’. (Si desea una nueva línea, consulte la opción -r). El patrón de magia con la mayor fuerza (consulte la opción -l) aparece primero.

-l, --list

Muestra una lista de patrones y su intensidad, ordenados de forma descendente por la intensidad de "magic(5)", que se utiliza para la coincidencia (véase también la opción -k).

-L, --dereference

Esta opción hace que se sigan los enlaces simbólicos, de la misma manera que la opción del mismo nombre en ls(1) (en los sistemas que admiten enlaces simbólicos). Esta es la opción predeterminada si la variable de entorno POSIXLY_CORRECT está definida.

-m, --magic-file magicfiles

Especifica una lista alternativa de archivos y directorios que contienen "magic". Puede ser un solo elemento o una lista separada por dos puntos. Si se encuentra un archivo "magic" compilado junto con un archivo o directorio, se utilizará en su lugar.

-N, --no-pad

No alinee los nombres de archivo en la salida.

-n, --no-buffer

Fuerza a que stdout se vacíe después de verificar cada archivo. Esto solo es útil si se verifica una lista de archivos. Está diseñado para ser utilizado por programas que desean obtener la salida del tipo de archivo desde una canalización.

-p, --preserve-date

En los sistemas que admiten utime(3) o utimes(2), intente preservar la hora de acceso de los archivos analizados, para que parezca que nunca se leyeron.

-P, --parameter name=value

Establece varios límites de parámetros.

Nombre Predeterminado Explicación bytes 1M número máximo de bytes a leer del archivo elf_notes 256 número máximo de notas ELF procesadas elf_phnum 2K número máximo de secciones de programa ELF procesadas elf_shnum 32K número máximo de secciones ELF procesadas elf_shsize 128MB tamaño máximo de sección ELF procesado encoding 65K número máximo de bytes para determinar la codificación indir 50 límite de recursión para "magic" indirecto name 100 límite de uso para "magic" de nombre/uso regex 8K límite de longitud para búsquedas de expresiones regulares

-r, --raw

No traduzca los caracteres no imprimibles a \ooo. Normalmente, file traduce los caracteres no imprimibles a su representación octal.

-s, --special-files

Normalmente, file solo intenta leer y determinar el tipo de archivos de argumento que stat(2) informa que son archivos regulares. Esto evita problemas, porque leer archivos especiales puede tener consecuencias peculiares. Especificar la opción -s hace que file también lea los archivos de argumento que son archivos especiales de bloque o de carácter. Esto es útil para determinar los tipos de sistema de archivos de los datos en particiones de disco sin procesar, que son archivos especiales de bloque. Esta opción también hace que file ignore el tamaño del archivo informado por stat(2), ya que en algunos sistemas informa un tamaño cero para las particiones de disco sin procesar.

-S, --no-sandbox

En los sistemas donde libseccomp (https://github.com/seccomp/libseccomp) está disponible, la opción -S deshabilita el "sandbox" que está habilitado de forma predeterminada. Esta opción es necesaria para que file ejecute programas de descompresión externos, es decir, cuando se especifica la opción -z y los descompresores integrados no están disponibles. En los sistemas donde el "sandbox" no está disponible, esta opción no tiene ningún efecto.


Nota: Esta versión de Debian del archivo se compiló sin soporte para seccomp, por lo que esta opción
no tiene efecto.

-v, --version

Imprime la versión del programa y sale.

-z, --uncompress

Intenta analizar el contenido de archivos comprimidos.

-Z, --uncompress-noreport

Intenta analizar el contenido de archivos comprimidos, pero informa sobre el contenido y no sobre la compresión.

-0, --print0

Imprime un carácter nulo ‘\0’ después del final del nombre del archivo. Útil para cut(1) la salida. Esto no afecta al separador, que sigue imprimiéndose.

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

--help  Imprime un mensaje de ayuda y sale.

ENTORNO

La variable de entorno MAGIC se puede utilizar para establecer el nombre de archivo mágico predeterminado. Si esta variable está configurada, file no intentará abrir $HOME/.magic. file añade “.mgc” al valor de esta variable según sea necesario. La variable de entorno POSIXLY_CORRECT controla (en los sistemas que admiten enlaces simbólicos) si file intentará seguir los enlaces simbólicos o no. Si está configurada, file sigue el enlace simbólico; de lo contrario, no lo hace. Esto también se controla mediante las opciones -L y -h.

ARCHIVOS

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

CÓDIGO DE SALIDA

file saldrá con 0 si la operación tuvo éxito o con un valor mayor que 0 si se produjo un error. Los siguientes errores provocan mensajes de diagnóstico, pero no afectan al código de salida del programa (como exige POSIX), a menos que se especifique -E: No se puede encontrar un archivo No se tiene permiso para leer un archivo No se puede determinar el tipo de archivo

EJEMPLOS

$ file file.c file /dev/{wd0a,hda}
file.c:   Texto de programa C
file:     Ejecutable ELF de 32 bits LSB, Intel 80386, versión 1 (SYSV),
enlazado dinámicamente (utiliza bibliotecas compartidas), sin símbolos
/dev/wd0a: bloque especial (0/0)
/dev/hda: bloque especial (3/0)

$ file -s /dev/wd0{b,d}
/dev/wd0b: datos
/dev/wd0d: sector de arranque x86

$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda:   Sector de arranque x86
/dev/hda1:  Sistema de archivos Linux/i386 ext2
/dev/hda2:  Sector de arranque x86
/dev/hda3:  Sector de arranque x86, tabla de particiones extendida
/dev/hda4:  Sistema de archivos Linux/i386 ext2
/dev/hda5:  Archivo de intercambio Linux/i386
/dev/hda6:  Archivo de intercambio Linux/i386
/dev/hda7:  Archivo de intercambio Linux/i386
/dev/hda8:  Archivo de intercambio Linux/i386
/dev/hda9:  vacío
/dev/hda10: vacío

$ 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

VER TAMBIÉN

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

CONFORMIDAD CON LOS ESTÁNDARES

Se cree que este programa supera la definición de la interfaz System V de FILE(CMD), en la medida en que se puede determinar a partir del lenguaje vago que contiene. Su comportamiento es en gran medida compatible con el programa System V del mismo nombre. Esta versión conoce más archivos mágicos, por lo que producirá una salida diferente (aunque más precisa) en muchos casos.


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

>10     string  language impress        (imPRESS data)

en un archivo magic 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 invertida, debe escaparse. Por ejemplo,

0      string          \begindata      Andrew Toolkit document

en un archivo magic existente tendría que cambiarse a

0      string          \\begindata     Andrew Toolkit document

Las versiones SunOS 3.2 y posteriores de Sun Microsystems incluyen un comando file derivado del de System V, pero con algunas extensiones. Esta versión difiere de la de Sun solo en aspectos menores. Incluye la extensión del operador '&', que se utiliza, por ejemplo, como

>16     long&0x7fffffff >0              not stripped

SEGURIDAD

En los sistemas donde libseccomp (https://github.com/seccomp/libseccomp) está disponible, file aplica la limitación de las llamadas al sistema a solo aquellas necesarias para el funcionamiento del programa. Esta aplicación no proporciona ningún beneficio de seguridad cuando se le pide a file que descomprima archivos de entrada ejecutando programas externos con la opción -z. Para habilitar la ejecución de descompresores externos, es necesario desactivar el sandboxing utilizando la opción -S.

DIRECTORIO MAGIC

Las entradas del archivo magic se han recopilado de diversas fuentes, principalmente de USENET, y las han aportado varios autores. Christos Zoulas (dirección a continuación) recopilará entradas de archivos magic adicionales o corregidas. Una consolidación de las entradas de los archivos magic se distribuirá periódicamente.

El orden de las entradas en el archivo magic es significativo. Dependiendo del sistema que esté utilizando, el orden en que se organicen puede ser incorrecto.

HISTORIA

Ha habido un comando file en cada UNIX desde al menos la versión Research 4 (página del manual con fecha de noviembre de 1973). La versión de System V introdujo un cambio importante: la lista externa de tipos magic. 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 ⟨_\⟩ sin consultar el código fuente de nadie más.

John Gilmore revisó el código de forma exhaustiva, mejorándolo con respecto a la primera versión. Geoff Collyer encontró varias deficiencias y proporcionó algunas entradas de archivos magic. Contribuciones del operador '&' de Rob McMahon, ⟨_\⟩, 1989.

Guy Harris, ⟨_\⟩, realizó muchos cambios desde 1993 hasta la actualidad.

Desarrollo y mantenimiento principales desde 1990 hasta la actualidad por Christos Zoulas ⟨_\⟩.

Modificado por Chris Lowth ⟨_\⟩, 2000: manejo de la opción -i para generar cadenas de tipo MIME, utilizando un archivo magic alternativo y una lógica interna.


Modificado por Eric Fischer ⟨_\⟩, julio de 2000, para identificar códigos de caracteres e intentar identificar los idiomas de los archivos no ASCII.

Modificado por Reuben Thomas ⟨_\⟩, 2007-2011, para mejorar el soporte MIME, fusionar MIME y magic no MIME, admitir directorios así como archivos de magic, aplicar muchas correcciones de errores, actualizar y corregir muchas magic, mejorar el sistema de compilación, mejorar la documentación y reescribir las vinculaciones de Python en Python puro.

La lista de contribuyentes al directorio ‘magic’ (archivos magic) es demasiado larga para incluirla aquí. Ustedes saben quiénes son; gracias. Muchos contribuyentes están incluidos en los archivos de código fuente.

Copyright (c) Ian F. Darwin, Toronto, Canadá, 1986-1999. Cubierto por el copyright estándar de la Distribución de Software Berkeley; consulte el archivo COPYING en la distribución de código fuente.

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

ERRORES

Por favor, informe de los errores y envíe parches al rastreador de errores en https://bugs.astron.com/ o a la lista de correo en ⟨_\⟩ (visite https://mailman.astron.com/mailman/listinfo/file primero para suscribirse).

POR HACER

Corrija la salida para que no se necesiten pruebas para las marcas MIME y APPLE en todas partes, y que la salida real se realice solo en un lugar. Esto necesita un diseño. Sugerencia: agregue posibles salidas a una lista y, luego, seleccione el último valor agregado (el más específico, con suerte) al final o use un valor predeterminado si la lista está vacía. Esto no debería ralentizar la evaluación.

El manejo de MAGIC_CONTINUE y la impresión de \012- entre entradas es torpe y complicado; refactorice y centralice.

Parte de la lógica de codificación está codificada en encoding.c y se puede mover a los archivos magic si tuvieramos una anotación !:charset.

Continúe eliminando todos los errores de magic. Consulte Debian BTS para obtener una buena fuente.

Almacene cadenas de longitud arbitraria, por ejemplo, para patrones %s, para que se puedan imprimir. Corrige el error de Debian #271672. Esto se puede hacer asignando cadenas en un grupo de cadenas, almacenando el grupo de cadenas al final del archivo magic y convirtiendo todos los punteros de cadena en desplazamientos relativos desde el grupo de cadenas.

Agregue sintaxis para desplazamientos relativos después del nivel actual (error de Debian #466037).

Haga que funcione file -ki, es decir, proporcione múltiples tipos MIME.

Agregue una biblioteca zip para que podamos echar un vistazo al interior de los documentos de Office2007 para imprimir más detalles sobre su contenido.

Agregue una opción para imprimir URL para las fuentes de las descripciones de los archivos.

Combine las búsquedas de scripts y agregue una forma de asignar nombres de ejecutables a tipos MIME (por ejemplo, tenga un valor magic para !:mime que provoque que la cadena resultante se busque en una tabla). Esto evitaría agregar la misma magic repetidamente para cada nuevo intérprete hash-bang.

Cuando un descriptor de archivo esté disponible, podemos omitir y ajustar el búfer en lugar del manejo de búfer torpe que hacemos ahora.


Corregir “name” y “use” para verificar la consistencia en tiempo de compilación (duplicados de “name”, “use” que apuntan a un “name” no definido). Hacer que “name” / “use” sean más eficientes manteniendo una lista ordenada de nombres.

Tratar el símbolo ^ como un caso especial para invertir el orden de los bytes en el analizador, de modo que no tenga que escaparse, y documentarlo.

Si los desplazamientos especificados internamente en el archivo exceden el tamaño del búfer (la variable HOWMANY en file.h), no nos desplazamos a ese desplazamiento, sino que desistimos. Sería mejor si la gestión del búfer se realizara cuando el descriptor de archivo está disponible, para que podamos desplazarnos por el archivo. Uno debe tener cuidado, sin embargo, porque esto tiene implicaciones en el rendimiento y, por lo tanto, en la seguridad, ya que uno puede ralentizar las cosas desplazándose repetidamente.

Ahora hay soporte para mantener búferes separados y tener desplazamientos desde el final del archivo, pero la gestión interna del búfer aún necesita una revisión.

DISPONIBILIDAD

Puede obtener la última versión del autor original mediante FTP anónimo en ftp.astron.com en el directorio /pub/file/file-X.YZ.tar.gz.