Upgrade deine Command-Line mit diesen Rust-basierten Werkzeugen

20.07.2022 Raffael Schneider
Tech DevOps Rust cli productivity core-utils

Upgrade deine Command-Line mit diesen Rust-basierten Werkzeugen

Rust hat seit seiner Einführung unter Entwicklern eine gewisse Notorietät erreicht. Die Sprache ist komplex, verbaut viele einschneidige Konzepte, wird kompiliert und ist wie C/C++ eine Systemprogrammiersprache. Dennoch ist Rust beliebt wie keine andere. Seit Jahren führt Rust die Liste im jährlichen StackOverflow Developer Survey als beliebteste Programmiersprache an und scheint gerade auf Github unter Hobbyprojekten sehr verbreitet zu sein.

Obwohl ich es nicht genau einzuschätzen vermag, wie der Zusammenhang genau entstanden ist, Fakt ist, dass viele altbekannte Anwendungen mit Rust neu verfasst werden. Gerade im Bereich Command-Line wird das Rad gerne neu erfunden und führt dort zu einem bemerkenswerten Upgrade der User Experience, sofern man diese Programme benutzt.

Genau darum geht es im heutigen TechUp. Wir schauen uns die beliebtesten CLI-basierten Rust-Projekte an und ich zeige dir, wie du diese installieren und verwenden kannst. 🦀👌

📦 Pakete mit Cargo installieren

In der Rust-Landschaft ist Cargo das Referenzwerkzeug, um Pakete zu verwalten und Rust-basierte Projekte zu bauen. Da wir nun Rust-Projekte installieren wollen, ist es sicherlich sinnvoll, sich auch bei Gelegenheit Cargo zu installieren, sofern man nicht den OS-eigenen Paketmanager bevorzugen sollte.

Die Installation von Cargo ist relativ einfach und geht so:

❯ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
...
Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source "$HOME/.cargo/env"

Man muss per Inline-Command nochmals mit "1" bestätigen, dass rustup Cargo, sowie weitere Toolchain-Objekte installieren darf. Wenn die Tools installiert sind, müssen wir noch source "$HOME/.cargo/env" ausführen. Sobald dies erfolgreich gemacht ist, prüfen wir kurz, ob eine valide Version von Cargo vorhanden ist, und fahren gleich fort.

❯ cargo --version
cargo 1.60.0 (d1fd9fe2c 2022-03-01)

Installationsbeispiel anhand von exa

Eines des ersten Pakete, die wir mit Cargo installieren möchten, ist exa, ein Ersatz für cp. Das lässt sich mit cargo install <Paketname> einfach installieren.

❯ cargo install exa
    Updating crates.io index
  Downloaded exa v0.10.1
  Downloaded 1 crate (136.6 KB) in 0.60s
         ...
    Finished release [optimized] target(s) in 1m 12s
  Installing /Users/rschneider/.asdf/installs/rust/1.60.0/bin/exa
   Installed package `exa v0.10.1` (executable `exa`)

Jetzt muss man noch wissen, dass Cargo standardmässig die Binaries der zu installierenden Pakete in einen eigens für das userspezifische Root-Verzeichnis unter ~/.cargo/bin/ ablegt. Man kann dieses Root-Zielverzeichnis mit der Umgebungsvariable CARGO_INSTALL_ROOT übersteuern. Im meinem Beispiel wird ersichtlich, dass ich asdf (Wir haben auch ein TechUp zu asdf, schau rein!) als Versionsmanager im Einsatz habe und asdf dafür sorgt, dass für für Version 1.60.0 ein eigenes Root-Zielverzeichnis unter ~/.asdf/installs/rust/1.60.0/bin/ vorhanden ist.

Ich könnte jetzt dieses Verzeichnis mit CARGO_INSTALL_ROOT übersteuern und auf das standardmässige ~/.cargo/bin/ zeigen lassen. Das machen wir hier jetzt aber nicht. Stattdessen möchte ich noch erwähnen, dass wir kurz prüfen sollten, ob rustup unserer Shell über die $PATH-Umgebungsvariable unser Root-Verzeichnis der Wahl hinzufügt hat.

