Setup III: Die Kommandozeile
In zwei vorausgegangenen Beiträgen habe ich geschildert, wie ich Texte erstelle und meine Daten verwalte. Der folgende Beitrag ist der letzte zu meinem Setup. In ihm beschreibe ich, wie ich meine Kommandozeile konfiguriert habe und welche Programme ich hauptsächlich darauf zu laufen habe.
Die Kommandozeile
Je weiter man ernsthaft in das Programmieren einsteigt, desto mehr Zeit verbringt man auf der Kommandozeile, oder Cli für “Command line interface”. Sie wird zum eigentlichen Dreh- und Angelpunkt der täglichen Arbeit. Dabei ist sie für die meisten zunächst nicht gerade intuitiv zu benutzen. Das einzige, was sie einem zunächst bietet, ist ein trockenes:
~ $
Die Kommandozeile besteht nämlich nicht aus einer graphischen Benutzoberfläche, sondern aus reinem Text. Das bringt es mit sich, dass man sich zunächst in den Umgang mit der Kommandozeile einarbeiten muss.1 Wenn man dies einmal hinter sich hat, merkt man aber, dass vieles schneller und einfacher geht. Ich ertappe mich deshalb immer wieder dabei, dass ich mehr und mehr Zeit auf der Kommandozeile verbringe.
Besonders praktisch sind die Verarbeitungsketten, sogenannte “Pipes”, zu denen man einzelne Programme hintereinander schalten kann.
Die Idee dahinter folgt der Unix-Philosophie, der zufolge ein Programm möglichst gut eine bestimmte Aufgabe und nicht mehr können sollte.
Komplizierte Probleme löst man dann, indem man die einzelnen Programme miteinander verknüpft.
So liest beispielsweise der Befehl ls -l | grep "Suchbegriff"
zunächst den Inhalt des aktuellen Verzeichnisses aus, übergibt aber das auszugebenden Ergebnis an das Programm grep
, mit dem nach dem “Suchbegriff” gesucht wird.
Ausgegeben werden dann nur die Dateien, auf die der “Suchbegriff” zutrifft.
Mithilfe einer Pipe lassen sich also unter anderem Filter schaffen.
Konfiguration
Um sich die Arbeit auf der spartanisch wirkenden Kommandozeile angenehmer zu gestalten, kann man auf zahlreiche Hilfsmittel zurückgreifen.
Zu allererst sollte man ein gutes Terminal benutzen, das vielseitig zu konfigurieren ist.
Ich nehme dafür das kostenlose und sehr beliebte Programm iTerm.
Es ersetzt vollständig das von Apple mitgelieferte Terminal
und tritt an seine Stelle.
Solch ein Terminalprogramm stellt gleichsam den Rahmen für die Kommandozeile zur Verfügung.
Angenehmer für die Augen, obendrein sehr viel cooler anzusehen und möglichst geeky ist es, wenn man noch ein schönes Farbschema installiert.
Ich habe mich für das Schema “Material Design Colors” entschieden, das dankenswerterweise Martin Seeler für iTerm zusammengestellt hat.
Die eigentliche Kommandozeile wird von einer sogenannten “Shell” bereitgestellt. Standardmäßig ist bei macOS die Bash vorinstalliert. “Bash” steht für “Bourne again Shell”. Sie dient als textbasierte Benutzschnittstelle zwischen Mensch und Computer. Man spricht auch von einem Kommandozeileninterpreter. Das heißt, sie ist dafür verantwortlich, dass die auf der Kommandozeile eingegebenen Befehle tatsächlich ausgeführt werden. Sie gibt meist die Ausgaben der Befehle wieder und meldet, wenn es zu einem Fehler gekommen sein sollte.
Ich persönlich benutze lieber die ZSH. Sie bietet eine vergleichbare Funktionsvielfalt, lässt sich aber leichter und schöner den eigenen Bedürfnissen anpassen. Das gilt insbesondere dank des großartigen Projektes Oh-My-Zsh. Oh-My-Zsh ist ein quelloffenes Framework, das etliche Funktionen, Plugins und Themen bereitstellt.
Die Plugins erlauben es, die Eingabe häufig verwendeter Befehle zu erleichtern.
Außerdem bietet Oh-My-Zsh hunderte von Abkürzungen.
So listet man normalerweise mit dem Befehl ls -lah
das Verzeichnis, in dem man sich aktuell befindet, in einer Listenansicht mit allen versteckten Dateien und den Größenangaben in einer leicht verständlichen Form auf.
Mit der Oh-My-Zsh benötigt man nur l
dafür.
Aus einem git commit -a -m
wird ein simples gcam
.
Zwei Beispiele unter hunderten.
Ein weiterer Grund, warum ich die ZSH und Oh-My-Zsh nicht mehr missen möchte, sind die Themen, mit denen man das triste $
der Shell phantastisch aufhübschen kann.
Ich liebe beispielsweise das Thema “Agnoster”, das sich mit dem Befehl ZSH_THEME="agnoster"
in der Datei ~/.zshrc
einstellen lässt.
Überhaupt lassen sich über die Konfigurationsdatei .zshrc
zahlreiche Einstellungen vornehmen, von denen etliche nur noch aktiviert werden müssen.
Kurzum, ich kenne keinen besseren Kommandozeileninterpreter!
Da ich zudem ein Freund ansprechender graphischer Gestaltung bin, versuche ich davon so viel wie möglich auch während der Arbeit mit der Cli zu sehen zu bekommen.
Ich habe deswegen unter anderem das kleine, aber feine Programm archey
installiert, das mir jedes Mal, wenn ich ein neues Terminal-Fenster öffne, die wichtigsten Informationen zu meiner Arbeitsumgebung vor Augen führt.
Das Ganze sieht dann so aus:
Programme
Das Programm archey
ist nicht standardmäßig auf macOS installiert.
Um es benutzen zu können, muss man es zunächst aus dem Netz laden.
Ich kenne für den Mac kein besseres Werkzeug dafür als Homebrew.
Homebrew stellt in sogenannten Rezepten die notwendigen Installationsanleitungen zur Verfügung, lädt auf Wunsch die entsprechenden Dateien und führt selbständig alle Schritte aus, um ein Programm zu installieren.
Mit brew search <program>
kann nach dem Rezept gesucht werden.
Gibt man auf der Kommandozeile brew install <programm>
ein, braut Homebrew alles Notwendige zusammen.
Das beste daran ist aber, dass Homebrew die Programme in einer Sandbox installiert, damit sie nicht Systemdateien überschreiben oder Schadcode ausführen können.
Um archey
zu installieren, musste ich also nur brew install archey
eintippen – und Homebrew übernahm den Rest.
Auf dieselbe Weise habe ich die meisten anderen Programme für die Cli installiert, die nicht mit an Bord waren.
Das betraf zum Beispiel Midnight-Commander, einen großartigen Dateimanager, den lang erfahrene Benutzer noch als Klon des Norton Commander aus alten Dos-Zeiten wiedererkennen werden und den man mit mc
aufruft.
ranger
hingegen ist ein Programm, mit dem sich schnell Verzeichnisse durchschreiten und betrachten lassen.
Für die Versionsverwaltung git
gibt es bei Homebrew das Programm tig
, das optisch die Repositorien und Diffs darstellt und in dem sich zentrale Befehle über Tastenkürzel ausführen lassen.
Ebenfalls zu den bekannten und beliebten unixoiden Programmen zählt htop
, das die Auslastung des Systems und einzelne Prozesse vor Augen führt.
Mithilfe des Programms ledger
und seiner Haskell-Derivate hleader
und Co. lässt sich sogar ein Haushaltsbuch mit doppelter Buchführung führen.
Reizvoll daran ist nicht nur die einfache Art und Weise, einzelne Posten einzugeben und sich Budget-Informationen und Ausgaben-Auflistungen direkt auf der Kommandozeile ausgeben zu lassen.
Die Daten liegen außerdem als reiner Text vor, können also von jedem beliebigen Editor bearbeitet und von einer Versionsverwaltung wie git
überwacht werden.
Da geht natürlich das Herz eines jeden Historikers auf, weil sie oder er weiß, dass seine Daten nachhaltig aufbewahrt bleiben.
Apropos Editor: Vim und Neovim entfalten ihre Stärke insbesondere dann, wenn sie auf der Kommandozeile ausgeführt werden.
Ich bin deshalb immer noch und immer wieder von dem Programm tmux
begeistert.
Dabei handelt es sich um einen sogenannten “Terminal multiplexer”, also ein Programm, das ein Terminal simuliert und die dazugehörigen Fenster verwaltet.2
Aus ein und derselben Kommandozeile lässt sich dank tmux eine komplette Arbeitsumgebung erstellen, die ein Fenster für den Editor bereithält, einen Teil aber für eine Server-Konsole reserviert, während in einem weiteren Fenster ein REPL wie pry
läuft oder Prozesse mithilfe von htop
überwacht werden.
Fazit
Obwohl die Kommandozeile auf den ersten Blick wie ein Relikt aus den frühen Zeiten des Personal Computers anmutet: Ich bin mir sicher, dass sie bleiben wird. Mit etwas Zeit und Mühe lässt sie sich in eine äußerst produktive Arbeitsumgebung verwandeln, die zudem viel von ihrem spröden Charakter dank optisch aufwendig gestalteter Programme verliert und stark an Charme gewinnt.3 Die Grundlage all dessen ist Text, den wechselweise der Computer und sein Benutzer lesen und schreiben. Was für eine Kulturleistung!
Literatur
- Bates, Mark: Conquering the Command Line. Unix and Linux Commands for Developers, n.l.: Softcover 2017.
- Hogan, Brian P.: tmux 2. Productive Mouse-Free Development, Raleigh: The Pragmatic Programmers 2016 (The Pragmatic Bookshelf).
-
Eine hilfreiche Einführung ist z.B. die Monographie von Bates, Mark: Conquering the Command Line. Unix and Linux Commands for Developers, n.l.: Softcover 2017. ↩
-
Eine sehr hilfreiche Einführung dazu bietet Hogan, Brian P.: tmux 2. Productive Mouse-Free Development, Raleigh: The Pragmatic Programmers 2016 (The Pragmatic Bookshelf). ↩
-
Meine Einstellungen für die Kommandozeile und die dort genutzten Programme befinden sich größtenteils in sogenannten Dotfiles. ↩