Die Befehlshistorie über mehrere Rechner hinweg im Blick behalten

Aus LinuxUser 09/2022

Die Befehlshistorie über mehrere Rechner hinweg im Blick behalten

© Ion Chiosea / 123RF.com

Magische Schildkröte

Atuin ergänzt die History-Funktion der Shell um einige praktische Abfragen und synchronisiert sie zudem netzweit.

“Wie war noch gleich dieser lange Befehl, den ich letztes Jahr auf meinem Notebook eingegeben habe und der mir alle installierten Pakete anzeigt?” Kommen Fragen wie diese Ihnen allzu vertraut vor, sollten Sie weiterlesen.

Unix-Shells wie die Bash, Fish oder Zsh besitzen bereits grundlegende Funktionen, um die zuletzt genutzten Befehle in der Kommandozeile erneut aufzurufen. Mit der Pfeiltaste nach oben lässt sich die Befehlshistorie durchstöbern, jeder Tastendruck blättert einen Eintrag zurück.

Etwas auskunftsfreudiger und bei länger zurückliegenden Befehlen komfortabler ist die History-Funktion der Bash. Erstmals tauchte sie 1978 in Unix in der C-Shell auf und verbreitete sich von dort aus in viele Kommandozeileninterpreter bis hin zu Microsofts command.exe. Ein ausführliches Handbuch [1] zur History-Funktion findet sich auf der Webseite von DigitalOcean (Abbildung 1).

Abbildung 1: Der History-Befehl listet den Verlauf der eingegebenen Kommandos auf. Durch Eingeben eines Ausrufezeichens gefolgt von der entsprechenden Nummer lassen sich Befehle aus der Liste wieder ausführen.

Abbildung 1: Der History-Befehl listet den Verlauf der eingegebenen Kommandos auf. Durch Eingeben eines Ausrufezeichens gefolgt von der entsprechenden Nummer lassen sich Befehle aus der Liste wieder ausführen.

Das History-Tool Atuin [2] geht noch einige Schritte weiter. Es ersetzt den bestehenden Shell-Verlauf durch eine SQLite-Datenbank, importiert den bisherigen Verlauf, bietet mehr Suchmöglichkeiten und zeichnet zusätzlichen Kontext zu den in Atuin genutzten Befehlen auf.

Außerdem synchronisiert es die aufgezeichnete History Ende-zu-Ende-verschlüsselt über einen externen Server auf andere Geräte im Netzwerk. Dahinter steckt der Gedanke, dass Anwender mit mehreren Rechnern in ihrem Netzwerk nicht nur den Shell-Verlauf einer einzelnen Sitzung oder eines einzelnen Rechners nutzen, sondern den gesamten Verlauf aller synchronisierten Geräte abrufen können. Dabei unterstützt das Tool derzeit die Shells Bash, Fish und Zsh.

Der Name Atuin rührt von einer Schildkröte her, die in den Romanen Sir Terry Pratchetts die Scheibenwelt durchs All trägt. In Rust geschrieben läuft Atuin entweder als Client auf dem Desktop oder selbst gehostet als Client-Server-Anwendung. Wählen Sie die zweite Option, findet die Synchronisation über Ihren Server statt, ansonsten über einen Server des Projekts. Wünschen Sie keine Synchronisation, schalten Sie die standardmäßig aktivierte Funktion in den Einstellungen ab.

Installation

Einige Distributionen bringen Atuin in den Paketquellen mit, darunter Alpine Linux, Arch Linux, NixOS und Manjaro. Installieren Sie Atuin über ein Distributionspaket, dann müssen Sie anschließend noch drei Befehle ausführen, um die für das Tool nötigen Hooks in die Datei .bashrc zu schreiben (Listing 1).

Listing 1

Hooks in .bashrc schreiben

$ curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
$ echo ' -f ~/.bash-preexec.sh  && source ~/.bash-preexec.sh' >> ~/.bashrc
$ echo 'eval "$(atuin init bash)"' >> ~/.bashrc

