Skip to content

Kommandozeile und Shell-Skripte

💡 Lernleitfaden: Dieses Kapitel bietet Einsteigern ohne Vorkenntnisse einen systematischen Überblick über die Funktionsweise des Terminals. Es sind keine Informatik-Kenntnisse erforderlich. Wir werden durch interaktive Demos schrittweise die Mechanismen des Terminals von grundlegend bis fortgeschritten analysieren.

0. Schnellstart: Wie öffnet man das Terminal?

Bevor Sie mit dem Lernen beginnen, müssen Sie es zuerst finden. Das Terminal ist bei jedem Betriebssystem "vorinstalliert" — Sie müssen keine zusätzliche Software installieren, um es zu nutzen.

🖥️ Öffnen auf verschiedenen Systemen

 macOS (Mac)

  1. Drücken Sie Command (⌘) + Leertaste, um die Spotlight-Suche zu öffnen.
  2. Geben Sie Terminal ein.
  3. Drücken Sie die Eingabetaste, und ein Fenster mit weißem Text auf schwarzem (oder schwarzem Text auf weißem) Hintergrund erscheint.

🪟 Windows

  • Methode 1 (CMD): Drücken Sie Win + R, geben Sie cmd ein und drücken Sie die Eingabetaste. Dies ist die älteste Kommandozeile.
  • Methode 2 (PowerShell): Drücken Sie Win + R, geben Sie powershell ein und drücken Sie die Eingabetaste. Dies ist ein moderneres, leistungsfähigeres Terminal.
  • Empfehlung: Für einfache Aufgaben sind beide geeignet, aber für die Entwicklungsumgebung wird PowerShell oder die Installation von WSL (Windows Subsystem for Linux) empfohlen.

🐧 Linux

  • Normalerweise ist die Tastenkombination Strg + Alt + T.
  • Oder suchen Sie im Anwendungsmenü nach Terminal.

0.1 Praxis-Übung: Erst mal ausprobieren (Hands-on Lab)

Nur Theorie reicht nicht. Bevor wir die trockenen Prinzipien kennenlernen, lassen Sie uns zunächst das Gefühl des "Befehle-Eintippens" selbst erfahren.

💡 Hinweis: Für Sicherheit und Komfort wird empfohlen, im Web-Simulator unten zu üben. Wenn Sie sich sicher fühlen, können Sie auch das echte Terminal auf Ihrem Computer nach der Methode in Kapitel 0 öffnen und die Schritte mitmachen (das Ergebnis ist dasselbe).

In dieser Übung lernen Sie:

  1. Dateien anzeigen: Mit ls oder dir den Inhalt des aktuellen Verzeichnisses ansehen.
  2. Erstellen und Navigieren: Mit mkdir einen neuen Ordner erstellen und mit cd wie durch ein Portal hineinwechseln.
  3. Neue Dateien erstellen: Mit einem Befehl schnell eine neue Datei anlegen.
  4. Software installieren: Das Gefühl erleben, mit einer Zeile Code eine Python-Bibliothek oder Systemsoftware zu installieren.
  5. Löschen und Aufräumen: Lernen, wie man unnötige Dateien löscht (mit Vorsicht verwenden!).
  6. KI um Hilfe bitten: Das ist am wichtigsten! Wenn Sie einen Befehl vergessen, lernen Sie die KI zu fragen: "Wie lösche ich eine Datei auf dem Mac?" — sie gibt Ihnen direkt die Antwort.

Wählen Sie unten Ihr übliches Betriebssystem aus und folgen Sie der Anleitung:

🎯 Hands-on Task (1/6)

Step 1: See What's Here

Before working with files, we first need to know what files are in the current directory.

🤖Not sure how to write? Ask AI
How do I view files in the current directory? What command should I use?

In Windows CMD, use the `dir` command (Directory) to view file lists.

Expected Goal: List all files in the current directory.
Command Prompt
C:\Users\User>

0.2 Warum auf die Maus verzichten? (Why CLI?)

Sie könnten sich fragen: "Die grafischen Benutzeroberflächen (GUI) heutzutage sind so gut — man kann einfach mit der Maus klicken. Warum sollte man komplexe Befehle in ein Fenster mit weißem Text auf schwarzem Hintergrund eingeben?"

