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.