Befehlszeilen: Warum beschäftigen sich die Leute immer noch damit?

Die Kommandozeile, obschon beinahe ein halbes Jahrhundert alt, hat keineswegs an Relevanz verloren. Textbasierte Terminals erweisen sich auch im Zeitalter grafischer Oberflächen und Touchscreen-Geräte als optimales Werkzeug für zahlreiche Aufgaben.

Tatsächlich erfährt die Kommandozeile eine steigende Wertschätzung, wie die Entwicklung einer leistungsstarken Windows-Terminal-Anwendung durch Microsoft beweist. Die PowerShell-Umgebung unter Windows 10 ist bemerkenswert effizient, und Microsoft hat darüber hinaus alles darangesetzt, um unter Windows 10 im Wesentlichen eine vollständige Linux-Befehlszeilenumgebung zu ermöglichen.

Die Kommandozeile – einst die einzige Interaktionsmöglichkeit

In den Anfängen der Computertechnologie war die Texteingabe die ausschließliche Methode der Interaktion. Es existierten keine Alternativen. Dies mag als restriktiv und veraltet erscheinen, jedoch war das Tippen im Vergleich zu Lochkarten oder Lochstreifen eine revolutionäre Veränderung. Der Übergang von Fernschreibern mit Papierrollen zu Terminals mit Kathodenstrahlröhren (CRTs) stellte einen weiteren grundlegenden Wandel in der Mensch-Computer-Interaktion dar.

Dieser Schritt bereitete den Weg für die interaktive Shell. Nun war es möglich, Anweisungen an den Computer zu senden und die Antworten unmittelbar auf dem Bildschirm zu erhalten. Das lästige Klackern des Fernschreibers, während man auf den Papierausdruck wartete, entfiel.

Doch das war die Vergangenheit, heute sieht es anders aus. Die Computerwelt hat sich grundlegend gewandelt. Abgesehen von offensichtlichen Fällen, wie der Nutzung eines Rechners ohne grafische Oberfläche, der Fernsteuerung über SSH bei geringer Bandbreite, oder der Steuerung von kopflosen oder eingebetteten Systemen – warum sollte man die Befehlszeile über eine grafische Oberfläche nutzen?

Fachbegriffe erläutert

Begriffe wie Befehlszeile, Terminalfenster und Shell werden oft synonym verwendet, was jedoch fachlich nicht korrekt ist. Sie sind miteinander verwandt, aber keineswegs identisch.

Ein Terminalfenster ist ein Fenster in einer grafischen Desktop-Umgebung, das die Emulation eines Fernschreiberterminals ermöglicht.

Die Shell ist das Programm, das im Terminalfenster ausgeführt wird. Sie nimmt Eingaben entgegen und versucht, diese zu interpretieren und auszuführen, sie an andere Hilfsprogramme des Betriebssystems weiterzuleiten oder ein Skript oder Programm zu finden, das der Eingabe entspricht.

Die Befehlszeile ist der Ort, an dem Eingaben erfolgen. Sie ist die Eingabeaufforderung der Shell, die auf Anweisungen wartet. Der Begriff „Befehlszeile“ bezieht sich auch auf den konkreten Inhalt der Eingabe. So kann man beispielsweise gefragt werden: „Welche Befehlszeile hast du verwendet?“, wenn man Probleme mit einem Programm hatte. Dabei wird nicht die verwendete Shell erfragt, sondern der eingegebene Befehl.

Zusammen bilden diese Elemente die Befehlszeilenschnittstelle (CLI).

Die Bedeutung der Befehlszeile im Jahr 2023

Für Uneingeweihte mag die CLI als rückständig und verwirrend erscheinen. Ist in modernen Betriebssystemen tatsächlich noch Platz für eine so altertümliche und „nerdige“ Methode der Computernutzung? Haben wir das nicht längst hinter uns gelassen, als Fenster, Symbole und Mäuse aufkamen und grafische Desktopumgebungen mit grafischen Benutzeroberflächen (GUIs) entstanden?

In der Tat existiert die GUI seit Jahrzehnten. Die erste Version von Microsoft Windows wurde bereits 1985 veröffentlicht und etablierte sich 1990 mit Windows 3.0 als PC-Desktop-Standard.

Das in Unix und Linux verwendete X Window System wurde 1984 eingeführt. Dies brachte grafische Desktopumgebungen zu Unix und seinen vielfältigen Derivaten.

Die Entwicklung von Unix liegt jedoch mehr als ein Jahrzehnt vor diesen Ereignissen. Da es keine andere Möglichkeit gab, musste alles über die Kommandozeile möglich sein. Jede Interaktion, jede Konfiguration, jede Nutzung des Computers musste über die Tastatur erfolgen.

Die CLI ist also potenziell zu allem fähig. Eine GUI kann immer noch nicht alles, was die CLI kann. Und selbst bei den Aufgaben, die beide erledigen können, ist die CLI in der Regel schneller, flexibler, skriptfähig und skalierbarer. Darüber hinaus existiert ein einheitlicher Standard.

Standardisierung dank POSIX

POSIX ist ein Standard für Unix-ähnliche Betriebssysteme – also im Grunde alle Systeme außer Windows. Selbst Windows bietet mit dem Windows-Subsystem für Linux (WSL) eine Annäherung an diese Standards. Öffnet man ein Terminalfenster auf einem beliebigen POSIX-konformen (oder nahezu konformen) Betriebssystem, so befindet man sich in einer Shell. Selbst wenn die Shell oder Distribution eigene Erweiterungen bietet, ist die grundlegende POSIX-Funktionalität immer gegeben, was die Ausführung von Skripten ermöglicht.

Die Kommandozeile stellt den kleinsten gemeinsamen Nenner dar. Wer sie beherrscht, kann unabhängig von der Linux-Distribution und der grafischen Oberfläche alle notwendigen Aufgaben erledigen. Verschiedene Desktops haben ihre Eigenheiten, verschiedene Linux-Distributionen unterschiedliche Hilfsprogramme.

Doch das Terminalfenster ist überall gleich und vertraut.

Befehle arbeiten zusammen

Jeder Linux-Befehl ist darauf ausgelegt, eine spezifische Aufgabe zu erfüllen und diese gut zu erledigen. Die zugrunde liegende Philosophie besteht darin, die Funktionalität durch Hinzufügen weiterer Hilfsprogramme zu erweitern, die miteinander verknüpft werden können, um das gewünschte Ergebnis zu erzielen.

Dies ist so nützlich, dass Microsoft große Anstrengungen unternommen hat, um eine vollständige Linux-Befehlszeilenunterstützung für Windows 10 hinzuzufügen!

Der Befehl „sort“ beispielsweise dient der Sortierung von Text in alphabetischer Reihenfolge. Es ist nicht nötig, die Sortierfunktion in jeden anderen Linux-Befehl zu integrieren. GUI-Anwendungen erlauben diese Art der kollaborativen Zusammenarbeit im Allgemeinen nicht.

Betrachten wir das folgende Beispiel: Der Befehl „ls“ listet die Dateien im aktuellen Verzeichnis auf. Die Ausgabe wird an den Befehl „sort“ weitergeleitet, der die Liste nach der fünften Datenspalte (der Dateigröße) sortiert. Die sortierte Liste wird an den Befehl „head“ weitergeleitet, der standardmäßig die ersten zehn Zeilen seiner Eingabe ausgibt.

ls -l | sort -nk5,5 | head

Dies resultiert in einer geordneten Liste der kleinsten Dateien im aktuellen Verzeichnis.

Durch die Änderung eines einzigen Befehls – mit „tail“ anstelle von „head“ – erhalten wir eine Liste der zehn größten Dateien im aktuellen Verzeichnis.

ls -l | sort -nk5,5 | tail

Die erwartete Liste der zehn größten Dateien wird angezeigt.

Die Ausgabe von Befehlen kann umgeleitet und in Dateien gespeichert werden. Sowohl reguläre Ausgaben (stdout) als auch Fehlermeldungen (stderr) können separat erfasst werden.

Befehle können Umgebungsvariablen enthalten. Der folgende Befehl listet den Inhalt des Home-Verzeichnisses auf:

ls $HOME

Dies funktioniert unabhängig vom aktuellen Verzeichnis.

Wenn die Vorstellung des vielen Tippens abschreckt, kann die Tabulator-Vervollständigung den Tippaufwand erheblich reduzieren.

Skripte ermöglichen Automatisierung und Wiederholbarkeit

Der Mensch ist fehlbar.

Mit Skripten kann man eine Reihe von Anweisungen standardisieren, die bei jeder Ausführung des Skripts auf dieselbe Weise abgearbeitet werden. Dies führt zu mehr Konsistenz bei der Systemwartung. Skripte können Sicherheitsprüfungen integrieren, um zu entscheiden, ob der Skriptablauf fortgesetzt werden soll. Dadurch entfällt für den Nutzer die Notwendigkeit, selbst ausreichend informiert zu sein, um eine solche Entscheidung zu treffen.

Da Aufgaben unter Linux und anderen Unix-ähnlichen Systemen mit „cron“ automatisiert werden können, können langwierige, komplizierte und sich wiederholende Aufgaben vereinfacht oder zumindest einmalig definiert und für die Zukunft automatisiert werden.

PowerShell-Skripte bieten unter Windows eine vergleichbare Funktionalität, und ihre Ausführung kann über den Taskplaner geplant werden. Warum 50 verschiedene Optionen anklicken, wenn man mit einem Befehl alles automatisch ändern kann?

Das Beste aus beiden Welten

Um das volle Potenzial von Linux – oder jedem Betriebssystem – als Power-User auszuschöpfen, ist es essenziell, sowohl CLI als auch GUI zu nutzen.

Die GUI ist unübertroffen für die Nutzung von Anwendungen. Selbst eingefleischte Befehlszeilen-Enthusiasten müssen ab und zu das Terminalfenster verlassen, um Office-Anwendungen, Entwicklungsumgebungen oder Programme zur grafischen Bearbeitung zu nutzen.

Befehlszeilen-Enthusiasten verachten die GUI nicht. Sie bevorzugen lediglich die Vorteile der CLI für die jeweiligen Aufgaben. In der Administration ist die CLI eindeutig überlegen. Änderungen an einer Datei, einem Verzeichnis, einer Auswahl an Dateien und Verzeichnissen oder globale Änderungen sind mit der CLI mit gleichem Aufwand möglich. Der Versuch, dies mit einer GUI zu realisieren, erfordert bei zunehmender Anzahl betroffener Objekte oft langwierige und repetitive Tastatur- und Mausaktionen.

Die Kommandozeile ermöglicht höchste Präzision. Jede Option jedes Befehls steht zur Verfügung. Viele Linux-Befehle verfügen über eine Vielzahl von Optionen. Betrachtet man beispielsweise den Befehl „lsof“ und dessen Manpage, so wird deutlich, wie schwer es wäre, dies in eine GUI zu verpacken.

Es gibt zu viele Optionen, um sie dem Nutzer in einer effizienten GUI anzubieten. Es wäre überwältigend, unübersichtlich und umständlich. Dies widerspricht dem eigentlichen Zweck einer GUI.

Es gibt für jede Aufgabe ein geeignetes Werkzeug. Man sollte sich nicht vor der CLI scheuen. Oft ist sie das schnellere und agilere Pferd. Wer sich damit vertraut macht, wird es nicht bereuen.