"magic" bezieht sich hier auf " magic numbers ": ein spezieller Wert, der sich an einer bekannten Stelle in einer Datei befindet, die seinen Typ identifiziert. Der file
Befehl verfügt über eine Datenbank mit diesen Nummern und dem Typ, dem sie entsprechen. Die Bibliothek, die zu dieser Datenbank gehört, heißt libmagic , und Sie können von Ihren eigenen Programmen aus darauf zugreifen.
Sie sind nicht unbedingt "Zahlen", wie wir sie uns vorstellen könnten. Beispielsweise beginnt eine PNG-Bilddatei immer mit "\ x89PNG \ r \ n \ x1a \ n", eine Java-Klasse beginnt mit den vier Bytes (in hexadezimaler Schreibweise) CA FE BA BE, und eine HTML-Datei enthält irgendwo "<html" in der Nähe des Starts. Es ist nur eine kleine Datensequenz, von der bekannt ist, dass sie sich in einer Datei dieses Typs befindet, normalerweise sehr nah am Anfang.
Wenn Leute Dateiformate definieren, nehmen sie oft eines davon absichtlich oder nur als Teil der Anpassung des Formats auf. file
kann sie danach verwenden. Es gibt auch andere Möglichkeiten, den Inhalt der Datei tatsächlich zu betrachten, um zu erraten, um was es sich handelt ("Sprachtests").
#!
ist eigentlich ein Beispiel dafür, weil der Kernel selbst, wenn er diese Bytes sieht, den folgenden Befehl aufrufen soll.