Necesito reconocer el tipo de datos contenidos en archivos aleatorios. Soy nuevo en Linux.
Estoy planeando usar el file
comando para comprender qué tipo de datos tiene un archivo. Intenté ese comando y obtuve el resultado a continuación.
Alguien me sugirió que el file
comando mira los bytes iniciales de un archivo para determinar el tipo de datos. El file
comando no busca en absoluto una extensión de archivo. ¿Es eso correcto? Miré la página de manual pero sentí que era demasiado técnica. Agradecería si alguien puede proporcionar un enlace que tenga una explicación mucho más simple sobre cómo funciona el file
comando.
¿Cuáles son las diferentes respuestas posibles que podría obtener después de ejecutar el file
comando? Por ejemplo, en la transcripción a continuación obtengo JPEG, medios ISO, ASCII, etc.
La salida de la pantalla es la siguiente
m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data
Actualización 1
Gracias por las respuestas y me aclararon un par de cosas.
Entonces, si entiendo correctamente, la carpeta / usr / share / mime / magic tiene una base de datos que me dará cuáles son los formatos de archivo posibles actuales (salidas que puedo obtener cuando escribo el comando de archivo y lo sigo por un archivo). ¿Es eso correcto? ¿Es cierto que cada vez que la salida del comando 'Archivo' contiene la palabra "texto" se refiere a algo que puede leer con un visor de texto, y cualquier cosa sin "texto" es algún tipo de binario?
fuente
Respuestas:
file
utiliza varios tipos de prueba :Esto saldrá como
cannot open file: No such file or directory
.Esto se generará como
.: directory
y/dev/sda: block special
. Gran parte del formato para este y el punto anterior está parcialmente definido por POSIX : puede confiar en que ciertas cadenas estén en la salida.Esto es
foo: empty
.Estos dos usan la identificación del número mágico y son la parte más interesante del comando. Un número mágico es una secuencia especial de bytes que se encuentra en un lugar conocido en un archivo que identifica su tipo. Tradicionalmente, ese lugar son los primeros dos bytes, pero el término se ha ampliado aún más para incluir cadenas más largas y otras ubicaciones. Vea esta otra pregunta para obtener más detalles sobre los números mágicos en el
file
comando.El
file
comando tiene una base de datos de estos números y a qué tipo corresponden; esa base de datos generalmente está en/usr/share/mime/magic
y asigna el contenido del archivo a tipos MIME . El resultado allí (a menudo parte defile -i
si no lo obtiene por defecto) será un tipo de medio definido o una extensión. Las "pruebas sensibles al contexto" utilizan el mismo tipo de enfoque, pero son un poco más difusas. No se garantiza que ninguno de estos sea correcto, pero están destinados a ser buenas conjeturas.file
también tiene una base de datos que asigna esos tipos a nombres, por lo que sabrá que un archivo que ha identificadoapplication/pdf
puede describirse como aPDF document
. Esos nombres legibles por humanos también pueden estar localizados en otro idioma. Estos siempre serán una descripción de alto nivel del tipo de archivo de una manera que una persona lo entienda, en lugar de una máquina.La mayoría de los diferentes resultados que puede obtener vendrán de estas etapas. Puede consultar el
magic
archivo para obtener una lista de los tipos admitidos y cómo se identifican: mi sistema conoce 376 tipos diferentes. Los nombres dados y los tipos admitidos están determinados por el empaquetado y la configuración de su sistema, por lo que su sistema puede admitir más o menos que el mío, pero generalmente hay muchos de ellos.libmagic
también incluye pruebas codificadas adicionales en él.Esto es
foo: data
, cuando no pudo descubrir nada sobre el archivo.También hay otras pequeñas etiquetas que pueden aparecer. Un archivo ejecutable (
+x
) incluirá "executable
" en la salida, generalmente separados por comas. Lafile
implementación también puede conocer cosas adicionales sobre algunos formatos de archivo para poder describir puntos adicionales sobre ellos, como en su "PDF document, version 1.4
".fuente
Las páginas de manual suelen ser referencias breves, no introducciones. Comience con la página de Wikipedia .
file
solo mira el contenido del archivo, no el nombre del archivo. (También analiza algunos metadatos de archivo, como el tipo de archivo: directorio, enlace simbólico, canalización con nombre, etc. Pero en los casos que le interesan, lo que importa es el contenido).file
normalmente adivina el formato de un archivo al mirar los primeros bytes y compararlos con una tabla integrada de números mágicos . Por ejemplo, si el archivo comienza con%PDF
, luegofile
informa “documento PDF” (y continúa cavando para informar la versión mínima). Para los tipos de archivo que no comienzan con números mágicos, contiene heurística, por ejemplo, informe "texto ASCII" si los primeros bytes están todos en el rango ASCII imprimible.La salida de
file
es frágil: puede variar de una variante de Unix a una variante de Unix y de una versión a otra. En Linux, Cygwin y * BSD, elfile
comando admite una opción-i
que produce resultados predecibles en forma de un tipo de medio MIME (IANA gestiona la lista de tipos de medios estándar ). No hay tantos detalles y la salida es menos amigable para los humanos, pero la salida es predecible y amigable para la computadora.Úselo
file --mime-type
si solo desea el tipo MIME en sí mismo sin codificar información, por ejemploapplication/pdf
. Pase la opción-b
si no desea mostrar el nombre del archivo al comienzo de la línea.fuente
Me gustaría que leyeras la respuesta desde aquí . Algunos de los extractos de la respuesta son,
Desde la página de
file
comando man ,file
El comando realmente realiza 3 pruebas para determinar el tipo de archivo.Primer examen
Segunda prueba
Tercera prueba
El resultado del
file
comando generalmente se basa en el resultado de cualquiera de las pruebas que tiene éxito.Ahora, suponiendo que el programa C ++ comience así, y la tercera prueba tenga éxito,
Según la tercera prueba, la palabra clave
#include
especifica particularmente que es del programa tipo C , aunque tenemos un programa CPP en la mano. Ahora, cuando reviso,Ahora, los conceptos de orientación a objetos son específicos de C ++. Permítanos crear un archivo específico para C ++ .
Comienzo mi programa C ++ como,
Ahora, cuando publico
La salida es,
Básicamente, esto explica cómo
file
funciona el comando en archivos similares (en este ejemplo, el programa C y el programa C ++ se tratan por igual a menos y hasta que usemos las funciones orientadas a objetos específicas de C ++).fuente
Gilles y Michael Homer han proporcionado excelentes respuestas. a lo que me refiero. Para ver los tipos de archivos reconocidos en su sistema, intente ejecutar
Si eso da problemas de permisos, o no existe, entonces posiblemente
(puede necesitar ajustes dependiendo de su sistema) que debería mostrarle una lista de tipos de archivos en su sistema. Este comando puede tardar mucho tiempo en ejecutarse dependiendo del tamaño de su sistema de archivos raíz.
fuente