Befehle und Erweiterungen für den Bash-Verlauf

In dieser Anleitung zeigen wir, wie Sie mit Bash-Verlaufsbefehlen arbeiten.

Voraussetzungen:

Um die in diesem Tutorial demonstrierten Schritte auszuführen, benötigen Sie die folgenden Komponenten:

  • Ein richtig konfiguriertes Linux-System. Sehen Sie sich an, wie Sie eine Ubuntu-VM in VirtualBox einrichten.
  • Grundlegende Vertrautheit mit der Befehlszeilenschnittstelle.

Bash-Geschichte

Bash ist die Standard-Shell in den meisten modernen Linux-Systemen. Als Nachfolger von „sh“, der ursprünglichen UNIX-Shell, bietet sie zahlreiche Funktionen und Verbesserungen wie Verzeichnismanipulation, Jobsteuerung, Aliase, Befehlsverlauf und mehr.

Bash verfolgt alle Befehle, die zuvor vom Terminal ausgeführt wurden. Dies kann in zahlreichen Situationen wie dem Debuggen unglaublich nützlich sein. Es kann auch die Notwendigkeit verringern, immer wieder dieselben/ähnlichen Befehle einzugeben.

Für die Verlaufsverwaltung verfügt Bash über zwei integrierte Befehle:

$-Typ-Verlauf

$ geben Sie fc ein

Um den Verlauf zu speichern, verwendet Bash zwei verschiedene Techniken:

  • Bei jeder Arbeit mit einer Shell-Sitzung wird deren Verlauf im Speicher gespeichert.
  • Beim Schließen wird der im Speicher gespeicherte Verlauf in einer Verlaufsdatei abgelegt.

Die von Bash verwendete Standardverlaufsdatei befindet sich unter:

$ cat ~/.bash_history

Es gibt auch eine Handvoll Umgebungsvariablen und Tastaturkürzel, die die Art und Weise ändern, wie Bash mit dem Verlauf umgeht.

Arbeiten mit Bash-Verlauf

Grundlegende Verwendung

Um die Liste der zuletzt ausgeführten Befehle abzurufen, verwenden Sie den folgenden Befehl:

$ Geschichte

Hier werden alle Befehle aufgelistet, die im Puffer gespeichert sind. Jedem Befehl ist ein numerischer Wert zugewiesen. Der älteste Befehl wird mit 1 belegt.

Mit dem folgenden Befehl können wir die Anzahl der zu druckenden Befehle begrenzen:

$ Geschichte N

Hier ist N eine Ganzzahl mit N >= 0. Die Ausgabe enthält die letzten N Befehle aus dem Verlauf.

Wir können die Ausgabe auch zusammen mit grep zum Filtern verwenden:

$ Geschichte | grep

Um einen langen Verlauf zu durchsuchen, können wir den Befehl „less“ verwenden:

$ Geschichte | weniger

Befehle aus dem Verlauf löschen

Wenn Sie einen bestimmten Befehl aus dem Verlauf entfernen müssen, verwenden Sie die folgenden Befehle:

$ Geschichte

$ History -d

$ Geschichte

Um die Befehle von M bis N aus dem Verlauf zu entfernen, können wir auf ähnliche Weise die folgenden Befehle verwenden:

$ Geschichte

$history -d MN

$ Geschichte

Um den Verlauf aus dem RAM-Puffer für die aktuelle Terminalsitzung zu löschen, verwenden Sie stattdessen die folgenden Befehle:

$ Geschichte -c

$ Geschichte

Um den Verlauf aus der auf der Festplatte gespeicherten Verlaufsdatei zu löschen, können wir ihn vollständig mit NULL überschreiben:

$ cat /dev/null > $HISTFILE

Bash-Verlaufseinstellungen

Es gibt mehrere Möglichkeiten, den Umgang von Bash mit dem Verlauf zu optimieren. Viele dieser Optionen werden durch Umgebungsvariablen verwaltet.

Um ihren Wert zu ändern, bearbeiten wir die Datei „bashrc“:

$ nano ~/.bashrc

Speichern Sie die Datei nach der Bearbeitung und laden Sie sie erneut in Bash.

$ Quelle ~/.bashrc

Um die systemweiten Änderungen vorzunehmen, bearbeiten Sie „bashrc“, das sich an den folgenden Orten befindet:

$ nano /etc/bash.bashrc

$ nano /etc/bashrc

Puffergröße