Es geht nicht darum, "geeky" zu wirken, sondern darum, dass in bestimmten Situationen Sprache (Befehle) leistungsfähiger ist als Gesten (Maus).

1. Die Maus kann "Mengen" und "Logik" schwer ausdrücken

  • GUI (Maus): Geeignet für "Klicken, was man sieht". Wenn Sie ein Foto löschen möchten, geht das mit Rechtsklick schnell. Aber wenn Sie "alle Fotos von 2023, die größer als 5 MB sind und im PNG-Format vorliegen, löschen" möchten, ist die Maus machtlos — Sie müssten manuell lange filtern.
  • CLI (Befehl): Geeignet für "Beschreiben, was Sie tun möchten". Die obige Anforderung erfordert nur eine einzige Befehlszeile. Der Computer findet automatisch die entsprechenden Dateien und verarbeitet sie — selbst bei 10.000 Dateien.

2. Befehle können aufgezeichnet und wiederverwendet werden

  • GUI: Sie konfigurieren eine Umgebung einmal und müssen dutzende Menüs anklicken. Wenn Sie das nächste Mal den Computer wechseln, müssen Sie alles aus dem Gedächtnis neu klicken — leicht, Schritte zu vergessen.
  • CLI: Sie können alle Befehle in eine Datei (ein Skript) schreiben. Beim nächsten Mal müssen Sie nur diese Datei ausführen, und der Computer wiederholt Ihre Operationen fehlerfrei. Das ist die Grundlage für "Automatisierung".

3. Die einzige Wahl für die Fernsteuerung

  • GUI: Die Übertragung von Bildern ist wie das Anschauen eines HD-Videos — es erfordert sehr hohe Internetgeschwindigkeiten. Wenn die Verbindung nur minimal schwankt, ruckelt die Maus und ist nicht zu bedienen.
  • CLI: Es wird nur reiner Text übertragen — ein paar Dutzend Zeichen. Selbst in Gebieten mit extrem schlechtem Empfang können Sie reibungslos einen Server in einem Rechenzentrum am anderen Ende der Welt steuern.

Zusammenfassung: GUI eignet sich für Entdeckung (Webseiten durchsuchen, Bilder ansehen), CLI für Produktion (Entwicklung, Betrieb, Stapelverarbeitung). Als Entwickler nutzen wir das Terminal, weil es präziser, kontrollierbarer und effizienter ist.

1. Begriffsbestimmung: Was ist ein Terminal? (Definition)

Auf verschiedenen Betriebssystemen sieht das Terminal unterschiedlich aus und die Befehle sind auch verschieden. Klicken Sie unten auf die Schaltflächen, um zu wechseln, und beobachten Sie, wie macOS, Windows und Linux mit verschiedenen Befehlen (z.B. dir vs ls) dieselbe Aufgabe erledigen:

Command Prompt
👆Keep Clicking / Keep Clicking
C:\Users\User>
💡

Bevor sich grafische Benutzeroberflächen (GUI) durchsetzten, war das Terminal die Hauptmethode der Mensch-Computer-Interaktion. Auch heute noch ist es das präziseste und effizienteste Werkzeug für Entwickler, um den Computer zu steuern.

Input (Keyboard)
Sends commands (character signals)
Character Stream / Character Stream
$ _
Output (Text Grid)
Text Grid Feedback

CLI (Command Line Interface): In this mode, the computer only understands characters. Each key press is converted to an encoding and sent to the system, which processes it and returns text results. It doesn't care where you click, only what you type.

Im Kern ist das Terminal eine Zeichenstrom-Ein-/Ausgabeumgebung:

  • Eingabe: Befehle (Zeichensignale) über die Tastatur senden.
  • Ausgabe: Text-Feedback über ein Bildschirmraster anzeigen.

Es verarbeitet keine komplexen Grafiken, Bilder oder Videos, sondern konzentriert sich auf die Interaktion mit Textinformationen.

2. Kernarchitektur: Die Kunst der Entkopplung (The Big Picture)

Bevor wir in die Details gehen, lassen Sie uns eine Frage stellen: Versteht das Terminal-Fenster wirklich, was Sie sagen?

