Bash-History gemeinsam nutzen

Aus LinuxUser 11/2023

Bash-History gemeinsam nutzen

© Mohd Azrin / 123RF.com

Unter einem Dach

Bashhub stellt den Befehlsverlauf der Kommandozeile auf allen beteiligten Rechnern zur Verfügung.

Wer viel mit Linux arbeitet, der weiß den Geschwindigkeitsvorteil der Konsole gegenüber grafischen Anwendungen zu schätzen. Wären da nur nicht die oft recht langen Befehle, die man unmöglich alle im Gedächtnis behalten kann, aber immer einmal wieder benötigt. Dass es sich dabei um ein reales Problem handelt, beweisen die vielen verschiedenen Lösungsansätze, die es dazu gibt. Die Bash bringt bereits einen eingebauten History-Befehl mit, der zuerst 1978 in Unix in der C-Shell auftauchte und sich von dort aus in vielen Kommandozeileninterpretern verbreitete. Er speichert Befehle in der ~/.bash_history, die Sie dann über den Befehl history oder per [Strg]+[R] einsehen [1].

Dabei gibt es aber Einschränkungen. So fasst der Zwischenspeicher der History standardmäßig nur 1000 Befehle, und die History-Datei, wohin Bash die gespeicherten Befehle beim Herunterfahren des Rechners aus dem Arbeitsspeicher schreibt, ist in der Voreinstellung auf 2000 Befehle limitiert. Diese Werte lassen sich jedoch bei Bedarf in der Datei ~/.bashrc erhöhen.

Andere Einschränkungen gibt das Betriebssystem vor. So speichert Ubuntu nur erfolgreich ausgeführte Befehle; solche mit Fehlern in Syntax oder Schreibweise nimmt es nicht auf. Wenn Sie mehrere Konsolenfenster auf einem oder mehreren Rechnern offen haben und Sie sich vor dem Schließen eines Fensters nicht aus der Session abmelden, speichert das System nur die Historie des zuletzt geschlossenen Fensters.

Deshalb haben es sich viele Entwickler zur Aufgabe gemacht, diese Funktionalität zu verbessern. Bekanntere Vertreter dieser Gattung sind die Bash History Suggest Box alias Hstr [2] und McFly [3]. Auf Github und anderswo finden sich jedoch viele weitere Tools, die für sich in Anspruch nehmen, die History in verschiedene Richtungen zu erweitern und zu verbessern.

Bashhub

Alles auf einmal erledigen möchte das Tool Bashhub [4]. Es verspricht, jeden eingegebenen Terminalbefehl in Bash, Z-Shell oder Fish über alle Sitzungen und Systeme hinweg zu speichern und die gespeicherten Befehle über leistungsstarke Abfragen durchsuchbar zu machen. Allerdings hat Bashhub ein Manko, das es für viele Anwender disqualifiziert.

Es handelt sich nämlich um einen Web-Service, dessen Nutzung voraussetzt, dass Sie dem Entwickler vertrauen. Ihre Befehle werden auf verschlüsseltem Weg in einer per LUKS verschlüsselten SQLite-Datenbank auf einem Server des Entwicklers abgelegt, dessen Code Closed Source ist [5]. Ein ähnlich arbeitendes Tool namens Atuin stellten wir bereits in LinuxUser 09/2022 vor [6].

Der Bashhub-Entwickler versprach über die Jahre des Öfteren, den Server als Open Source zur Verfügung zu stellen, was bislang jedoch nicht geschah. Das schließt auf den ersten Blick den Einsatz von Bashhub etwa auf Rechnern des Arbeitgebers kategorisch aus.

Open-Source-Server

Erfreulicherweise lässt sich der Dienst trotzdem auf Hardware unter eigener Kontrolle betreiben: Der US-Entwickler Nick Sherron hat einen quelloffenen Bashhub-Server [7] geschrieben, den Sie auf eigener Hardware oder Ihrem virtuellen Server beim Hoster einrichten. Eine detaillierte Beschreibung des Servers würde den Umfang dieses Artikels sprengen, deshalb stellen wir diese Alternative demnächst in einem gesonderten Artikel vor. Hier geht es rein um die Installation und Benutzung von Bashhub in der Cloud.

Die Installation von Bashhub erledigen Sie mit dem Befehl aus Listing 1. Sollten Sie während des Einrichtens einen Fehler in Bezug auf das Paket pip erhalten, installieren Sie dieses nach und starten das Setup von Bashhub erneut. Bashhub legt während der Installation das Verzeichnis ~/.bashhub/ an, das einige Skripte und eine virtuelle Python-Umgebung enthält (Abbildung 1). Am Ende der Datei ~/.bashrc sollten Sie zudem den Eintrag von Bashhub sehen (Abbildung 2).

Listing 1

Installation

$ curl -OL https://bashhub.com/setup && $SHELL setup