Anwender von auf Debian basierenden Distributionen beziehen ein aktuelles Binärpaket der aktuellen Version 0.10 über die Github-Seite des Projekts [3]. Für alle anderen Distributionen lässt sich das Tool über ein Skript installieren (Abbildung 2), das Sie wie in der ersten Zeile von Listing 2 gezeigt aufrufen.

Abbildung 2: Mithilfe eines Skripts lässt sich Atuin einsatzbereit installieren. Verwenden Sie ein Binärpaket, braucht es etwas Nacharbeit.

Abbildung 2: Mithilfe eines Skripts lässt sich Atuin einsatzbereit installieren. Verwenden Sie ein Binärpaket, braucht es etwas Nacharbeit.

Listing 2

Atuin installieren

$ bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
[...]
$ atuin register -u User -e E-Mail -p Passwort
$ atuin import auto
$ atuin sync
[...]
$ atuin login -u User -p Passwort -k Key

Den bisherigen Befehlsverlauf der Shell importieren Sie über das Kommando atuin import auto. Damit ist Atuin in dieser Konstellation einsatzbereit. Soll eine Synchronisation mit anderen Geräten über den Server von Atuin stattfinden, rufen Sie das Skript auf und führen danach die Befehle aus den Zeilen 3 bis 5 von Listing 2 aus.

Alternativ lässt sich zur Installation auf einem Server ein Docker-Image nutzen [4]. Für ein einfaches Ausrollen steht eine Docker-Compose-Datei bereit [5].

Konfiguration

Atuin legt im Home-Verzeichnis des Anwenders an zwei Stellen Dateien an. Die SQLite-Datenbank findet sich unter .local/share/atuin/. Die Konfigurationsdatei (Abbildung 3) im TOML-Format [6] platzieren Sie in .config/atuin/. Im Fall der Synchronisation landet zusätzlich der Key zur Verschlüsselung im Verzeichnis ~/.local/share/atuin/ und lässt sich über den Befehl atuin key abrufen. Sie benötigen ihn für das Login auf einem synchronisierten Rechner über den Befehl aus der letzten Zeile von Listing 2.

Abbildung 3: Atuin l&auml;sst sich schnell konfigurieren. Wichtig ist, sich f&uuml;r oder gegen das Synchronisieren zu entscheiden. Daf&uuml;r gibt die Konfiguration den offiziellen Atuin-Server vor. Hosten Sie selbst, muss hinter <code>sync_address</code> Ihre Server-Adresse stehen.

Abbildung 3: Atuin lässt sich schnell konfigurieren. Wichtig ist, sich für oder gegen das Synchronisieren zu entscheiden. Dafür gibt die Konfiguration den offiziellen Atuin-Server vor. Hosten Sie selbst, muss hinter sync_address Ihre Server-Adresse stehen.

Die TOML-Datei fürs Installieren auf einem Server erstellen Sie unter ~/.config/atuin/ als server.toml. In der Konfigurationsdatei für den Client auf dem Desktop lässt sich unter anderem der Pfad zur Datenbank ändern, die Synchronisation deaktivieren, deren Frequenz festlegen und ein eigener Server verlinken. Als Synchronisationsfrequenz gibt die Dokumentation eine Stunde an, die Konfigurationsdatei setzt sync_frequency jedoch auf fünf Minuten. Setzen Sie stattdessen eine Null ein, synchronisiert Atuin nach jedem Befehl.

Beim Suchmodus haben Sie die Wahl zwischen den Optionen prefix, fulltext und fuzzy; in der Vorgabe kommt prefix zum Einsatz. Die Volltextsuche funktioniert wie eine Suchmaschine und versucht, die engste Übereinstimmung mit dem Suchbegriff zu identifizieren. Die Syntax der Fuzzy-Suche listen die Entwickler in der Dokumentation [7] auf.

