"magia" aquí se refiere a " números mágicos ": un valor especial que está en un lugar conocido en un archivo que identifica su tipo. El file
comando tiene una base de datos de estos números y a qué tipo corresponden. La biblioteca que acompaña a esa base de datos se llama libmagic , y puede acceder a ella desde sus propios programas.
No son necesariamente "números" como podríamos pensar en ellos. Por ejemplo, un archivo de imagen PNG siempre comienza con "\ x89PNG \ r \ n \ x1a \ n", una clase Java comienza con los cuatro bytes (en hexadecimal) CA FE BA BE, y un archivo HTML tiene "<html" en alguna parte cerca del inicio Es solo una pequeña secuencia de datos que se sabe que está en un archivo de ese tipo, generalmente muy cerca del inicio.
Cuando las personas definen formatos de archivo, a menudo incluyen uno de estos, ya sea deliberadamente o simplemente como parte de hacer que el formato se ajuste. file
puede usarlos después. También tiene otras formas de mirar el contenido del archivo para adivinar qué es ("pruebas de idioma").
#!
es en realidad un ejemplo de esto, porque se supone que el núcleo en sí mismo, al ver esos bytes, invoca el comando que sigue.