En el mundillo UNIX y GNU+Linux es normal utilizar el comando file cuando queremos obtener información sobre algún archivo. Las distros GNU+Linux en su versión «Desktop» (para instalar en un equipo domestico, un ordenador de escritorio) suelen llevarlo de base mientras que muchas versiones «minimal» más adecuadas para «server» puede que no lo lleven y tengas que instalarlo.
Y hablo de Archivos y Archivos de tipo Directorio y NO/NUNCA de ficheros ni carpetas.
En la actualidad nos es muy sencillo diferenciar los diferentes dispositivos de almacenamiento ya que estamos muy acostumbrados a verlos físicamente: un pendrive, un disco duro externo, un disco duro interno, una tarjeta microSD, …
El mundillo del almacenamiento es mucho más complejo de lo que aparentemente parece y justamente los dispositivos actuales de almacenamiento «flash» como los pendrives, las tarjetas de memoria, son una evolución de las memorias EEPROM (que eran de solo lectura y se usaban para grabar por ejemplo una BIOS).
Pero lo cierto es que no son lo más adecuado.
Los fabricantes de unidades flash (pendrives, memorias SD, memorias microSD, …) cifran la vida útil de estas unidades de almacenamiento entre los 10.000 y los 100.000 de ciclos de escritura, lo que viene a significar un mínimo de unos 30 años de resistencia a un ritmo de un ciclo de escritura/borrado diario (nadie que use eso realmente realizará una petición de escritura/lectura diaria, solamente si guardas un documento, haces un ls en diferentes directorios, … pues ya estaŕas agotando ese ciclo de vida en años).
Esa información nos da para pensar que montar un server con Nextcloud en una raspberry PI es temerario (por no decir ridículo) y nos da para en un futuro crear un software que escriba y lea y escriba y lea durante días para dejar inútiles los datos almacenados en estos dispositivos en posiblemente menos de una semana.
Por el momento simplemente quédate con la premisa de que lo que guardas en una unidad flash si no la enchufas en 10 años sufrirá deterioro y lo que era un 1 ahora es un 0. Un cisco. Y no olvides que si escribes y lees mucho te la vas a cargar en muy poco tiempo.
Eso está guay para una cámara de fotos que escribe una vez por foto o 2 o 3, pero no para servers en producción de una web que visitan miles de personas a diario. Y está guay para copiarte un archivo y llevarte eso a otro ordenador, pero no pidas peras al olmo.
No obstante, no nos desviemos del tema. Estamos hablando de dispositivos de almacenamiento y es bueno separarlos en «extraibles» y «no extraibles».
Una tarjeta microSD puedes sacarla y cuando la metas de nuevo si todo va bien los datos estarán allí. Pero necesita un lector/escritor, un dispositivo capaz de acceder físicamente a esos datos y también de software capaz de acceder a ese dispositivo desde el sistema operativo que uses.
Actualmente todo va super-integrado y nos olvidamos de eso. Pero si por ejemplo tenemos un disquete (un dispositivo extraíble) tendremos que tener una unidad en la que meter disquetes y de un software o sistema operativo capaz de comunicarse con ese dispositivo (drivers) y software capaz de leer el sistema de archivos en el que esa información está almacenada. Lo mismo para tarjetas SD y pendrives.
Eso nos lleva a que por ejemplo ordenadores como la PSP de Sony son capaces de leer discos UMD que tienen una vida útil de algo más de 100 años (mucho más que un CD, DVD y un Blu-ray de celulosa).
Y todo este rollo viene a que tenemos que ser capaces de entender que realmente los archivos son «chunks». Luego hablaremos de eso. Antes de eso lo que llamamos «extensiones de archivos».
Las extensiones de archivos son una mentira.
El término extensión del archivo es una cadena de caracteres que se anexa al nombre de un archivo y que habitualmente va precedida por un punto. Ejemplo:
Foto_veraneo.jpg
Logo.svg
Logo.png
cancionMolona.ogg
video.avi
DocumentoParaImprimir.pdf
peliConSubsYAudiosVariados.mkv
Pero amigo, la extensión es parte del nombre del archivo y no representa ningún tipo de obligación respecto a su contenido.
Sistemas operativos domésticos herederos de DOS como M$ Windos utilizan las extensiones de archivo para reconocer el formato del archivo.
Sistemas operativos de verdad como los basados en Unix (GNU+Linux por ejemplo) utilizan la extensión como simple convención. No las usan realmente para determinar el tipo de archivo, van mucho más allá.
En otros posibles posts hablaremos del 8.3 y de las limitaciones de algunos sistemas de archivos. Pero lo importante es quedarse con la copla de que sistemas operativos de juguete como M$ Windows se basan en el nombre del archivo y si renombras una foto jpg de tus vacaciones y le pones .avi te mostrarán un icono de un vídeo posiblemente.
Vamos ya, tras esta intro TLTR, a la mandanga del asunto.
El software file en realidad es un software de esos que vale más su contenido libre que su código.
De algún modo es como wp-scan que no es nada sin una base de datos de vulnerabilidades.
File es un software (ahora a eso lo llaman apps) que tiene como finalidad y objetivo informar sobre que es un archivo. Por ejemplo si usas «file veraneo.jpg» lo mismo te dice que eso es un archivo jpg pero lo mismo te dice que es un zip. File no se basa en el nombre del archivo ni su extensión, se la suda si tiene al final del nombre un .jpg, file se mete dentro e investiga.
File determina si un archivo es un jpeg ya que busca «chunks» (del inglés «trozo»), fragmentos de información de ese archivo en los que existen muchas veces datos que determinan el tipo de archivo.
Muchos archivos binarios se identifican mediante cabeceras (normalmente los calzan al inicio del archivo) con un número o unos bytes que formen una cadena reconocible.
Por ejemplo para hacer lo que hace file podríamos usar el comando «dd» así:
Gimp xcf Magic number code
$ dd skip=0 count=4 bs=1 status=none if=gimp.xcf | hd
00000000 67 69 6d 70 |gimp|
00000004
Jpeg Magic number code
$ dd skip=6 count=4 bs=1 status=none if=jpg.jpg | hd
00000000 4a 46 49 46 |JFIF|
00000004
Vorbis ogg Magic number code
$ dd skip=0 count=4 bs=1 status=none if=gimp.xcf | hd
00000000 4f 67 67 53 |OggS|
00000004
File por tanto, y tras tanto rollo, termina usando la magia para determinar el tipo de archivo.
Sobre el tema «ficheros/archivos y directorios/carpetas» en el mundo domestico M$ Windows a los archivos los llaman ficheros y a los directorios los llaman carpetas.
Pero todo son chunks de datos. DD nos sirve para copiar indicando un bit stream (bs) de la longitud que indiquemos y es por eso que podemos usarlo para copiar una ventana de bytes.
dd copia datos de un if (input file) a un of (output file). Por eso podemos usarlo para sacar por pantalla (output por defecto) el contenido de un archivo o de un sistema de archivos o de datos simplemente.
Y al final del post no nos queda otra que decir que file utiliza magia, los magic numbers y más . Pero que realmente no es que haga magia.
La magia no existe, existe el agua y azúcar como productos homeopáticos.
La magia no existe, existen las bases de datos de conocimiento.
La magia no existe, solo existen nuestras necesidades de creer en algo que nos venga a salvar como Pablo Iglesias o Jesucristo.
La magia no existe, el ser feliz no existe, solo existe querer ser feliz y así en un loop.
File existe y se basa en lo explicado. Larga vida a file y a quienes lo mantienen con vida y datos. Eso me hace muy feliz aunque no crea en la magia y si en el currazo de esta gente.