Für die Suche können Sie zusätzlich einen Filter-Modus [8] mit den Optionen GLOBAL, HOST, SESSION und DIRECTORY aufsetzen, die die Ergebnisse entsprechend eingrenzen.

Um sich anfangs hinsichtlich der verfügbaren Optionen zu orientieren, nutzen Sie wie üblich den Hilfe-Befehl atuin --help. Im einfachsten Fall liefert der Aufruf atuin search das gewünschte Ergebnis (Abbildung 4).

Abbildung 4: Im normalen Modus geben Sie das Stichwort f&uuml;r die Suche bereits mit dem Aufruf von Atuin an.

Abbildung 4: Im normalen Modus geben Sie das Stichwort für die Suche bereits mit dem Aufruf von Atuin an.

Interaktiver Modus

Atuin verfügt über einen interaktiven Modus, den Sie mittels atuin search -i aufrufen und mit [Strg]+[C] wieder verlassen. Ohne weitere Argumente zeigt der Befehl den Verlauf der eingegebenen Kommandos, wobei das zuletzt eingegebene zuunterst steht (Abbildung 5). Die Anzahl der gezeigten Befehle richtet sich nach der Angabe für die HISTFILESIZE in der .bashrc. Die Zahl der gespeicherten Befehle ist von Haus aus auf 500 begrenzt.

Abbildung 5: Der interaktive Modus verr&auml;t oben rechts, wie viele Befehle angezeigt werden. In der Eingabezeile unten l&auml;sst sich der Filter &auml;ndern und durch Eingeben von Zeichenfolgen die Suche einschr&auml;nken.

Abbildung 5: Der interaktive Modus verrät oben rechts, wie viele Befehle angezeigt werden. In der Eingabezeile unten lässt sich der Filter ändern und durch Eingeben von Zeichenfolgen die Suche einschränken.

Mit dem Mausrad oder den Pfeiltasten bewegen Sie sich durch die Liste der Befehle. Die Zahlen links vor den Kommandos erlauben per [Alt]+[Ziffer] direkt zum jeweiligen Befehl zu springen. Vor jedem Befehl zeigt Ihnen Atuin außerdem an, wie lange dessen Ausführung gedauert hat. Am unteren Rand des Fensters befindet sich eine Eingabezeile, mit der Sie die Ausgabe durch Stichwörter eingrenzen (Abbildung 6). Geben Sie dort etwa apt ein, erscheinen nur noch Befehle, die dieses Stichwort enthalten.

Abbildung 6: Hier filtert der eingegebene Buchstabe <code>d</code> die Ausgabe auf damit beginnende Befehle. Mit <span class="key-combo">[Strg]+[R]</span> grenzen Sie den Filtermodus von <code>GLOBAL</code> weiter ein.

Abbildung 6: Hier filtert der eingegebene Buchstabe d die Ausgabe auf damit beginnende Befehle. Mit [Strg]+[R] grenzen Sie den Filtermodus von GLOBAL weiter ein.

Ganz links in der Zeile sehen Sie standardmäßig die Filterangabe GLOBAL. Der Begriff steht für die Anzeige der Befehle aus allen synchronisierten Verläufen. Mit [Strg]+[R] limitieren Sie das mit HOST auf den gerade genutzten Rechner, mit SESSION auf die laufende Sitzung oder mit DIRECTORY auf Befehle, die aus dem derzeit aktiven Verzeichnis aufgerufen wurden.

Normale Suche

Indem Sie Atuin beim Aufruf weitere Argumente mitgeben, filtern Sie unter anderem nach Exit-Codes, beschränken die Ergebnisse also beispielsweise auf erfolgreich abgeschlossene Befehle. Daneben können Sie die Ausgabe über das Angeben von Verzeichnissen steuern, aus denen Befehle eingegeben wurden. Die Suche lässt sich zudem auf bestimmte Zeiträume einschränken (Abbildung 7). Einige Beispiele dazu finden Sie in der Tabelle “Beispiele für Abfragen mit Atuin”. Weitere Parameter lesen Sie in der Dokumentation der Suchfunktion auf Github nach [9].