Tatsächlich ist das Terminal wie ein Display, das nur Nachrichten weitergibt. Wenn Sie den Befehl date eingeben, weiß das Terminal nicht, dass dies "Datum anzeigen" bedeutet — es verpackt nur die 4 Buchstaben und sendet sie an den wahren Chef im Hintergrund: die Shell.

Die Shell ist das "Gehirn", das Ihre Sprache versteht und den Computer anweist.

Um zu verstehen, wie sie zusammenarbeiten, betrachten wir diese drei klar getrennten "Mitarbeiter". Die beste Analogie für ihr Verhältnis ist Browser und Webserver.

2.1 Rollenverteilung

  • 🖥️ Terminal — wie der "Browser"

    • Aufgabe: Es ist nur für die Eingabe (Ihre Tastendrücke an die Gegenseite weiterleiten) und die Anzeige (die von der Gegenseite empfangenen Zeichen auf dem Bildschirm darstellen) zuständig.
    • Eigenschaft: Es hat keine eigene Intelligenz und versteht nicht, was ls oder cd bedeutet. Es ist wie der Chrome-Browser — egal, ob Sie Google oder Bing aufrufen, es rendert nur die Webseite.
    • Gängige Terminals: Windows CMD/PowerShell-Fenster, macOS Terminal.app, VS Code integriertes Terminal.
  • 🧠 Shell — wie der "Webserver"

    • Aufgabe: Sie ist das Gehirn mit Logik. Sie läuft im Hintergrund, empfängt die von Ihnen gesendeten Befehlszeichenketten, interpretiert deren Bedeutung und weist das Betriebssystem an, die Arbeit auszuführen.
    • Eigenschaft: Sie ist unsichtbar und nicht greifbar und kann nur über Textströme mit der Außenwelt kommunizieren.
    • Gängige Shells: Bash, Zsh, Fish, PowerShell.
  • ⚙️ Kernel — der "Generalmanager" im Hintergrund

    • Aufgabe: Der Kern des Betriebssystems. Nur er kann Hardware direkt steuern (Festplatte lesen/schreiben, Speicher zuweisen, CPU steuern).
    • Beziehung: Die Shell ist der "Sekretär" des Kernels und übersetzt menschliche Sprache für den Kernel.

2.2 Warum getrennt? (Austauschbarkeit)

Da die Darstellungsschicht (Terminal) und die Logikschicht (Shell) vollständig getrennt sind, können sie frei kombiniert werden:

  • "Skin" wechseln: Sie können auf macOS das integrierte Terminal, iTerm2 oder das Terminal von VS Code verwenden. Sie sehen anders aus, sind aber mit derselben Shell (zsh) verbunden, daher sind die Befehle identisch.
  • "Gehirn" wechseln: Sie können im selben Terminal-Fenster von bash zu zsh oder zur interaktiven Python-Umgebung wechseln. Das Terminal bleibt gleich, aber die Logik zur Befehlsverarbeitung ändert sich.

2.3 Interaktionsfluss: Die verschwindenden Tastendrücke

Sie könnten denken: "Wenn ich 'a' auf der Tastatur drücke, zeichnet das Terminal ein 'a' auf den Bildschirm."Falsch! Der tatsächliche Ablauf sieht so aus (das nennt man Echo):

  1. 'a' drücken: Das Tastatursignal wird an das Terminal gesendet.
  2. Signal senden: Das Terminal sendet die Codierung von 'a' an die Shell.
  3. Shell-Verarbeitung: Die Shell empfängt 'a', findet kein Problem und sendet 'a' unverändert an das Terminal zurück.
  4. Zeichen anzeigen: Das Terminal empfängt das zurückgesendete 'a' und zeichnet es auf den Bildschirm.

💡 Kleines Experiment: Einige Befehle (z.B. bei der Passworteingabe) deaktivieren die Echo-Funktion der Shell. Wenn Sie dann eine Taste drücken, sendet das Terminal sie an die Shell, aber die Shell sendet nichts zurück, sodass der Bildschirm leer bleibt. Dies dient dem Datenschutz.

Ein-Satz-Zusammenfassung: Sie tippen im Terminal ➡️ Signal wird an die Shell gesendet ➡️ Shell sendet es unverändert zurück (Sie sehen den Text) und versteht es ➡️ Shell weist den Kernel an, die Arbeit zu erledigen.