Abbildung 1: W&auml;hrend der Installation entsteht im Home ein versteckter Ordner, der einige Verzeichnisse und Dateien enth&auml;lt. Die Datei <code>config</code> enth&auml;lt neben dem Rechnernamen auch das eindeutige Zugangs-Token f&uuml;r das Konto.

Abbildung 1: Während der Installation entsteht im Home ein versteckter Ordner, der einige Verzeichnisse und Dateien enthält. Die Datei config enthält neben dem Rechnernamen auch das eindeutige Zugangs-Token für das Konto.


Abbildung 2: W&auml;hrend der Installation wurde am Ende der Datei <code>.bashrc</code> dieser Eintrag erzeugt.

Abbildung 2: Während der Installation wurde am Ende der Datei .bashrc dieser Eintrag erzeugt.

Es folgt das Setup. Dafür müssen Sie Benutzernamen und Passwort, eine gültige E-Mail-Adresse sowie einen Namen für den Rechner angeben, auf dem Sie die Software installieren (Abbildung 3). Dabei erstellt der Dienst für Ihr Konto anhand der eingegebenen Daten ein eindeutiges Zugangs-Token und legt es in der ~/.bashhub/config ab. Danach schließen Sie das Terminal und öffnen es erneut.

Abbildung 3: Beim Setup richten Sie ein mit einer eindeutigen ID abgesichertes Konto ein. Geben Sie daf&uuml;r einen Benutzernamen, eine E-Mail-Adresse sowie den gew&uuml;nschten Rechnernamen ein.

Abbildung 3: Beim Setup richten Sie ein mit einer eindeutigen ID abgesichertes Konto ein. Geben Sie dafür einen Benutzernamen, eine E-Mail-Adresse sowie den gewünschten Rechnernamen ein.

Einsatzbereit

Nun ist Bashhub einsatzbereit. Einer Suche stellen Sie das Präfix bh voran. Die integrierte Hilfe rufen Sie wie gewohnt mit bh --help auf. Geben Sie bh ohne Parameter ein, erhalten Sie eine Liste der letzten 100 eingegebenen Befehle (Abbildung 4). Über den Parameter -n reduzieren Sie die Ausgabe auf die gewünschte Anzahl, etwa mit bh -n 10. Die Suche nach einem bestimmten Befehl mit einer auf zehn Treffer begrenzten Ausgabe gelingt mit bh -n 10 "ls".

Abbildung 4: Ohne Parameter zeigt der Befehl <code>bh</code> die&nbsp;100 zuletzt eingegebenen Befehle. Nach einer ersten Erkundung waren es bei uns nur 11&nbsp;Kommandos.

Abbildung 4: Ohne Parameter zeigt der Befehl bh die 100 zuletzt eingegebenen Befehle. Nach einer ersten Erkundung waren es bei uns nur 11 Kommandos.

Mehr Möglichkeiten bietet der interaktive Modus, den Sie mit bh -i oder [Strg]+[B] aktivieren. Er zeigt zudem detailliertere Informationen zu einem Befehl an (Abbildung 5). In diesem Modus suchen Sie nach bestimmten Befehlen, wählen Sie an und führen das gewünschte Kommando direkt aus (Abbildung 6).

Abbildung 5: Der interaktive Modus liefert auf Wunsch zus&auml;tzliche Informationen wie Datum und Uhrzeit, Exit-Status und den Rechnernamen sowie den Ordner, aus dem der Befehl ausgef&uuml;hrt wurde.

Abbildung 5: Der interaktive Modus liefert auf Wunsch zusätzliche Informationen wie Datum und Uhrzeit, Exit-Status und den Rechnernamen sowie den Ordner, aus dem der Befehl ausgeführt wurde.


Abbildung 6: Im interaktiven Modus lassen sich Befehle durch einen Druck auf die Eingabetaste direkt ausf&uuml;hren.

Abbildung 6: Im interaktiven Modus lassen sich Befehle durch einen Druck auf die Eingabetaste direkt ausführen.

Per bh -d oder interaktiv mit bh -i -d lassen Sie sich anzeigen, welche Befehle Sie aus dem aktuellen Arbeitsverzeichnis heraus ausgeführt haben. Wählen Sie einen angezeigten Befehl aus und drücken [I] oder die Leertaste, dann zeigt Bashhub unter anderem den Pfad und das Datum samt Uhrzeit, wann der Befehl abgesetzt wurde. Das erfolgreiche Ausführen eines Befehls signalisiert die Software mit Exit Status 0. Andere Exit-Codes [8] deuten auf einen Fehler hin.

Möchten Sie einen abgesetzten Befehl lieber nicht in der Datenbank gespeichert haben, löschen Sie ihn einfach. Dazu wählen Sie ihn im interaktiven Modus aus und drücken die [Rückschritt]+ oder [Entf]. Eine anschließende Suche danach bestätigt die Löschung. Wissen Sie bereits vorher, dass Sie einen Befehl nicht speichern möchten, hängen Sie den Schalter #ignore an, etwa ls -la #ignore.

Um Bashhub zeitweise abzuschalten, nutzen Sie in einer bestehenden Sitzung den Befehl bashhub off. Zum Deaktivieren in alle Sitzungen auf allen Geräten verwenden Sie bashhub off --global. Das Reaktivieren übernimmt der Befehl bashhub on.

Standardmäßig sortiert das Programm die Ergebnisse nach dem zuletzt verwendeten Befehl mit eindeutiger Kennung. Das bedeutet, dass häufig verwendete Befehle wie git status oder ls nur einmal erscheinen, und zwar an der Position, an der Sie sie zuletzt aufgerufen haben. Duplikate speichern Sie mit dem Parameter -dups, zum Beispiel bh -dups "ls".

Das Kommando bashhub status liefert eine Übersicht über den Benutzerstatus. Alternativ rufen Sie die Statusseite unter der Adresse https://bashhub.com/<I>Benutzername<I> auf (Abbildung 7).

Abbildung 7: Die Statusseite listet die Anzahl der abgesetzten Befehle, der Terminalsitzungen sowie die Zahl der involvierten Rechner auf.

Abbildung 7: Die Statusseite listet die Anzahl der abgesetzten Befehle, der Terminalsitzungen sowie die Zahl der involvierten Rechner auf.

Auf mehreren Rechnern

Bashhub entfaltet seinen vollen Charme erst dann, wenn Sie es auf mehreren Rechnern verwenden, um alle eingegebenen Befehle auf sämtlichen beteiligten Rechnern abfragen zu können. Dazu installieren Sie Bashhub auf den weiteren gewünschten Geräten und beantworten die Frage, ob Sie ein neuer Anwender sind, mit n für Nein. Daraufhin fragt die Anwendung Ihren Benutzernamen, das zugehörige Passwort und den gewünschten Rechnernamen ab. Das gespeicherte Token dient dabei wiederum zur eindeutigen Identifizierung. Nach einem Neustart des Terminals speichert die Software auch die hier eingegebenen Befehle, die sich jetzt auch an anderen Rechnern abfragen lassen.

Die Bashhub-Nutzung beschränkt sich nicht nur auf reale Geräte im heimischen Netzwerk: Sie dürfen auch virtuelle Maschinen, Docker-Container oder per SSH erreichbare Server im Netz anbinden. Ob das Anmelden jeweils geklappt hat, sehen Sie auf der Statusseite. Dort sollte sich nach jeder Anmeldung die Zahl unter Total Systems um eins erhöhen.

Fazit

Für Anwender, die täglich auf verschiedenen Rechnern lokal und remote arbeiten und dazu auch die Kommandozeile verwenden, stellt Bashhub eine veritable Bereicherung dar. Auch wenn das Tool schon einige Jahre auf dem Buckel hat, reagiert der Entwickler schnell auf Anfragen. So stellte er uns kurzerhand Version 2.4.1 zur Verfügung, da unsere Python-Version aus dem Debian-Unstable-Zweig zu neu für Bashhub 2.4.0 war.

Den Pferdefuß dieser Konstellation aus Open-Source-Client und Closed-Source-Server erwähnten wir bereits. Hier muss jeder für sich entscheiden, wie weit er dem Entwickler vertraut. Wer seine Daten nicht auf einem fremden Rechner lagern möchte, rollt den oben erwähnten freien Bashhub-Server auf eigener Hardware aus. Der läuft direkt auf der Hardware oder in einem Docker-Container.

Es stehen Pakete für Linux, ARM, Mac OS und Windows zur Verfügung, ein Raspberry Pi scheint ideal für diese Aufgabe zu sein. Nach der Installation lassen sich bestehende Datensätze aus einem Bashhub-Konto importieren. Wie bereits angekündigt, testen wir den Bashhub-Server in einer der nächsten Ausgaben ausführlich. (tle)

Infos

  1. Bash History: https://wiki.ubuntuusers.de/Bash/

  2. Bash History Suggest Box: Christoph Langner, “Ausgesucht”, LU 06/2014, S. 55, https://www.linux-community.de/32658

  3. McFly: Karsten Günther, “Intelligent geordnet”, LU 07/2019, S. 82, https://www.linux-community.de/42242

  4. Bashhub: https://github.com/rcaloras/bashhub-client

  5. Bashhub und Sicherheit: https://github.com/rcaloras/bashhub-client/wiki/Security-and-Privacy

  6. Atuin: Ferdinand Thommes, “Magische Schildkröte”, LU 09/2022, S. 34, https://www.linux-community.de/47408

  7. Bashhub-Server: https://github.com/nicksherron/bashhub-server

  8. Exit-Codes: https://tldp.org/LDP/abs/html/exitcodes.html

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 11/2023 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
Nach oben