Abbildung 7: Die Suchergebnisse lassen sich auf verschiedene Arten verfeinern. Hier geht es um Befehle, die nach dem 1.&nbsp;Juli&nbsp;2022 eingegeben wurden und mit Exit-Code&nbsp;1 endeten.

Abbildung 7: Die Suchergebnisse lassen sich auf verschiedene Arten verfeinern. Hier geht es um Befehle, die nach dem 1. Juli 2022 eingegeben wurden und mit Exit-Code 1 endeten.

atuin -e (--exit) 1

Zeigt an welche eingegebenen Befehle nicht erlaubt waren, meist wegen fehlender Berechtigung (siehe Tabelle “Exit-Codes”).

atuin search --exclude-exit 1

Bewirkt das Gegenteil des obigen Befehls.

atuin search --exit 1 --after 01/07/2022

Zeigt Befehle an, die nach dem 1. Juli 2022 eingegeben und in der Form nicht ausführbar waren. Analog lässt sich der Parameter --before einsetzen.

atuin search --exit 0 --before 01/07/2022 --cwd .

Zeigt Befehle an, die vor dem 1. Juli 2022 erfolgreich aus dem derzeitigen Verzeichnis (--cwd .) ausgeführt wurden.

atuin gen-completions --shell bash --out-dir ~/.config/atuin

Erstellt eine Befehlsvervollständigung (bash-completion) im angegebenen Verzeichnis.

curl https://api.atuin.sh/enable -d $(cat ~/.local/share/atuin/session)

Erstellt einen Aktivitätsgraphen ähnlich dem für Github-Aktivitäten.

Exit-Code

Bedeutung

0

Erfolg

1

Operation nicht erlaubt

2

Verzeichnis existiert nicht

3

Prozess existiert nicht

Eher Unterhaltungswert hat der Befehl atuin stats all, der eine Gesamtstatistik ausgibt und sich tageweise zum Beispiel mit atuin stats day last friday oder durch Angeben eines Datums nutzen lässt (Abbildung 8). Wie Sie einen Aktivitätsgraphen im Github-Stil erzeugen, sehen Sie in der letzten Zeile der Tabelle “Beispiele für Abfragen mit Atuin”. Das setzt allerdings die Registrierung für den öffentlichen Sync-Server oder den Betrieb eines eigenen Servers voraus.

Abbildung 8: Der Befehl <code>stats</code> zeigt auf, wie viele Befehle Sie eingegeben und welchen davon Sie am h&auml;ufigsten verwendet haben. Auch hier l&auml;sst sich das Resultat zeitlich eingrenzen.

Abbildung 8: Der Befehl stats zeigt auf, wie viele Befehle Sie eingegeben und welchen davon Sie am häufigsten verwendet haben. Auch hier lässt sich das Resultat zeitlich eingrenzen.

Fazit

Es gibt viele Werkzeuge, die grundlegende History-Funktionen auf unterschiedliche Weise erweitern. Das erstmals im April 2021 veröffentlichte Atuin legt den Schwerpunkt auf die Synchronisation von Befehlsverläufen auf unterschiedlichen Rechnern. Die Ergebnisse können Sie global über alle synchronisierten Rechner hinweg nutzen. Sie lassen sich aber auch nach Rechner, der aktuellen Sitzung oder dem Verzeichnis filtern, von denen aus sie ursprünglich aufgerufen wurden.

Die Dokumentation ist zwar noch ausbaufähig, ansonsten tut Atuin aber genau, was es soll. Direkte Unterstützung zu dem Tool erhalten Sie bei Bedarf im Atuin-Kanal auf Discord [10]. Falls Sie sich dafür interessieren, auf welchem Weg Projekte wie dieses zustande kommen, erfahren Sie mehr dazu in einem Interview mit Ellie Huxtable, der Entwicklerin hinter Atuin [11]. (csi/jlu)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 09/2022 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben