Ich weiß, dass wenn ich den Befehl ausführe
chmod +x filename
bash macht aus meiner Datei eine ausführbare Datei. Was genau passiert mit der Architektur der Datei, um sie in eine ausführbare Datei umzuwandeln? Woher weiß der Kernel, dass diese Datei ausführbar ist?
Ich versuche nur, meine Nerd-Muskeln zu trainieren.
Antwort1
Die "Architektur" der Dateiändert sich nicht– es liegt an Ihnen, sicherzustellen, dass es ein korrektes Format hat. Das heißt, die Dateibereitsmuss eine gültige ELF-Binärdatei oder ein Skript mit einem gültigen #!
Header oder etwas anderes sein, das Ihr bestimmter Kernel erkennt (wie a.out oder MZ/PE).
Es chmod
wird lediglich ein Bit in den Berechtigungen der Datei gesetzt, das dem Kernel mitteilt, dass der Benutzererlaubtum diese Datei auszuführen. Es kann als kleine Sicherheitsbarriere fungieren und bestimmte Arten von Unfällen verhindern. (Beachten Sie, dass +x
hier eine Abkürzung für ist ugo+x
; es ist ein Berechtigungsbit, genau wie Lesen/Schreiben.)
Wenn Sie +x auf eine Datei setzen, die der Kernel nicht erkennt, wird nur ein Fehlercode vom exec
Systemaufruf zurückgegeben. (Beachten Sie, dass einige Shells hierfür eine spezielle Behandlung haben – wenn der Kernel „nicht erkanntes Format“ meldet, versucht die Shell, die Datei als Skript zu interpretieren.im Inneren, da Shellskripte vorher so funktionierten, #!
warerfunden.)
Antwort2
Der Inhalt der Datei ändert sich überhaupt nicht. Dateisysteme, die für typisches Unix entwickelt wurden, unterstützen das Speichern von Informationen zu jeder Datei. Dies wird oft als „Metadaten“ der Datei bezeichnet.
Aus diesem Grund erhalten Sie mit einigen Dateisystemen keine ähnlichen Ergebnisse. FAT verfügt nämlich nicht über integrierten Speicherplatz zum Speichern von Daten im Zusammenhang mit Unix-Berechtigungen, und Unix umgeht dies normalerweise, indem beim Mounten eines solchen Dateisystem-Volumes ein spezieller Parameter verwendet wird. Daher haben normalerweise alle Dateien auf einem FAT-Laufwerk dieselben Berechtigungen, wie beim Mounten angegeben. (Ich würde ein ähnliches Verhalten für andere Dateisysteme wie ISO9660 erwarten, obwohl das wahrscheinlich normalerweise nicht beschreibbar ist.) Auf auf diese Weise gemounteten Volumes chmod +x
ändert die Verwendung von eigentlich nichts.
Kurz gesagt, der Kernel erkennt dies, indem er den Dateisystemtreiber überprüft. Bei typischen, für Unix entwickelten Dateisystemen unterstützt dieser Treiber das Lesen der Speicherorte, an denen Unix-Berechtigungen gespeichert sind.
chmod ändert einfach diese Stellen auf dem Laufwerk.