Wie macht bash eine Datei ausführbar?

409
StatGenGeek

Ich weiß das, wenn ich den Befehl ausführte

chmod +x filename

bash macht aus meiner Datei eine ausführbare Datei. Was passiert genau mit der Architektur der Datei, um sie in eine ausführbare Datei zu ändern? Wie weiß der Kernel, dass diese Datei ausführbar ist?

Ich versuche nur, meine Nerdmuskeln zu trainieren.

0

2 Antworten auf die Frage

6
grawity

Die "Architektur" der Datei ändert sich nicht - Sie müssen sicherstellen, dass sie ein korrektes Format hat. Das heißt, die Datei muss bereits eine gültige ELF-Binärdatei oder ein Skript mit einem gültigen #!Header oder etwas anderes sein, das Ihr bestimmter Kernel erkennt (z. B. a.out oder MZ / PE).

Was chmodbedeutet, ist nur ein bisschen in den Dateiberechtigungen festgelegt, um dem Kernel mitzuteilen, dass der Benutzer diese Datei ausführen darf . Es kann als kleine Sicherheitsbarriere wirken und bestimmte Arten von Unfällen verhindern. (Beachten Sie, dass +xhier eine Abkürzung für ugo+x; es ist ein Berechtigungsbit wie Lesen / Schreiben.)

Wenn Sie + x für eine Datei setzen, die der Kernel nicht erkennt, wird nur ein Fehlercode vom execSyscall zurückgegeben. (Beachten Sie, dass einige Shells spezielle Handhabung für diese - wenn der Kernel „unbekanntes Format“ berichtet, wird die Shell versuchen, die Datei als Skript zu interpretieren intern, wie das ist, wie Scripte gearbeitet #!wurde erfunden .)

"Wenn Sie" + x "für eine Datei setzen, die der Kernel nicht erkennt, wird nur ein Fehlercode von" exec "syscall zurückgegeben." Es ist nicht offensichtlich, wann dieser Fehler zurückgegeben wird. Es ist, wenn Sie versuchen, auszuführen, nicht wenn Sie "chmod". Recht? Kamil Maciorowski vor 7 Jahren 0
Nun, es kann sich nicht unbedingt auf die Ausführung des Befehls 'chmod' beziehen, da dies weit vor modenabhängigen Bedingungen geschieht (der eigentliche Kernel-Vorgang ist ohnehin der Befehl chmod _syscall_). Somit bleibt die Ausführung der fraglichen Datei (versucht). grawity vor 7 Jahren 0
Das macht Sinn, danke. Entschuldigung für die schlecht formulierte Frage. Ich konnte mir nicht vorstellen, wie ich sonst beschreiben könnte, was ich fragte. "Ein bisschen in die Berechtigungen der Datei setzen", wollte ich wissen. StatGenGeek vor 7 Jahren 0
0
TOOGAM

Der Inhalt der Datei ändert sich nicht. Dateisysteme, die für typische Unix-Anwendungen ausgelegt sind, unterstützen das Speichern von Informationen zu jeder Datei. Dies wird häufig als "Metadaten" der Datei bezeichnet.

Aus diesem Grund erhalten Sie bei manchen Dateisystemen keine ähnlichen Ergebnisse. Das heißt, FAT verfügt nicht über einen integrierten Speicherplatz zum Speichern von Daten, die sich auf Unix-Berechtigungen beziehen, und Unix bewältigt dies normalerweise, indem ein spezieller Parameter verwendet wird, wenn ein solches Dateisystem-Volume gemountet wird. Daher haben normalerweise alle Dateien auf einem FAT-Laufwerk die gleichen Berechtigungen, wie durch das Mounten angegeben. (Ich würde ein ähnliches Verhalten für andere Dateisysteme wie ISO9660 erwarten, obwohl dies wahrscheinlich normalerweise nicht beschrieben werden kann.) Bei Volumes, die auf diese Weise gemountet werden, chmod +xändert sich mit using nichts.

Kurz gesagt, der Kernel weiß dies, indem er den Dateisystemtreiber überprüft. Bei typischen Dateisystemen für Unix unterstützt dieser Treiber das Lesen der Speicherorte, an denen Unix-Berechtigungen gespeichert sind.

chmod ändert einfach diese Stellen auf dem Laufwerk.

Ich stimme der Antwort von [grawity] (https://superuser.com/a/1190394/401839) überhaupt nicht zu. Ich denke nur, dass die Antwort von grawity mehr darauf abzielt, wie der Kernel die Dateidaten interpretiert, nachdem das Betriebssystem bestimmt hat, dass die Datei als ausführbare Datei behandelt werden soll, während sich meine Antwort mehr auf das konzentriert, was chmod tut. Also beantworte ich das "How do bash" (Titelfrage) ... und "Was ... ausführbare Datei", während ich die Antwort von grawity für "How how the Kernel" lassen lasse. TOOGAM vor 7 Jahren 0