Wie bereits erwähnt, verwendet Bash zwei Puffer, um den Befehlsverlauf im RAM (für die aktuelle Sitzung) und in einer Festplattendatei (für alle vorherigen Sitzungen) zu speichern.

Die Größe dieser Puffer wird durch zwei Umgebungsvariablen gesteuert:

  • HISTSIZE: Es definiert die Anzahl der Einträge, die im RAM-Puffer gespeichert werden sollen.
  • HISTFILESIZE: Es definiert die Anzahl der Einträge, die in der Festplattendatei gespeichert werden sollen.

Wir können ihren Wert im „bashrc“ ändern, um ihn an unsere Bedürfnisse anzupassen:

$ nano ~/.bashrc

Um beispielsweise 5000 Einträge in beiden Puffern zu speichern, aktualisieren Sie „bashrc“ mit dem folgenden Code:

$ HISTSIZE=5000

$ HISTFILESIZE=5000

Befehlsausschluss

Standardmäßig speichert Bash jeden einzelnen Befehl, der ausgeführt wird, in den Verlaufspuffern. Wir können es jedoch so konfigurieren, dass Bash bestimmte Befehle ignoriert. Dies kann in Situationen nützlich sein, in denen Sie dieselben Befehle mehrmals ausführen müssen und so den Puffer mit Spam füllen.

  • HISTCONTROL

Beginnen wir mit dem folgenden Befehlsbeispiel:

$ echo „monke“ && Verlauf 5

$ echo „bonk“ && Verlauf 5

Wie die Ausgabe des Befehls „history“ zeigt, wird nur der erste Echo-Befehl registriert, nicht jedoch der zweite.

Dies ist die Funktionsweise der Umgebungsvariablen HISTIGNORE. Es weist Bash an, die Befehle aufgrund bestimmter Muster nicht im Verlaufspuffer zu protokollieren. Folgende Werte stehen zur Verfügung:

  • ignoriert: Es wird nicht protokolliert, wenn ein Befehl mit dem vorherigen Verlaufseintrag übereinstimmt.
  • Ignorierraum: Es wird nicht protokolliert, wenn ein Befehl mit einem Leerzeichen am Anfang beginnt.
  • ignoriere beides: Es gilt sowohl die Regel „ignoredups“ als auch „ignorespace“.
  • gelöschte ups: Alle vorherigen Zeilen, die mit dem aktuellen Befehl übereinstimmen, werden aus dem Verlauf gelöscht.

Im ersten Beispiel haben wir die Verwendung von Ignorespace demonstriert. Allerdings liefern möglicherweise nicht alle Distributionen Bash mit dieser Konfiguration aus. Wie immer können wir sie zu „bashrc“ hinzufügen:

$ HISTCONTROL=beide ignorieren

Es ist auch möglich, mehrere Optionen mit dem folgenden Befehl zu aktivieren:

$ HISTCONTROL=ignoredups:ignorespace

Hier ist „ignoredups:ignorespace“ das Äquivalent von „ignoreboth“.

  • HISTIGNORE

Diese Umgebungsvariable kann ein oder mehrere Muster enthalten. Jeder Befehl, der mit einem von HISTIGNORE beschriebenen Muster übereinstimmt, wird in keinem der Verlaufspuffer registriert. Die Muster werden mithilfe der regulären Ausdrücke definiert.

Der Aufbau ist wie folgt:

$ HISTIGNORE=‘‚:‘‚:‘

Um beispielsweise die Befehle „history“ und „echo“ aus dem Bash-Verlauf auszuschließen, aktualisieren Sie HISTIGNORE wie folgt:

$ HISTIGNORE=’history‘:’echo *‘

Wir können die folgende Befehlskette verwenden, um es zu testen:

$ ls -l /var/lob &> /dev/null

$ Geschichte

$ echo hallo Welt

$ Geschichte

Zeitstempeln

Bash kann auch so konfiguriert werden, dass es die Zeit protokolliert, zu der ein Befehl ausgeführt wurde. Dies kann in verschiedenen Situationen wie dem Debuggen nützlich sein.

Um die Zeitstempel im Bash-Verlauf zu aktivieren, aktualisieren Sie den Wert von HISTTIMEFORMAT:

$ HISTTIMEFORMAT=“

Alle verfügbaren Steuerzeichen für das Zeitformat sind in der Manpage des Datumsbefehls verfügbar.

$ Mann Date

Die folgende Liste enthält einige einfache:

  • %T: Zeit
  • %d: Tag
  • %m: Monat
  • %y: Jahr

$ HISTTIMEFORMAT=“%T %d: “

Geschichte Persistenz

Wenn Sie mit der CLI arbeiten, werden Sie in vielen Fällen mit mehreren Terminals arbeiten. Hier kann Bashs Geschichtsmanagement zu einer Quelle des Schmerzes werden.

Standardmäßig wird die Verlaufsdatei aktualisiert, sobald die Sitzung geschlossen wird. Während es für eine einzelne Sitzung in Ordnung ist, ist es für mehrere gleichzeitige Sitzungen nicht ausreichend. Wir können dieses Problem lösen, indem wir Bash zwingen, die Verlaufsdatei jedes Mal zu aktualisieren, wenn ein Befehl ausgeführt wird.

Aktualisieren Sie dazu den Wert von PROMPT_COMMAND:

$ PROMPT_COMMAND=’history -a‘

Dabei kann die Variable PROMPT_COMMAND gültige Befehle enthalten. Der Inhalt von PROMPT_COMMAND wird ausgeführt, bevor Bash beginnt, die Benutzereingaben entgegenzunehmen. Der Befehl „history –a“ zwingt den Verlauf, den Inhalt an die Verlaufsdatei anzuhängen.

Geschichtserweiterung und Bezeichner

Bash verfügt über einige integrierte Verknüpfungen, mit denen Sie die Verlaufsfunktion nutzen können. Hier ist die Liste der Bezeichner:

  • !!: Führt den letzten Befehl aus dem Verlauf aus.
  • !N: Führt den N-ten Befehl aus dem Verlauf aus.
  • !-N: Führt den N-ten Befehl vor dem neuesten Befehl aus dem Verlauf aus.
  • !: Führt den letzten -Befehl aus.

Die folgende Befehlskette veranschaulicht ihre Verwendung:

$ echo 1

$ Echo 2

$ Echo 3

$ Geschichte

$ !echo

$ !-3

$ !1

$!!

Einige Bezeichner funktionieren auch mit den Befehlsargumenten aus der Historie:

  • !:*: Alle Argumente des letzten Befehls verwenden.
  • !:^: Verwenden Sie das erste Argument des letzten Befehls.
  • !:N: Verwenden Sie das N-te Argument des letzten Befehls.
  • !:MN: Verwenden Sie die Argumente von M bis N des letzten Befehls.
  • !:$: Verwenden Sie das letzte Argument des letzten Befehls.

Die folgende Befehlskette veranschaulicht ihre Verwendung:

$ echo 1 2 3 4 5 6 7

$ echo !:*

$ echo 1 2 3 4 5 6 7

$ echo !:^

$ echo 1 2 3 4 5 6 7

$ echo !:5

$ echo 1 2 3 4 5 6 7

$ echo !:1-5

$ echo 1 2 3 4 5 6 7

$ echo !:$

Wenn Sie mit den Parametern eines anderen Befehls arbeiten müssen, sehen die Bezeichner wie folgt aus:

  • !^: Verwendet das erste Argument des Befehls .
  • !$: Verwendet das letzte Argument des Befehls .

Die folgende Befehlskette demonstriert ihre Verwendung:

$ ls -lh /var/log &> /dev/null

$ berühren Sie 1.txt 2.txt 3.txt 4.txt 5.txt

$ echo !touch^

$ echo !touch$

Tastenkombinationen für den Verlauf

Neben allen Befehlen und Umgebungsvariablen unterstützt Bash auch eine Handvoll Tastaturkürzel für eine einfachere Navigation im Verlauf:

  • Hoch Pfeiltaste: Rückwärts scrollen
  • Runter Pfeiltaste: Vorwärts scrollen

Für eine interaktive Verlaufssuche stehen auch Tastaturkürzel zur Verfügung:

  • Strg + R: Nach Befehlen im Verlauf suchen.
  • Strg + O: Führen Sie den ausgewählten Befehl aus.
  • Strg + G: Beenden Sie die interaktive Suche.

Abschluss

Wir haben ausführlich über die Bash-Geschichte gesprochen. Wir haben gelernt, wie Bash den Befehlsverlauf speichert und wie wir ihn auf unterschiedliche Weise nutzen können. Wir haben anhand verschiedener Beispiele gezeigt, wie man mit der Bash-Historie arbeitet.

Möchten Sie mehr über Bash erfahren? Die Unterkategorie „Bash-Programmierung“ enthält Hunderte von Anleitungen zu verschiedenen Funktionen von Bash.

Viel Spaß beim Rechnen!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen