HH maczarr.de

Moderner Ersatz für altbekannte CLI-Tools

Im Prinzip fing alles damit an, dass ich meine Shell unter Linux gewechselt habe hin zu ZSH. Natürlich habe ich mir dann auch das ZSH-Konfigurations-Management-Tool "Oh My ZSH" angeschaut und einige Plugins installiert, sodass meine Shell jetzt ein paar nette, neue Features hat. Merke ich z.B. beim Tippen, dass dieser Befehl eigentlich mit sudo ausgeführt werden sollte drücke ich 2x Esc und es wird sudo davor geschrieben, beim erneuten Drücken wird es entfernt. Fange ich an einen Befehl, den es in meiner History schon gibt, zu tippen, wird mir dieser als Autovervollständigung leicht ausgegraut angeboten und ich kann mir mit "Pfeil rechts" das weitere Tippen einfach sparen. Als Freund der History-Suchfunktion (STRG+r) eine nette Abkürzung zum Ziel. Ein weiteres nettes Feature: wenn ich einen Befehl tippe, den es nicht gibt, weil ich evtl. gerade einen Buchstabendreher habe, wird dieser rot angezeigt. Aber hier sollte es ja eigentlich nicht um ZSH gehen. Jedenfalls brachte mich das alles irgendwie noch zu weiteren modernen Alternativen altbekannter Linux-Tools, die ich euch hier mal zeigen wollte.

exa statt ls

Exa ist ein Ersatz für ls und ist in Rust geschrieben. Bei exa geht es auch um nichts anderes als das Auflisten von Dateien und Ordnern, aber da konnte tatsächlich etwas dran erneuert werden. Vor allem arbeitet exa mit Farben, was gut funktioniert ohne die Shell wie einen bunten Farbtopf aussehen zu lassen. Hier mal zwei Screenshots zum Vergleich.

Verzeichnisausgabe mit ls...

...und hier mit exa.

Des Weiteren bietet exa auch eine kleine Git-Integration an, sodass direkt beim Dateien-Listing gesehen werden kann, ob eine Datei neu ist für git oder bearbeitet wurde. Allerdings wird empfohlen dieses Verhalten nicht standardmäßig einzuschalten, da es ressourcenfressender ist jedes Mal den Git-Status einer Datei zu erfragen. Dazu bringt exa auch noch eine tree-Integration mit für eine ASCII-Baumstruktur-Ansicht der Verzeichnis-Hierarchie. Eine komplette Liste mit Beispielen der Features gibt die Dokumentation von exa auf der Website.

ag statt ack statt grep

Das Tool ack schickte sich vor einiger Zeit an das altehrwürdige grep als Text/Code-Such-Tool ablösen zu wollen. Inzwischen kam nun ag aka "The Silver Searcher" um die Ecke mit dem Statement "A code searching tool similar to ack, with a focus on speed". ag bringt dabei auch so einige Optimierungen für die Software-Entwicklung mit, es werden beispielsweise automatisch Pfade und Dateien ignoriert, die in .gitignore- und .hgignore-Dateien genannt werden. Außerdem kann man weitere Muster zum Ignorieren hinzufügen (als Beispiel werden *.min.js-Dateien genannt). Neben der Geschwindigkeit finde auch die Präsentation der Ergebnisse recht übersichtlich. Natürlich ist auch hier viel einstellbar, siehe man ag.

Wechsel vereinfachen

Meine größte Schwierigkeit am Anfang beim Ausprobieren war, dass ich nicht wirklich darüber nachdenke, wenn ich "l" (mein Alias für ls -l) drücke und so ständig wieder in ls landete statt exa auszuprobieren. Für den alltäglichen Gebrauch habe ich also meine Standard-Aliase überschrieben und für exa noch ein paar weitere angelegt, die ich dann explizit benutze.

# exa
alias exa='exa --header --group --long --time-style=long-iso --group-directories-first -F'
alias exagit='exa --git'
alias exadates='exa --accessed --modified'
alias exatree='exa --tree'
alias exatreemeta='exa --tree'
alias e='exa' # exa is simply to long
alias ee='exa --all'
alias eee='exa --all --all' # exa shows . and .. only if --all is passed twice

alias l='e'
alias ll='ee'

Auch für ag bin ich so verfahren, jedoch waren hier die Aliase relativ simpel. Die Ergebnisse werden prinzipiell mit dem Pager less bei mir ausgegeben, grep ruft jetzt einfach ag auf und um Dateien zu finden (und nicht in Dateien zu suchen) hab ich noch grepfiles hinterlegt.

alias ag='ag --pager less'
alias grep='ag'
alias grepfiles='ag -g'

sonstiges

Zuletzt möchte ich noch ein Tool nennen über das ich gestolpert bin, was ich selbst aber gar nicht einsetze. Es handelt sich um das Tool mit dem schmucken Namen assh. Advanced SSH (kurz assh) legt sich als transparenter Wrapper um ssh und fügt dem Tool damit ein paar Extra-Funktionen hinzu. Hat man beispielsweise die Situation, dass man zu Server A nicht direkt verbinden kann, weil dieser hinter einer Firewall ist und man erstmal zu Server B verbinden muss, der von außen erreichbar ist, dann kann man mit assh dieses vorgehen hinterlegen und assh kümmert sich bei einem ssh serverA darum, dass zuerst zu Server B verbunden und von dort dann weiter nach Server A verbunden wird.

assh bringt noch viel mehr an Möglichkeiten mit um die eigene SSH-Konfiguration zu vereinfachen. Wieso benutze ich das Tool nun also nicht? Ganz einfach: ich habe kein besonders kompliziertes SSH-Setup, weshalb ich keines der Features brauche. Die normalen Möglichkeiten der .ssh/config reichen mir bis dato völlig aus.

Titel-Foto von Kevin Ku auf Unsplash