Shell-Skript startet nicht mit 'Permission denied'? Meist fehlt nur das Ausführbar-Recht. So machst du es lauffähig – und findest seltenere Ursachen.
Aufwand:
ca. 5 Min.
Voraussetzung:
Terminal
Das Symptom
Du hast ein Shell-Skript geschrieben oder heruntergeladen, tippst ./script.sh –
und die Shell blockt sofort ab: bash: ./script.sh: Permission denied. Der
Inhalt ist korrekt, das Skript sieht tadellos aus, und trotzdem lässt es sich
nicht starten.
Die „Layer 8“-Wahrheit
Das ist kein Fehler im Skript, sondern eine bewusste Sicherheitsregel des
Systems. Unter Linux und macOS ist „diese Datei existiert“ und „diese Datei darf
laufen“ streng getrennt. Frisch erstellte oder aus dem Netz geladene Dateien
bekommen absichtlich kein Ausführbar-Recht – sonst könnte jeder
heruntergeladene Text ungefragt Code starten. Deshalb reicht der Doppelklick-
Reflex aus der Windows-Welt hier nicht. Die Lösung ist ein einziger Befehl,
chmod +x, der der Datei erlaubt zu laufen. Und wer die Rechte gar nicht anrühren
will, reicht das Skript einfach direkt an die bash weiter. Zwei Wege, ein
harmloses Hindernis – kein Grund, am Skript zu zweifeln.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Das Skript ausführbar machen
Der direkte Weg: der Datei das Ausführbar-Recht geben. Danach lässt sie sich normal starten:
chmod +x script.sh
./script.sh
2.
Alternativ den Interpreter direkt aufrufen
Willst du die Rechte nicht ändern, übergibst du das Skript direkt an die Shell. Das funktioniert auch ohne Ausführbar-Recht:
bash script.sh
3.
Rechte und Eigentümer prüfen
Zeigt die Rechteliste kein x, fehlt das Ausführbar-Recht; gehört die Datei einem anderen Benutzer, darfst du sie eventuell nicht ausführen. Beides sichtbar machen:
ls -l script.sh
4.
Shebang und Zeilenenden kontrollieren
Stammt das Skript von einem Windows-Rechner, können Zeilenenden (CRLF) die Shebang-Zeile zerstören – dann scheitert der Start trotz Rechten. Sicherstellen, dass die erste Zeile korrekt ist (z. B. #!/bin/bash) und die Datei Unix-Zeilenenden hat:
dos2unix script.sh
5.
Das Dateisystem auf noexec prüfen
Manche Verzeichnisse (etwa /tmp auf gehärteten Systemen) sind mit der Option 'noexec' eingehängt – dort lässt sich generell nichts ausführen. Das Skript in ein anderes Verzeichnis (z. B. ins Home) verschieben und von dort starten.
Häufige Fragen (FAQ)
?Warum bekomme ich 'Permission denied' bei meinem eigenen Skript?
Unter Linux und macOS reicht es nicht, dass eine Datei existiert – sie braucht ausdrücklich das Ausführbar-Recht. Frisch erstellte oder heruntergeladene Skripte haben das oft nicht. Der Versuch, sie mit ./skript.sh zu starten, scheitert deshalb mit 'Permission denied', obwohl der Inhalt völlig korrekt ist.
?Was ist der Unterschied zwischen ./skript.sh und bash skript.sh?
Bei ./skript.sh führt das System die Datei selbst aus – dafür braucht sie das Ausführbar-Recht und eine gültige Shebang-Zeile. Bei bash skript.sh startest du stattdessen die bash und übergibst ihr die Datei als Texteingabe; das umgeht das fehlende Ausführbar-Recht und funktioniert auch ohne chmod.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
SSH verweigert den Schlüssel, weil die Rechte zu offen seien? Ein privater Schlüssel darf nur dir gehören — mit einem chmod ist es in Sekunden behoben.