Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

4.5 Berechtigungen und ausführbare Skripte

Humboldt-Universität zu Berlin, Institut für Bibliotheks- und Informationswissenschaft

In Unix hat jede Datei Berechtigungen (Permissions), die festlegen, wer was mit der Datei tun darf. Diese Berechtigungen sind besonders wichtig, wenn Sie Python-Skripte direkt ausführbar machen möchten.

Die drei Arten von Berechtigungen

Jede Datei hat drei Arten von Berechtigungen:

BerechtigungSymbolBedeutung
Read (Lesen)rDatei lesen / Verzeichnisinhalt anzeigen
Write (Schreiben)wDatei ändern / Dateien im Verzeichnis erstellen/löschen
Execute (Ausführen)xDatei als Programm ausführen / In Verzeichnis wechseln

Die drei Nutzer*innen-Gruppen

Berechtigungen gelten für drei verschiedene Gruppen:

GruppeBedeutung
User (Eigentümer*in)Die Person, die die Datei erstellt hat
Group (Gruppe)Nutzer*innen, die zur gleichen Gruppe gehören
Others (Alle anderen)Alle anderen Nutzer*innen des Systems

Berechtigungen anzeigen (ls -l)

Mit ls -l sehen Sie die Berechtigungen:

$ ls -l
-rw-r--r--  1 alice users  1234 Okt 17 10:00 README.md
-rwxr-xr-x  1 alice users   512 Okt 17 10:05 skript.py
drwxr-xr-x  2 alice users  4096 Okt 17 09:00 data

Die erste Spalte zeigt die Berechtigungen in diesem Format:

-rwxr-xr-x
│└┬┘└┬┘└┬┘
│ │  │  └─ Others:   r-x (lesen, ausführen)
│ │  └──── Group:    r-x (lesen, ausführen)
│ └─────── User:     rwx (lesen, schreiben, ausführen)
└───────── Dateityp: - = Datei, d = Verzeichnis, l = Link

Beispiele

-rw-r--r--  Eigentümer*in kann lesen/schreiben, alle anderen nur lesen
-rwxr-xr-x  Eigentümer*in kann alles, andere können lesen/ausführen
drwxr-xr-x  Verzeichnis, Eigentümer*in kann alles, andere lesen/betreten

Berechtigungen ändern (chmod)

Mit chmod (change mode) ändern Sie Berechtigungen.

Symbolische Notation

$ chmod u+x skript.py

Beispiele:

$ chmod u+x datei.py       # Eigentümer*in: ausführbar machen
$ chmod go-w datei.txt     # Group und Others: Schreibrecht entziehen
$ chmod a+r datei.txt      # Alle: Leseberechtigung geben
$ chmod u=rwx,go=rx dir/   # User: rwx, Group+Others: rx

Numerische Notation

Berechtigungen können auch als Zahl angegeben werden:

BerechtigungWert
r (read)4
w (write)2
x (execute)1

Die Werte werden addiert:

rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4

Drei Ziffern für User, Group, Others:

$ chmod 755 skript.py

Bedeutet:

Häufige Kombinationen:

$ chmod 644 datei.txt     # rw-r--r-- (normale Datei)
$ chmod 755 skript.py     # rwxr-xr-x (ausführbares Skript)
$ chmod 700 privat.txt    # rwx------ (nur Eigentümer*in)
$ chmod 777 öffentlich    # rwxrwxrwx (alle Rechte für alle - selten sinnvoll!)

Python-Skripte ausführbar machen

Um ein Python-Skript direkt ausführbar zu machen (ohne python3 davor):

1. Shebang-Zeile hinzufügen

Erste Zeile der Datei:

#! /usr/bin/env python3

print("Hallo Welt!")

Die Shebang-Zeile (#!) sagt dem System, mit welchem Programm die Datei ausgeführt werden soll.

2. Ausführbarkeit setzen

$ chmod +x mein-skript.py

Oder explizit:

$ chmod u+x mein-skript.py

3. Skript ausführen

$ ./mein-skript.py
Hallo Welt!

Das ./ ist wichtig – es bedeutet “im aktuellen Verzeichnis”.

Praktisches Beispiel

Erstellen Sie ein ausführbares Python-Skript:

$ cat > taschenrechner.py << 'EOF'
#! /usr/bin/env python3

def addiere(a, b):
    return a + b

if __name__ == "__main__":
    ergebnis = addiere(5, 3)
    print(f"5 + 3 = {ergebnis}")
EOF

Berechtigungen überprüfen:

$ ls -l taschenrechner.py
-rw-r--r--  1 alice users  123 Okt 17 10:30 taschenrechner.py

Ausführbar machen:

$ chmod +x taschenrechner.py
$ ls -l taschenrechner.py
-rwxr-xr-x  1 alice users  123 Okt 17 10:30 taschenrechner.py

Beachten Sie das x in den Berechtigungen!

Ausführen:

$ ./taschenrechner.py
5 + 3 = 8

Warum ./ vor dem Skriptnamen?

Unix sucht Programme in bestimmten Verzeichnissen, die in der Umgebungsvariable $PATH definiert sind:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin

Das aktuelle Verzeichnis (.) ist nicht im $PATH. Daher müssen Sie ./ explizit angeben:

$ ./skript.py      # Funktioniert
$ skript.py        # Fehler: Befehl nicht gefunden

Unterschied: python3 skript.py vs. ./skript.py

Mit python3Mit ./ (ausführbar)
python3 skript.py./skript.py
Benötigt keine Shebang-ZeileBenötigt Shebang-Zeile
Benötigt keine AusführbarkeitBenötigt chmod +x
Python-Version explizit angegebenPython-Version aus Shebang
Funktioniert auf allen SystemenFunktioniert nur auf Unix-Systemen

Für die Entwicklung ist python3 skript.py oft einfacher. Für Produktions-Skripte oder Tools, die wie Programme genutzt werden sollen, ist ./skript.py eleganter.

Zusammenfassung

BefehlBedeutungBeispiel
ls -lBerechtigungen anzeigenls -l datei.py
chmod u+xAusführbar für Userchmod u+x skript.py
chmod 755rwxr-xr-x setzenchmod 755 skript.py
chmod +xAusführbar für allechmod +x skript.py
./skript.pyAusführbares Skript starten./taschenrechner.py

Berechtigungen sind ein mächtiges Sicherheitsfeature von Unix-Systemen. Sie verhindern, dass unbefugte Nutzer*innen Dateien ändern oder Programme ausführen können.