Webkrauts Logo

Webkrauts Webkrauts Schriftzug

- für mehr Qualität im Web

Keine Angst vor dem Terminal

Kommandozeilentools vs. grafische Interfaces

Keine Angst vor dem Terminal

Von einigen gefürchtet, von anderen geliebt: die Kommandozeile. Sie gilt in Zeiten grafischer Benutzeroberflächen eigentlich als veraltet, ist aufgrund ihrer Flexibilität und Mächtigkeit aber immer noch Bestandteil moderner Betriebssysteme. Warum also solltet ihr tippen, wenn ihr auch klicken könnt?

Im Jahr 1983 brachte Apple einen Personal Computer namens Lisa heraus, der sich aufgrund des horrenden Preises von ca. 10.000 US-Dollar kaum verkaufte, dessen Produktion nur ein Jahr später eingestellt wurde und der dennoch nachhaltigen Einfluss hatte – Lisa war der erste PC mit einem grafischen Benutzerinterface. Ein neuartiges Eingabegerät namens Maus sollte das eintippen von Befehlen mittelfristig überflüssig machen.

Über 30 Jahre nach Lisa verfügt immer noch jedes moderne PC-Betriebssystem über eine Kommandozeile. Insbesondere auf UNIX-basierten Systemen wie Linux und OS X schwören eingefleischte Tastaturnutzer auf die Flexibilität und Leistungsfähigkeit von Kommandozeilenwerkzeugen. Die Professionalisierung der Frontend-Entwicklung hat eine Vielzahl von Tools hervorgebracht, für die es z.T. zwar grafische Interfaces oder Alternativen gibt, die jedoch von Hause aus auf der Kommandozeile angesiedelt sind – git, Sass, Grunt und Bower etwa.

Viele Benutzer finden die Kommandozeile rückständig und kompliziert, das meistgehörte Argument gegen den Einsatz des Terminals dürfte ein empörtes »Da muss ich ja tippen!« sein. Das ist durchaus nachvollziehbar, immerhin wurden grafische Interfaces eingeführt, um eine intuitive Bedienung der teils komplexen Aufgaben eines PCs, unterstützt durch visuelle und damit leicht zu erfassende Oberflächen, zu ermöglichen. Was aber spricht auch heute noch für die »altbackene« Kommandozeile?

Vorteil: Kommandozeile

  • Leichtgewichtig: Kommandozeilenwerkzeuge verbrauchen weit weniger Systemressourcen, da sie nur wenige Ressourcen des Systems überhaupt ansprechen.
  • Automatisierbar: Das tradionelle UNIX-Paradigma »Ein Job, ein Tool« führt dazu, dass sich Kommandozeilen-Werkzeuge verknüpfen lassen bis hin zu komplexen Skripten, die mehrere Aufgaben automatisiert im Hintergrund ausführen.
  • Portierbar: Grafische Werkzeuge existieren oft nur für eine bestimmte Plattform. Kommandozeilentools laufen üblicherweise überall dort, wo eine gleiche oder vergleichbare Kommandozeile bereit steht.
  • Remote-Zugriff: Kommandozeilen-Tools lassen sich normalerweise problemlos auf entfernten Servern per ssh- oder VPN-Zugriff ausführen.

Darüber hinaus berichten die meisten Kommandozeilenfans, schneller arbeiten zu können. Der stetige Wechsel zwischen Maus oder Trackpad und Tastatur, der bei grafischen Interfaces eben doch nicht zu vermeiden ist, entfällt oder wird zumindest auf ein Minimum reduziert.

Exkurs: Was ist was?

Kommandozeile, Konsole oder Terminal bezeichnet das Interface, in dem der Benutzer normalerweise in Textform Befehle an eine Schnittstelle weitergibt, die je nach Betriebssystem entweder als Shell oder Kommandozeileninterpreter (CLI) bezeichnet wird und diese Befehle ausführt. Normalerweise hat der Benutzer die Wahl zwischen verschiedenen Terminals und verschiedenen Shells – die gängigste Shell auf unixoiden Betriebssystemen ist die bash, die gebräuchlichsten Terminals dürften xterm unter Linux sowie iTerm oder Terminal.app unter OS X sein.

Windows wird gerne für seine vergleichsweise limitierte Kommandozeile, die »Eingabeaufforderung«, belächelt, allerdings lässt sich mit etwas Aufwand auch unter Windows eine bash installieren (alternativ auch z.B. via Cygwin).

Eine kurze, sehr einfache Demonstration

Aufgabenstellung: Finde alle HTML-Dateien in einem Verzeichnis und dessen Unterverzeichnissen, die ein <h2>-Element enthalten.

Lösung im Terminal: grep -rl \<h2\> *.html

grep gehört zu den Tools, die seit Jahrzehnten standardmäßig auf unixartigen Betriebssystemen verfügbar sind – vereinfacht gesagt dient es der Suche nach bestimmten Zeichenketten in Dateien. Ausformuliert bedeutet diese kryptische Befehlszeile: das Programm grep durchsucht nun rekursiv (dafür das -rl) alle HTML-Dateien (dafür das *.html) im aktuellen Verzeichnis nach dem Muster <h2>. Da die spitzen Klammern im Terminal Sonderzeichen darstellen, müssen sie im Suchmuster mit einem Backslash maskiert werden. Als Ergebnis werden alle betroffenen Dateien aufgelistet.

Sehr viel mehr und komplexere Beispiele, was mit der Kommandozeile möglich ist, finden Interessierte z.B. in einem Artikel von Craig Hockenberry.

Aber das ist alles so kompliziert!

Häufigster Vorbehalt gegen Kommandozeilenwerkzeuge dürfte der Vorwurf sein, sie seien komplex und damit schwierig zu erlernen. Das überrascht nicht, es muss ja einen Grund gegeben haben, intuitivere Interfaces zu erfinden. Shell-Befehle kennen (normalerweise) weder Illustrationen noch Tooltips. Zwar stellen sie üblicherweise über das Schema BEFEHL -h oder BEFEHL --help eine Schnellhilfe bereit und bringen normalerweise über man BEFEHL eine Dokumentation mit, aber die Lernkurve, die am meisten benötigten Befehle zu verinnerlichen, ist doch deutlich steiler.

Wer die Kommandozeile lieben will, muss sie regelmäßig benutzen und Kommandos über die Wiederholung kennenlernen und verinnerlichen. Das braucht Zeit und Geduld – kaum jemand wird an einem Nachmittag zum Kommandozeilen-Fan.

Tipps zur Annäherung

  • Schritt für Schritt: Versucht nicht, Kommandozeilen-Tools auf Anhieb vollumfänglich zu durchschauen. Erschließt Euch nach und nach die Funktionen, die Ihr tatsächlich benötigt.
  • Eingebautes Gedächtnis: Eine Shell merkt sich normalerweise die zuletzt eingegebenen Befehle. In der bash ist diese »History« z.B. über die Cursortasten nach oben und unten zu erreichen – so müsst Ihr häufig verwendete Befehle nicht erneut eintippen.
  • Vervollständigung: Je nach Shell kann Autovervollständigung bereits integriert sein oder nicht – für die gängige bash-Shell z.B. liefert das Paket bash-completion (für Mac-User einfach per Homebrew installierbar) Autovervollständigung und spart viel Tipparbeit.
  • Kürzel: Neben von Shell oder Terminal bereit gestellten Tastatur-Shortcuts könnt Ihr über die Konfiguration der Shell normalerweise auch eigene Kürzel – sogenannte Aliases – anlegen, um z.B. häufig verwendeten oder komplexen Kommandos leichter zu merkende Namen zu geben.

Die Möglichkeiten, die Kommandozeile zu konfigurieren, sind extrem umfangreich und komplex. Simple Dinge wie Größe, Schriftart und Farben lassen sich oft schon in einer grafischen Konfiguration des Terminals einstellen; für die »anspruchsvollen« Anpassungen wie Aliases und Pfade muss man meist etwas tiefer in die Konfiguration. Einsteigern helfen vielleicht die bewährten Konfigurationen anderer Nutzer dabei herauszufinden, was überhaupt möglich ist. Da die Konfiguration üblicherweise über einfache Textdateien (sogenannte »Dotfiles«) erfolgt, legen viele Nutzer ihre Konfigurationsdateien einfach auf GitHub ab – die Dotfiles von Mathias Bynens etwa liefern eine (zugegeben sehr komplexe) Beispielkonfiguration.

Kommentare

Andreas Fieger
am 07.12.2014 - 09:04

Zu den Vorteilen vielleicht noch: Reproduzierbarkeit ("wie wurde das erzeugt"): Befehle, die ich in einem Skript stehen habe kann ich mir später noch anschauen. Wann ich wo in welcher Reihenfolge was geklickt habe lässt sich nicht sagen.

(Klugscheiß) zum grep Beispiel: -r ist rekursiv, -l ist list filenames

Permanenter Link
Johannes Ries

Johannes Ries
am 07.12.2014 - 13:19

Neben dem Ansehen und späteren Nachvollziehen werden so auch Abkürzungen möglich. Bei einer Installationsanleitung kann ich beispielsweise auch einmal via Copy&Paste etwas ausprobieren, ohne dass ich auf Screenshots (auf den oft noch alles anders aussieht als bei mir) einzelne Schritte nachvollziehen muss.
Permanenter Link

Lars K.
am 10.12.2014 - 22:59

Ich pflege seit mittlerweile mehreren Jahren eine Datei namens shell-notizen.txt, in die ich erfolgreiche Kommandos aus der Shell hineinkopiere. Hat mir schon manches erleichtert, gerade bei seltenen, aber wiederkehrenden Aufgaben.

Permanenter Link

Die Kommentare sind geschlossen.