Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: AnfängerfehlerPermission denied

bash: ./script.sh: Permission denied

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. 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. 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. 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. 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. 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.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

OSLästigArgument list too long

bash: Argument list too long

Der Befehl bricht mit 'Argument list too long' ab, weil ein * zu viele Dateien liefert. So löst du es mit find und xargs statt Globbing.

OSLästigUNPROTECTED PRIVATE KEY FILE

SSH: Permissions for key are too open

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.

SWLästigpermission denied while trying to connect to the Docker daemon socket

Docker: permission denied am Docker-Socket

Docker läuft, aber ohne sudo kommt „permission denied“? Der Zugriff hängt an der Docker-Gruppe — und die hat sicherheitsrelevante Nebenwirkungen.