¿Cómo identifica Linux los tipos de archivo sin extensiones? ¿Y por qué no puede hacerlo Windows?

Linux no identifica necesariamente los tipos de archivo sin extensiones. Y Windows tampoco depende de las extensiones como se podría pensar. Empecemos por el núcleo. (Utilizo la palabra Linux y Unix indistintamente porque muchas de las cosas que se ven en Linux provienen de la herencia BSD de los Laboratorios Bell.)

A un nivel fundamental, Unix tomó la decisión hace MUCHO tiempo, de proporcionar representación de archivos para tantas "cosas" como puedan. ¿Lista de procesos en ejecución? Archivo. ¿Tuberías? Archivo. ¿Soportes del kernel? Archivo. ¿Información de la memoria? Archivo. ¿Dispositivos de bloque? Archivo. ¿Directorios? Archivo. ¿Dispositivos USB? Archivo. ¿Puerto serie? Archivo.

Esto significaba que para muchas situaciones, los *nixes comenzaban con muchos más metadatos atribuibles a un archivo (mucho más de lo que Windows soportaba originalmente - NT arregló mucho de eso.)

Esto combinado con el hecho de que en los primeros días de desarrollo de Linux no tenían el tiempo para escribir herramientas complejas/elegantes, y la filosofía unix de reutilizar pequeñas herramientas repetidamente, significaba que la MAYORÍA de los archivos eran legibles por la máquina (aka, basados en texto ASCII.) El hecho de que no había nada "propietario" que ocultar y que no había promociones que ganar inventando nuevos formatos de archivo en sus propias "orgs" incentivó esto aún más.

Esto significó que MUCHOS archivos en Linux están simplemente basados en texto. Esto no significa que se pueda "decir" un tipo de archivo mágicamente todo el tiempo. Sólo porque algo sea ASCII no significa que sea el mismo "tipo". Por ejemplo, si vas a /etc/ hay un montón de archivos de configuración que son de "tipo" archivo de configuración. ¿Pero qué significa eso? Cada archivo tiene un formato diferente, una sintaxis diferente. Un gran número de archivos se infiere simplemente de forma intuitiva a partir de su ubicación o nombre (el programa foo, leerá /etc/foo.d/*.conf - realmente no tiene idea de cómo detectar que los archivos son apropiados o están destinados a él.)

Ahora bien, más allá de esto, algunos programas pueden utilizar un número mágico en la cabecera de un archivo. Especialmente para distinguir entre los diferentes tipos de archivos ejecutables - archivos ELF vs shell scripts, bibliotecas dinámicas (incluso they'll utilizar la extensión .so para la ayuda sin embargo y se encuentra bajo algún tipo de directorio /lib - ver la intuitiva dos métodos anteriores.), etc.

Sin embargo, para hacer esto una verdadera comparación de manzanas a las manzanas, puede linux simplemente mirar a un y diferenciar entre si se necesita el programa de documentos LibreOffice? ¿Qué hay de los registros de buceo de Subsurface's? ¿O los archivos de nómina de su programa de contabilidad personalizado? png, jpeg, mpeg, avi, gif, etc.?

Veamos, los números mágicos son caros (tiene que ABRIR el archivo para determinarlo - lo que dificulta la búsqueda/paralización/filtrado.), y poco fiable (nada impide que un mal ciudadano inyecte un número mágico en la parte superior de su archivo - al igual que cualquiera puede establecer una extensión.)

Así que la respuesta corta es - Linux tiene muchos más metadatos/intuición para seguir. Sin embargo, cuando se comparan los tipos de aplicaciones que se ejecutan en Windows y los tipos de aplicaciones que se ejecutan en un escritorio Linux - se iguala el campo de juego y se tienen los mismos problemas. Linux no puede diferenciar mejor entre los formatos altamente específicos de las aplicaciones que Windows (y ciertamente no es tan barato) - y las extensiones (o números mágicos) sólo indican a ambos sistemas operativos qué programas cargar (NO qué TIPO de archivo son).