Die folgende Demo zeigt diesen Prozess. Achten Sie auf die "Wand" zwischen Shell und Kernel und darauf, wie die Zeichen hin- und herfließen:

🖥️
Terminal (Terminal)
Conduit / Window / Conduit / Window
🗣️
Shell (Shell)
Interpreter / Assistant / Interpreter / Assistant
⚙️
Kernel (Kernel)
Manager / Chip / Manager / Chip
👆Keep Clicking / Keep Clicking
User Space / User Space
Kernel Space / Kernel Space
TERMINAL (Terminal)
$
/dev/tty
stdin / stdout
SHELL (Shell)
💤
Idle
/bin/zsh
System Calls
KERNEL (Kernel)
💤
Idle
macOS / Linux
Click "Start Simulation" to see how the command 'ls' travels through the system.
Click "Start Simulation" to see how the command 'ls' travels through the system.

3. Visuelles Modell: Das Rastersystem (The Grid System)

Im Gegensatz zu modernen grafischen Oberflächen, die "Pixel" verwenden, basiert die Terminalanzeige auf einem Zeichenraster (Character Grid). Der Terminalbildschirm ist in Zeilen und Spalten unterteilt, wobei jedes Feld als Zelle (Cell) bezeichnet wird.

3.1 Aufbau einer Zelle

Jede Zelle ist die kleinste Anzeigeeinheit des Terminals und enthält zwei Arten von Kerninformationen:

  1. Zeichen (Glyph): Der tatsächlich angezeigte Text (z.B. A, Ä, $).
  2. Attribute (Attributes): Der Stil des Zeichens (z.B. Vordergrundfarbe, Hintergrundfarbe, Fett, Unterstreichung).

Wenn Sie das Terminal-Fenster ziehen und seine Größe ändern, ändern Sie im Wesentlichen die Zeilenanzahl (Rows) und Spaltenanzahl (Columns) dieses Rasters.

Versuchen Sie es im interaktiven Bereich unten und beobachten Sie, wie das Raster Zeichen aufnimmt:

Click/Drag cells to draw, Type to insert text

3.2 Stilprüfung

Das Terminal kann keine Bilder anzeigen — alle "Schnittstellen" werden durch Kombination von Zeichenfarben und Stilen realisiert.

Klicken Sie unten auf eine Zelle, um die dahinterliegenden Stilattribute zu sehen:

A

4. Kommunikationsprotokoll: Escape-Sequenzen (Escape Sequences)

Sie fragen sich vielleicht: Wenn das Terminal nur Text überträgt, wie werden dann farbiger Text, ein beweglicher Cursor oder das Löschen des Bildschirms realisiert?

Die Antwort sind Escape-Sequenzen. Dies ist eine spezielle Zeichenfolge (normalerweise beginnend mit dem ESC-Zeichen). Wenn das Terminal diese Zeichen empfängt, zeigt es sie nicht auf dem Bildschirm an, sondern interpretiert sie als Steuerbefehle.

Beispiele:

  • Normales Zeichen A → Ein A auf dem Bildschirm zeichnen.
  • Sequenz \033[31mBefehl: Die nachfolgende Textfarbe auf Rot setzen.
  • Sequenz \033[2JBefehl: Den Bildschirm löschen.

Es ist wie eine Verabredung mit einem Freund: Wenn ich normal spreche, notierst du es; wenn ich die linke Hand hebe (entspricht ESC), ist der folgende Satz ein Befehl und kein Inhalt.

Klicken Sie unten auf die "Abspielen"-Schaltfläche und beobachten Sie, wie das Terminal den Zeichenstrom Zeichen für Zeichen verarbeitet und versteckte Befehle erkennt:

Parser Mechanism (Parser Mechanism)
Input Byte Stream / Input Byte Stream
H48
i69
20
ESC1B
[5B
333
131
m6D
V56
i69
b62
e65
ESC1B
[5B
030
m6D
!21
Current Byte
NORMAL
Print Characters
ESCAPE MODE
Buffer Command...
Terminal Screen / Screen Display
_

Normal mode: Characters go directly to screen. Escape mode (after ESC ): Terminal stops output and starts collecting characters as commands until the command ends (e.g. m) and executes.

Die folgende Komponente zeigt weitere Arten von Escape-Sequenzen und deren Rendering-Effekte:

16-COLOR PALETTE|16-Color Palette
STYLE SEQUENCES|Style Sequences
CURSOR SEQUENCES|Cursor Control Sequences
Terminal Preview
Last Sequence:Waiting for input...
Hello World
$

5. Eingabemechanismus: Bytestrom (Input as Byte Stream)

Der Eingabeprozess wird oft missverstanden. Wenn Sie eine Taste drücken, "zeichnet" das Terminal das Zeichen nicht direkt auf den Bildschirm, sondern führt eine Codierungsübertragung durch.

  1. Tastendruck erfassen: Das Terminal erfasst Ihre physische Tastenbetätigung.
  2. Codierungsumwandlung: Den Tastendruck in eine bestimmte Bytesequenz umwandeln.
    • Taste a drücken → Byte a senden.
    • Pfeil nach oben drücken → Sequenz ^[[A senden.
  3. Übertragung: Den Bytestrom an die Shell oder das aktuell laufende Programm senden.

Kernpunkt: Alle Tastendrücke (einschließlich Funktionstasten und Mausklicks) sind auf Übertragungsebene Bytedaten.

Versuchen Sie unten eine Taste zu drücken und beobachten Sie, wie Ihre Eingabe in Low-Level-Daten umgewandelt wird:

⌨️Click to Type
Press any key
BYTES (HEX)
-
SEQUENCE
-
Character: -

6. Betriebsmodi: Schreibmaschine vs. Spielkonsole (Cooked vs. Raw Mode)

Das Terminal hat zwei völlig unterschiedliche Persönlichkeiten. Wenn Sie dies verstehen, wissen Sie, warum das Eingeben von Befehlen im Terminal und das Spielen von Snake völlig unterschiedliche Erlebnisse sind.

  • Cooked-Modus — wie eine Schreibmaschine

    • Dies ist der Standardmodus.
    • Verhalten: Ihre eingegebenen Zeichen werden vom Terminal zurückgehalten, bis Sie die Eingabetaste (Enter) drücken.
    • Vorteil: Dies gibt Ihnen die Möglichkeit zur Korrektur. Einen Tippfehler gemacht? Mit der Rücktaste (Backspace) löschen und neu schreiben — das Programm merkt nicht, dass Sie vorher etwas Falsches getippt haben.
    • Anwendungsszenario: Normales Befehle-Eingeben (z.B. ls, cd).
  • Raw-Modus — wie ein Gamecontroller

    • Dies ist der "Profi-Modus".
    • Verhalten: Jede Taste, die Sie drücken (einschließlich Pfeiltasten, Strg-Kombinationen), wird sofort an das Programm gesendet, ohne jeglichen Puffer.
    • Vorteil: Das Programm kann in Echtzeit auf Ihre Eingaben reagieren.
    • Anwendungsszenario: Terminal-Spiele (z.B. Snake), Vim-Editor (ein rein tastaturgesteuerter Editor).

Klicken Sie unten auf die Schaltfläche, um den Modus zu wechseln und das unterschiedliche Gefühl von "Briefe schreiben" und "Zocken" zu erleben:

1. Keyboard Input
Type here...
Click to focus
2. Line Buffer (Kernel) Active
_
Waiting for Enter... (Backspace works)
3. Application Receives
_

7. Prozesssteuerung: Signale (Signals)

Im Terminal kann Strg+C normalerweise ein Programm stoppen. Dies geschieht nicht durch das Senden von Zeichen, sondern durch das Auslösen eines Signals (Signal).

Signale sind ein Benachrichtigungsmechanismus auf Betriebssystemebene, der Programme über bestimmte Ereignisse informiert.

  • Strg+C → Sendet SIGINT (Interrupt): Teilt dem Programm mit "Bitte unterbrechen Sie die aktuelle Operation".
  • Strg+Z → Sendet SIGTSTP (Suspend): Teilt dem Programm mit "Bitte anhalten und in den Hintergrund versetzen".

Dieser Mechanismus umgeht den Standard-Dateneingabekanal und stellt sicher, dass der Benutzer auch dann die Kontrolle behält, wenn das Programm eingefroren ist.

Ctrl+CInterrupt
SIGINT
Ctrl+ZSuspend
SIGTSTP
Ctrl+CSIGINT
Stop the running program

Sends SIGINT (signal interrupt) to the foreground process. Most programs respond by stopping immediately. It's how you cancel a long-running command or exit a program that's stuck.

Example: Running `sleep 100` and pressing Ctrl+C stops it immediately.
$ sleep 100
sleeping...
$
State: Running (PID 1234)

Click "Run Command" to start a simulated process, then try sending different signals.

8. Fortgeschrittene Anwendung: Vollbild-Interface und Puffer (Buffers & TUI)

Ist Ihnen aufgefallen, dass wenn Sie eine Datei mit vim bearbeiten oder den Systemstatus mit htop anzeigen, sie den gesamten Bildschirm einnehmen? Wenn Sie sie beenden, kehrt der Bildschirm sofort zum vorherigen Zustand zurück und die vorherigen Befehlseingaben bleiben unverändert.

Das liegt daran, dass das Terminal zwischen zwei "Leinwänden" hin- und herschaltet:

  • Primärer Puffer (Primary Buffer) — wie ein Notizblock.

    • Sie schreiben eine Zeile, das System antwortet mit einer Zeile.
    • Wenn voll, wird umgeblättert (gescrollt), und das früher Geschriebene bleibt oben.
    • Verwendung: Tägliches Befehle-Eingeben.
  • Alternativer Puffer (Alternate Buffer) — wie eine Tafel.

    • Das Programm wischt die Tafel sauber und zeichnet darauf (Vollbildanzeige).
    • Egal wie gezeichnet wird, es beeinflusst nicht den Notizblock auf Ihrem Tisch.
    • Wenn Sie das Programm beenden, ist es, als würde die Tafel weggeräumt — Sie sind zurück vor Ihrem Notizblock.
    • Verwendung: Vim, Nano, Spiele und andere Vollbild-Software.

Klicken Sie unten auf die Schaltfläche, um zu erleben, wie "Notizblock" und "Tafel" sofort wechseln:

Terminal - Buffer Switching Demo
ls -la
total 16
drwxr-xr-x 2 user staff 64 Jan 15 10:00 .
drwxr-xr-x 4 user staff 128 Jan 15 09:55 ..
-rw-r--r-- 1 user staff 1024 Jan 15 10:00 notes.txt
echo "Hello World"
Hello World
vim notes.txt

Current: Primary Buffer (Primary Buffer)

This is the standard scrolling log. Commands are executed line by line.


9. Zusammenfassung (Summary)

Das Terminal ist keine mystische Blackbox — es ist eine standardisierte Text-Interaktionsschnittstelle.

  • Anzeige: Basiert auf Raster und Zeichen.
  • Steuerung: Basiert auf Escape-Sequenzen.
  • Interaktion: Basiert auf Ein-/Ausgabeströmen und Signalen.

Durch das Verständnis dieser zugrundeliegenden Prinzipien lernen Sie nicht mehr nur Befehle auswendig, sondern können den logischen Ablang hinter jedem Tastendruck wirklich verstehen.

Anhang: Glossar (Vocabulary)

BegriffEnglischErklärung
TerminalTerminalDas Fensterprogramm für Anzeige und Eingabe (Frontend).
ShellShellDas Programm zur Befehlsinterpretation und Ausführungslogik (Backend).
CLICommand Line InterfaceBefehlszeilenschnittstelle, eine textbasierte Interaktionsmethode.
TUIText User InterfaceTextbasierte Benutzeroberfläche, eine im Terminal durch Zeichen erstellte Pseudografik.
Escape-SequenzEscape SequenceSpezielle Zeichenbefehle zur Steuerung von Terminal-Cursor, Farben usw.
Standardeingabe/-ausgabeStdin/StdoutStandardkanäle für Datenempfang und Datenausgabe von Programmen.

Referenzen (Reference)

  • How Terminals Work: Die Struktur und die Demos dieses Artikels wurden stark von diesem Projekt inspiriert. Wenn Sie die technischen Implementierungsdetails vertiefen möchten, wird dringend empfohlen, das Original-Tutorial zu lesen.