❯ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...:/Users/rschneider/.cargo/bin

Soweit, so gut. Nun können wir ohne weiteres exa ausführen:

❯ exa
Applications  Desktop  Development  Documents  Downloads  Library  Movies  Music  Pictures  Public

Hurra, hoffentlich haben wir hier was neues dazu lernen können. Nun kommen wir zur eigentlichen Ausgangsfrage des heutigen TechUps: Warum sollte ich überhaupt exa und diese ganzen anderen Tools nutzen wollen? Im Folgenden stelle ich dir wie versprochen einige CLI-Tools vor, die deine Command-Line auf ein neues Level bringen. 🚀

exa – A modern replacement for ls

Was ist exa ? Nun, exa macht quasi das genau gleiche wie ls, nur besser. Neben ls, eignet sich exa auch gut als Ersatz für tree. Ein grosser Vorteil von exa ist, dass sich Dateiformate und Metadaten mithilfe von Farben unterscheiden lassen. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

bat – A cat clone with wings

bat ist ein Ersatz für das altbekannte cat, kann aber auch less oder more ersetzen. bat unterstützt Syntax Highlighting, Git und weitere coole Features. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

du + rust = dust. Like du but more intuitive.

Disk usage, oder besser gesagt du, wird mit dust noch besser. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

tokei – 時計 Count your code, quickly

Tokei ist ein Programm, welches dir Statistiken zu deinem Code zeigt. Es zeigt dir die Anzahl der Dateien und Linien innerhalb dieser Dateien, sogar nach Programmiersprache gruppiert, an. Ziemlich cool. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

fd – A simple, fast and user-friendly alternative to 'find'

fd ist wie find, nur etwas simpler und benutzerfreundlicher. fd ist zudem intuitiver und schneller als find. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

tealdeer – A fast TLDR client

TLDR heisst "Too long; didn't read" und ist ein Slang-Akronym aus dem Internet. Es gibt ein Projekt mit dem gleichen Namen, welches vereinfachte, durch die Community gewartete, Man-Pages verwaltet. Tealdeer ist eine Rust-Implementation davon, mit Fokus auf Schnelligkeit. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

ytop – A TUI system monitor written in Rust

ytop ist wie top. Es zeigt dir alle aktuell laufende Prozesse und Informationen über die Nutzung von Systemressourcen, wie CPU und RAM-Usage, an. Leider wird das Projekt nicht mehr fortgeführt, weshalb ich dir als nächstes noch bottom vorstelle. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

bottom – A customizable cross-platform graphical system monitor for the terminal

bottom ist wie top oder ytop. Weitere Informationen dazu findest du auf der Github-Page des Projekts.

In den Alltag integrieren über Aliases

Jetzt wollen wir alle diese Utilities noch in unseren Alltag übernehmen, also am besten in allen verwendeten Shells als Aliases definieren.

Hier zum Beispiel ein Ausschnitt aus meiner ~/.zshrc:

# ...
alias p="pwd"
alias c="curl"
alias vim="hx"
alias vi="vim"
alias exa="exa --icons"
alias ls="exa --icons"
alias tree="exa --icons -T"
alias t="tree"
alias less="bat --paging=always"
alias cat="bat -p --paging=never"
alias du="dust"
alias top="ytop"

Danach müssen wir noch mit source ~/.zshrc die Konfiguration in der bestehenden TTY-Session neu laden. Falls du eine andere Shell als zsh benutzen solltest, musst du den command entsprechend anpassen: source ~/.<Deine Shell>rc

Weiterführende Quellen und Ressourcen

https://rustup.rs/

https://crates.io/

https://github.com/matu3ba/awesome-cli-rust

https://gist.github.com/sts10/daadbc2f403bdffad1b6d33aff016c0a

Raffael Schneider – Crafter, Disruptor, Freethinker. Als leidenschaftlicher Software-Crafter schreibt Raffael gerne über Programmiersprachen und Resilienz in modernen verteilten Systemen. Ob DevOps, SRE oder Systemarchitektur, Raffael weiss stets wie man diese Dinge auf eine neue Weise betrachten kann.