Shell
Eine Shell ist ein Programm, das als Schnittstelle zwischen dem Benutzer und dem Betriebssystemkern (Kernel) fungiert. Sie interpretiert Benutzereingaben, führt Befehle aus und gibt die Ergebnisse zurück. Der Name "Shell" (englisch für "Schale" oder "Hülle") verdeutlicht ihre Funktion: Sie umgibt den Kernel wie eine Schale und ermöglicht die Interaktion mit dem Betriebssystem.
In der IT-Praxis sind Shells unverzichtbare Werkzeuge. Sie ermöglichen nicht nur die manuelle Eingabe von Befehlen über die Kommandozeile (CLI), sondern auch die Automatisierung komplexer Aufgaben durch Shell-Skripte. Als Fachinformatiker für Systemintegration oder Fachinformatiker für Anwendungsentwicklung werden Sie regelmäßig mit verschiedenen Shell-Varianten arbeiten.
Was macht eine Shell?
Die Shell übernimmt mehrere zentrale Aufgaben im Betriebssystem:
- Befehlsinterpretation: Die Shell liest Benutzereingaben, analysiert sie und wandelt sie in Systemaufrufe um, die der Kernel ausführt
- Prozessverwaltung: Sie startet Programme, verwaltet Hintergrundprozesse und ermöglicht die Steuerung laufender Anwendungen
- Ein-/Ausgabeumleitung: Shells können die Ein- und Ausgabe von Programmen in Dateien oder an andere Programme weiterleiten (Piping)
- Umgebungsvariablen: Sie verwalten Systemvariablen wie PATH, HOME oder USER, die das Verhalten von Programmen beeinflussen
- Skriptausführung: Shell-Skripte ermöglichen die Automatisierung wiederkehrender Aufgaben
Arten von Shells
Es gibt zwei grundlegende Arten von Shells, die Sie kennen sollten:
Interaktive Shells
Interaktive Shells ermöglichen die direkte Kommunikation zwischen Benutzer und System. Sie zeigen einen Prompt an (z.B. $ oder >), warten auf Eingaben und zeigen die Ergebnisse unmittelbar an. Wenn Sie ein Terminal öffnen und Befehle eingeben, arbeiten Sie mit einer interaktiven Shell.
Nicht-interaktive Shells
Nicht-interaktive Shells führen Skripte ohne Benutzerinteraktion aus. Sie werden typischerweise für automatisierte Aufgaben wie Cronjobs, Systemstarts oder CI/CD-Pipelines verwendet. Diese Shells lesen Befehle aus einer Datei und führen sie sequenziell aus.
Wichtige Unix-Shells
Die Unix-Welt hat verschiedene Shell-Implementierungen hervorgebracht, die sich in Funktionsumfang und Syntax unterscheiden.
Bourne Shell (sh)
Die Bourne Shell wurde 1977 von Stephen Bourne bei Bell Labs entwickelt und war lange Zeit die Standard-Shell auf Unix-Systemen. Sie legte den Grundstein für die moderne Shell-Programmierung und definierte viele Konzepte, die heute noch verwendet werden. Die Bourne Shell ist unter /bin/sh auf den meisten Unix-Systemen verfügbar.
Bash (Bourne Again Shell)
Die Bash ist die am weitesten verbreitete Shell und seit 1989 verfügbar. Sie wurde als freie Alternative zur Bourne Shell entwickelt und ist die Standard-Shell auf den meisten Linux-Distributionen. Bash erweitert die Bourne Shell um zahlreiche Funktionen:
- Command History: Zugriff auf früher eingegebene Befehle mit den Pfeiltasten
- Tab-Vervollständigung: Automatische Ergänzung von Befehlen und Dateinamen
- Aliase: Abkürzungen für häufig verwendete Befehle
- Erweiterte Skriptfunktionen: Arrays, Funktionen und verbesserte Kontrollstrukturen
#!/bin/bash
# Beispiel: Einfaches Bash-Skript
# Variable definieren
GRUSS="Hallo"
NAME="IT-Azubi"
# Ausgabe
echo "$GRUSS, $NAME!"
# Schleife über Dateien
for datei in *.txt; do
echo "Gefunden: $datei"
done
Zsh (Z Shell)
Die Z Shell kombiniert Funktionen aus Bash, ksh und tcsh mit zahlreichen Erweiterungen. Seit macOS Catalina (10.15) ist Zsh die Standard-Shell auf Apple-Systemen. Besondere Merkmale sind:
- Erweiterte Tab-Vervollständigung: Kontextabhängige Vorschläge für Befehle, Optionen und Argumente
- Rechtschreibkorrektur: Automatische Korrektur von Tippfehlern
- Themes und Plugins: Über Frameworks wie Oh My Zsh hochgradig anpassbar
- Geteilte History: Befehlsverlauf kann zwischen mehreren Terminal-Sitzungen geteilt werden
Fish (Friendly Interactive Shell)
Die Fish Shell wurde mit dem Ziel entwickelt, benutzerfreundlicher als traditionelle Shells zu sein. Sie bietet Syntax-Highlighting während der Eingabe, intelligente Auto-Vervollständigung und eine übersichtliche Konfiguration. Die Skript-Syntax unterscheidet sich jedoch von POSIX-kompatiblen Shells.
Korn Shell (ksh)
Die Korn Shell wurde in den 1980er Jahren von David Korn bei Bell Labs entwickelt. Sie vereint Funktionen der Bourne Shell mit der C Shell und wird besonders in kommerziellen Unix-Umgebungen eingesetzt. Ksh ist bekannt für gute Performance und erweiterte Skriptfähigkeiten.
Windows-Shells
Auch Windows bietet verschiedene Shell-Implementierungen für unterschiedliche Anwendungsfälle.
CMD (Command Prompt)
Die klassische Windows-Eingabeaufforderung (cmd.exe) basiert auf dem DOS-Befehlsinterpreter und ist seit Windows NT verfügbar. Sie bietet grundlegende Funktionen für Dateiverwaltung und Systemadministration, ist aber im Vergleich zu Unix-Shells eingeschränkt.
PowerShell
Die PowerShell ist Microsofts moderne Shell-Lösung. Anders als Unix-Shells arbeitet PowerShell objektorientiert: Befehle (Cmdlets) geben strukturierte .NET-Objekte zurück, nicht nur Text. Dies ermöglicht präzisere Datenverarbeitung und komplexe Automatisierungsaufgaben.
# PowerShell-Beispiel: Prozesse nach Speicherverbrauch sortieren
Get-Process |
Sort-Object WorkingSet64 -Descending |
Select-Object -First 5 Name, @{N='RAM (MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}
PowerShell Core (ab Version 6) ist plattformübergreifend und läuft auch auf Linux und macOS. Sie ist besonders für die Administration von Windows-Servern, Azure-Ressourcen und Microsoft 365 optimiert.
Vergleich populärer Shells
| Shell | Betriebssystem | POSIX-kompatibel | Besonderheit |
|---|---|---|---|
| Bash | Linux, macOS, Windows (WSL) | Ja | Standard auf den meisten Linux-Systemen |
| Zsh | macOS, Linux | Ja | Standard auf macOS, sehr anpassbar |
| Fish | Linux, macOS | Nein | Benutzerfreundlich, Syntax-Highlighting |
| PowerShell | Windows, Linux, macOS | Nein | Objektorientiert, ideal für Windows-Admin |
| CMD | Windows | Nein | Legacy-Unterstützung, eingeschränkt |
Shell-Grundlagen für die Praxis
Eingabe- und Ausgabeumleitung
Eine der mächtigsten Funktionen von Shells ist die Umleitung von Ein- und Ausgaben. Mit speziellen Operatoren können Sie die Ausgabe eines Programms in eine Datei schreiben oder als Eingabe für ein anderes Programm verwenden.
# Ausgabe in Datei schreiben (überschreiben)
ls -la > dateiliste.txt
# Ausgabe an Datei anhängen
echo "Neue Zeile" >> protokoll.txt
# Eingabe aus Datei lesen
sort < unsortiert.txt
# Pipe: Ausgabe eines Befehls als Eingabe für den nächsten
cat access.log | grep "404" | wc -l
Umgebungsvariablen
Umgebungsvariablen speichern Konfigurationsinformationen, die von der Shell und gestarteten Programmen verwendet werden. Wichtige Systemvariablen sind:
- PATH: Liste der Verzeichnisse, in denen nach ausführbaren Programmen gesucht wird
- HOME: Das Heimatverzeichnis des aktuellen Benutzers
- USER: Der Name des angemeldeten Benutzers
- SHELL: Der Pfad zur aktuellen Shell
- LANG: Die Spracheinstellung des Systems
# Variable anzeigen
echo $PATH
# Variable setzen (temporär)
export MEINE_VAR="Wert"
# Alle Umgebungsvariablen anzeigen
env
Shell-Konfigurationsdateien
Shells werden über Konfigurationsdateien im Heimatverzeichnis angepasst. Diese Dateien werden beim Start der Shell ausgeführt und definieren Aliase, Umgebungsvariablen und Funktionen.
| Shell | Login-Shell | Interaktive Shell |
|---|---|---|
| Bash | ~/.bash_profile, ~/.bashrc | ~/.bashrc |
| Zsh | ~/.zshenv, ~/.zprofile, ~/.zshrc | ~/.zshrc |
| Fish | ~/.config/fish/config.fish | ~/.config/fish/config.fish |
Shell-Skripte schreiben
Shell-Skripte sind Textdateien mit einer Folge von Befehlen, die automatisch ausgeführt werden. Sie eignen sich hervorragend für Automatisierungsaufgaben, Systemadministration und wiederkehrende Arbeitsabläufe.
#!/bin/bash
# Shebang: Gibt an, welche Shell das Skript ausführen soll
# Backup-Skript mit Datum im Dateinamen
DATUM=$(date +%Y-%m-%d)
QUELLE="/home/azubi/dokumente"
ZIEL="/backup/dokumente_$DATUM.tar.gz"
# Prüfen, ob Quellverzeichnis existiert
if [ -d "$QUELLE" ]; then
tar -czf "$ZIEL" "$QUELLE"
echo "Backup erstellt: $ZIEL"
else
echo "Fehler: Quellverzeichnis nicht gefunden"
exit 1
fi
Der Shebang (#!/bin/bash) in der ersten Zeile teilt dem System mit, welcher Interpreter das Skript ausführen soll. Um ein Skript ausführbar zu machen, müssen Sie die entsprechenden Berechtigungen setzen: chmod +x skript.sh.
Shells in der IT-Praxis
Die Beherrschung verschiedener Shells gehört zu den Kernkompetenzen in der IT. Typische Einsatzszenarien sind:
- Serveradministration: Linux-Server werden fast ausschließlich über SSH und Shell verwaltet
- DevOps und CI/CD: Build-Pipelines basieren auf Shell-Skripten für Deployment und Tests
- Containerisierung: Docker-Container verwenden Shell-Befehle in Dockerfiles
- Cloud-Administration: AWS CLI, Azure CLI und gcloud nutzen Shell-Schnittstellen
- Versionskontrolle: Git-Befehle werden überwiegend in der Shell ausgeführt
- Automatisierung: Cronjobs und Systemd-Timer führen Shell-Skripte zeitgesteuert aus
Shell vs. Terminal vs. Konsole
Diese Begriffe werden oft synonym verwendet, bezeichnen aber unterschiedliche Konzepte:
- Shell: Das Programm, das Befehle interpretiert und ausführt (z.B. Bash, Zsh, PowerShell)
- Terminal/Terminal-Emulator: Die Anwendung, die eine grafische Oberfläche für die Shell bereitstellt (z.B. GNOME Terminal, iTerm2, Windows Terminal)
- Konsole: Ursprünglich die physische Hardware (Bildschirm und Tastatur), heute oft synonym mit Terminal verwendet
Sie können verschiedene Shells innerhalb desselben Terminals verwenden. Mit dem Befehl chsh (change shell) können Sie Ihre Standard-Shell ändern.
Tipps für den Einstieg
Wenn Sie mit Shells beginnen, helfen diese Strategien beim Lernen:
- Beginnen Sie mit Bash: Sie ist weit verbreitet und gut dokumentiert
- Nutzen Sie Tab-Vervollständigung: Spart Zeit und verhindert Tippfehler
- Lernen Sie die wichtigsten Befehle: cd, ls, cp, mv, rm, cat, grep, find
- Verwenden Sie --help und man: Die eingebaute Hilfe ist oft ausreichend
- Experimentieren Sie in einer sicheren Umgebung: Nutzen Sie virtuelle Maschinen zum Üben
- Schreiben Sie kleine Skripte: Automatisieren Sie wiederkehrende Aufgaben
Quellen und weiterführende Links
- GNU Bash Manual - Offizielle Dokumentation der Bash
- Zsh Dokumentation - Referenz für die Z Shell
- Fish Shell Dokumentation - Anleitung für Fish
- PowerShell Dokumentation - Microsoft PowerShell-Referenz
- Oh My Zsh - Framework zur Zsh-Anpassung
- The Linux Command Line - Kostenloses Online-Buch zur Shell-Nutzung