Shell-History
Wer mit einer Shell unter Linux arbeitet, weiss schnell die History-Funktion zu schätzen. Statt Befehle immer wieder einzutippen, verwendet man die Pfeiltaste, um alte Befehle zurück zu holen oder man wiederholt Befehle aus der History mit «!<Befehlsnummer>». Auch die Kombination history | grep Suchstring kommt sicher vielen bekannt vor.
In diesem Blogbeitrag stelle ich eine bessere und mächtigere Variante vor, mit der Shell-History zu arbeiten, indem man das Werkzeug Atuin verwendet.
Was ist Atuin
Auf der Webseite mit der Dokumentation wird Atuin wie folgt beschrieben:
Atuin replaces your existing shell history with a SQLite database, and records additional context for your commands. With this context, Atuin gives you faster and better search of your shell history.
Additionally, Atuin (optionally) syncs your shell history between all of your machines. Fully end-to-end encrypted, of course.
Atuin ist ein Ersatz der Shell-History durch eine Datenbank, der nützliche Erweiterungen und, wenn das gewünscht wird, sogar die Synchronisation der Shell-History über mehrere Systeme hinweg bietet.
Atuin ist OpenSource-Software und wird nur durch Sponsoren unterstützt. Die Entwicklerinnen sind froh um Unterstützung.
Unterstützte Shells
Atuin unterstützt die folgenden Shell-Varianten:
- zsh
- bash
- fish
- nushell
- xonsh
Weiterentwicklung
Im Zusammenhang mit Atuin werden inzwischen auch Werkzeuge entwickelt, mit denen Shell-Konfigurationsfiles zwischen Rechnern synchronisiert werden können, um Umgebungsvariablen und Aliases konsistent auf verschiedenen Rechnern verwenden zu können. (Siehe: https://docs.atuin.sh/guide/dotfiles/)
Ein weiteres Werkzeug ist Atuin Desktop, das Dokumentation und ausführbare Programmsequenzen zusammenbringen will. (Siehe: https://github.com/atuinsh/desktop)
Installation
Für die Installation von Atuin gibt es ein Skript, das mit folgendem Befehl heruntergeladen und ausgeführt werden kann:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
Das Kommando ergänzt z.B. die Konfigurationsdatei .bashrc für bash mit dem Befehl
eval "$(atuin init bash)"
zum Start des Initialisierungs-Skripts von Atuin beim Starten der bash-Shell. Die Pfadvariable sollte in .bashrc mit dem atuin-Befehl ergänzt werden:
PATH="$PATH:~/.atuin/bin"
Es wird empfohlen, für die bash-Shell auch ble.sh zu installieren.
ble.sh ist ein bash-Shell Zeileneditor, der Syntax-Highlighting (auch mit Farben), Kommandovervollständigung, einen vim-Editiermodus und weitere Features bietet. Atuin kann ihn für die Kommandovervollständigung und die farbige Darstellung von Befehlen brauchen. Der aktuelle Buildstand von ble.sh kann mit folgendem Befehl (alles auf einer Zeile) installiert werden:
curl -L https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -bash ble-nightly/ble.sh --install ~/.local/share
In .bashrc sollte ble.sh vor dem Start von Atuin mit folgender Zeile auch gleich gestartet werden:
source -- ~/.local/share/blesh/ble.sh
Bestehende Kommandhistorie
Atuin kann nach der Installation die bestehende Shell-Kommandhistorie importieren und dann wie jene neuer Kommandos verwenden. Der Import geschieht mit folgendem Kommando:
atuin import auto
Hier noch die Dokumentation des Import-Befehls:
$ atuin help import
Import shell history from file
Usage: atuin import <COMMAND>
Commands:
auto Import history for the current shell
zsh Import history from the zsh history file
zsh-hist-db Import history from the zsh history file
bash Import history from the bash history file
replxx Import history from the replxx history file
resh Import history from the resh history file
fish Import history from the fish history file
nu Import history from the nu history file
nu-hist-db Import history from the nu history file
xonsh Import history from xonsh json files
xonsh-sqlite Import history from xonsh sqlite db
help Print this message or the help of the given subcommand(s)
Verwendung und gespeicherte Daten
Atuin kann via Konfigurationsdateien den eigenen Bedürfnissen angepasst werden. Die Angaben hier beziehen sich auf die Defaultkonfiguration nach der Installation von Atuin in der bash-Shell.
Während der Verwendung der Shell speichert Atuin in der Datenbank die folgenden Angaben, die dann in Atuin gebraucht werden können (siehe: https://docs.atuin.sh/guide/basic-usage/):
- verwendetes Kommando
- Verzeichnis, in dem das Kommando aufgerufen wurde
- Zeitpunkt des Kommandoaufrufs und die Ausführungszeit
- Returnwert des Kommandos
- Host- und Usernamen
- Shell-Session, in der das Kommando aufgerufen wurde
TUI, Terminal User Interface
Mit der Pfeiltaste gegen oben oder mit <ctrl><r> kann das User Interface gestartet werden. Hier ein Screenshot als Beispiel:

Zuoberst sieht man auch gleich die wichtigsten Shortcuts:
<esc>um Atuin zu verlassen<tab>um den Befehl auf die Kommandozeile zu holen, um ihn dort anzupassen<enter>um den Befehl direkt auszuführen
Mit der Pfeiltaste nach oben oder unten kann man durch die Befehle navigieren.
Mit <ctrl><R> kann man den Scope wechseln zwischen [GLOBAL] wie im Screenshot und [HOST], [SESSION] oder [DIRECTORY]. Es werden dann jeweils alle Befehle aus der History oder nur jene von demselben Host, jene aus der aktuellen Session oder jene, die im aktuellen Verzeichnis aufgerufen wurden, angezeigt.
<ctrl><o> öffnet den ‹Inspektor›. Mit dem Inspektor kann man die Angaben, die zum aktuellen Befehl gespeichert sind, anschauen und auch den entsprechenden Eintrag aus der Atuin-Datenbank löschen.
<Alt><#>, wobei # für die Nummer (1 bis 9) des Befehls in der Liste steht, ruft den Befehl mit dieser Nummer auf.
Wenn man einfach beginnt zu tippen, so wird in der History mit einer ‹fuzzy›-Suche nach dem eingetippten Text gesucht und es werden die gefundenen Befehle angezeigt.

Mit <ctrl><s> kann man zwischen den verschiedenen Suchmodi PREFIX, FULLTEXT und FUZZY wechseln. PREFIX würde im Beispiel kein Resultat liefern, FULLTEXT nur die untersten Befehle, bei denen der Suchtext rot umrandet ist und FUZZY hilft meist auch dann, wenn man den genauen Befehl nicht mehr weiss.
Shortcuts
Die Default-Shortcuts werden in der Dokumentation wie folgt beschrieben:
| Shortcut | Action |
| enter | Execute selected item |
| tab | Select item and edit |
| ctrl + r | Cycle through filter modes |
| ctrl + s | Cycle through search modes |
| alt + 1 to alt + 9 | Select item by the number located near it |
| ctrl + c / ctrl + d / ctrl + g / esc | Return original |
| ctrl + y | Copy selected item to clipboard |
| ctrl + ⬅️ / alt + b | Move the cursor to the previous word |
| ctrl + ➡️ / alt + f | Move the cursor to the next word |
| ctrl + b / ⬅️ | Move the cursor to the left |
| ctrl + f / ➡️ | Move the cursor to the right |
| ctrl + a / home | Move the cursor to the start of the line |
| ctrl + e / end | Move the cursor to the end of the line |
| ctrl + backspace / ctrl + alt + backspace | Remove the previous word / remove the word just before the cursor |
| ctrl + delete / ctrl + alt + delete | Remove the next word or the word just after the cursor |
| ctrl + w | Remove the word before the cursor even if it spans across the word boundaries |
| ctrl + u | Clear the current line |
| ctrl + n / ctrl + j / ⬆️ | Select the next item on the list |
| ctrl + p / ctrl + k / ⬇️ | Select the previous item on the list |
| ctrl + o | Open the inspector |
| page down | Scroll search results one page down |
| page up | Scroll search results one page up |
| ⬇️ (with no entry selected) | Return original or return query depending on settings |
| ⬇️ | Select the next item on the list |
Suche
Atuin bietet viele Suchmöglichkeiten, um Befehle in der History zu finden. Ein kleines Beispiel ist die folgende Suche, die den ältesten sudo-Befehl aus der History anzeigt:
atuin search --limit 1 --reverse sudo
Die Suche in Atuin ist auf der Webseite wie folgt beschrieben:
Atuin search supports wildcards, with either the * or % character. By default, a prefix search is performed (ie, all queries are automatically appended with a wildcard).
| Arg | Description |
| –cwd/-c | The directory to list history for (default: all dirs) |
| –exclude-cwd | Do not include commands that ran in this directory (default: none) |
| –exit/-e | Filter by exit code (default: none) |
| –exclude-exit | Do not include commands that exited with this value (default: none) |
| –before | Only include commands ran before this time(default: none) |
| –after | Only include commands ran after this time(default: none) |
| –interactive/-i | Open the interactive search UI (default: false) |
| –human | Use human-readable formatting for the timestamp and duration (default: false) |
| –limit | Limit the number of results (default: none) |
| –offset | Offset from the start of the results (default: none) |
| –delete | Delete history matching this query |
| –delete-it-all | Delete all shell history |
| –reverse | Reverse order of search results, oldest first |
| –format/-f | Available variables: {command}, {directory}, {duration}, {user}, {host}, {time}, {exit} and {relativetime}. Example: —format “{time} – [{duration}] – {directory}$\t{command}“ |
| –inline-height | Set the maximum number of lines Atuin’s interface should take up |
| –help/-h | Print help |
Interessant ist die Möglichkeit, mit --exit oder --exclude-exit vergangene Kommandos mit einem bestimmten Exitcode oder beispielsweise jene, die nicht erfolgreich ausgeführt wurden
(--exclude-exit 0), zu suchen.
Statistik
Mit atuin stats bekommt man eine einfache Statistik zu den Befehlen in der History. Mit atuin history list werden die gespeicherten Befehle und Daten ausgegeben, wobei das Format der Ausgabe mit Parametern angepasst werden kann.
Update
Wenn Zugriff zum Internet besteht, so lässt sich ein Update ganz einfach mit folgendem Befehl durchführen:
atuin-update
Support
Für Fragen zu Atuin gibt es ein Forum: https://forum.atuin.sh/
Im Forum können auch Ideen für Weiterentwicklungen vorgeschlagen werden.
Synchronisation zwischen Rechnern
Es ist möglich, die History mit Atuin über Rechnergrenzen hinweg zu speichern und zu synchronisieren. Dazu braucht es für Atuin eine Datenbank auf einem Synchronisationsserver in der Cloud oder auf einem eigenen Rechner, die dann von verschiedenen Rechnern aus verwendet wird. Der Datentransport von und zur Datenbank wird dabei sicher verschlüsselt.
Auf die Details wird in diesem Blogbeitrag nicht eingegangen. Sie sind auf der Atuin-Webseite beschrieben: https://docs.atuin.sh/self-hosting/server-setup.
Fazit
Das OpenSource-Werkzeug Atuin bietet eine verbesserte und einfach zu bedienende Shell-History mit vielen Suchmöglichkeiten. Es ist schnell installiert und es kann bei Bedarf auch über Rechnergrenzen hinweg sicher verwendet werden. Ein rundum gelungenes kleines Werkzeug, das die Arbeit mit der Shell erleichtert.