So verwenden Sie den Befehl history unter Linux

Die Linux-Shell speichert einen Verlauf der von Ihnen ausgeführten Befehle, und Sie können darin suchen, um Befehle zu wiederholen, die Sie in der Vergangenheit ausgeführt haben. Sobald Sie den Linux-Befehl History verstehen und wissen, wie er verwendet wird, kann er Ihre Produktivität erheblich steigern.

Geschichte manipulieren

Wie George Santayana sagte bekanntlich, „Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen.“ Wenn Sie sich unter Linux nicht an die Vergangenheit erinnern können, können Sie sie leider nicht wiederholen, selbst wenn Sie möchten.

Dann ist der Linux-Befehl history hilfreich. Es ermöglicht Ihnen, Ihre vorherigen Befehle zu überprüfen und zu wiederholen. Dies soll nicht nur Faulheit fördern oder Zeit sparen – es spielt auch ein Faktor der Effizienz (und Genauigkeit) eine Rolle. Je länger und komplizierter ein Befehl ist, desto schwieriger ist es, ihn sich zu merken und fehlerfrei einzugeben. Es gibt zwei Arten von Fehlern: eine, die die Ausführung des Befehls verhindert, und eine, die die Ausführung des Befehls zulässt, aber etwas Unerwartetes bewirkt.

Der Befehl history beseitigt diese Probleme. Wie die meisten Linux-Befehle da steckt mehr dahinter als du denkst. Wenn Sie jedoch lernen, wie man den Befehl history verwendet, kann er Ihre Verwendung der Linux-Befehlszeile jeden Tag verbessern. Es ist eine gute Investition Ihrer Zeit. Es gibt weitaus bessere Möglichkeiten, den Verlaufsbefehl zu verwenden, als nur wiederholt auf den Aufwärtspfeil zu drücken.

Das Geschichtskommando

In seiner einfachsten Form können Sie den Befehl history verwenden, indem Sie einfach seinen Namen eingeben:

history

Der

Die Liste der zuvor verwendeten Befehle wird dann in das Terminalfenster geschrieben.

Ein Beispiel für die Ausgabe des

Die Befehle sind nummeriert, wobei die zuletzt verwendeten (die mit den höchsten Nummern) am Ende der Liste stehen.

Um eine bestimmte Anzahl von Befehlen anzuzeigen, können Sie in der Befehlszeile eine Nummer an den Verlauf übergeben. Um beispielsweise die letzten 10 von Ihnen verwendeten Befehle anzuzeigen, geben Sie Folgendes ein:

history 10

Der

Sie können das gleiche Ergebnis erzielen, wenn Sie die Historie durch die Schwanzbefehl. Geben Sie dazu Folgendes ein:

history | tail -n 10

Der

Wiederholen von Befehlen

Wenn Sie einen Befehl aus der Verlaufsliste wiederverwenden möchten, geben Sie ein Ausrufezeichen (!) und die Nummer des Befehls ohne Leerzeichen dazwischen ein.

Um beispielsweise Befehl Nummer 37 zu wiederholen, geben Sie diesen Befehl ein:

!37

Ein

Um den letzten Befehl zu wiederholen, geben Sie erneut zwei Ausrufezeichen ohne Leerzeichen ein:

!!

Ein

Dies kann nützlich sein, wenn Sie einen Befehl ausgeben und vergessen, sudo zu verwenden. Geben Sie sudo, ein Leerzeichen, die doppelten Ausrufezeichen ein und drücken Sie dann die Eingabetaste.

Für das folgende Beispiel haben wir einen Befehl eingegeben, der sudo erfordert. Anstatt die gesamte Zeile erneut einzugeben, können wir uns eine Reihe von Tastenanschlägen sparen und einfach sudo !! eingeben, wie unten gezeigt:

mv ./my_script.sh /usr/local/bin/
sudo !!

Ein

Sie können also die entsprechende Zahl aus der Liste eingeben, um einen Befehl zu wiederholen, oder die doppelten Ausrufezeichen verwenden, um den zuletzt verwendeten Befehl zu wiederholen. Was aber, wenn Sie den fünften oder achten Befehl wiederholen möchten?

Sie können ein Ausrufezeichen, einen Bindestrich (-) und die Nummer eines vorherigen Befehls (wieder ohne Leerzeichen) verwenden, um ihn zu wiederholen.

Um den 13. vorherigen Befehl zu wiederholen, geben Sie Folgendes ein:

!-13

Ein

Suche nach Befehlen nach Zeichenfolge

Um den letzten Befehl zu wiederholen, der mit einer bestimmten Zeichenfolge beginnt, können Sie ein Ausrufezeichen und dann die Zeichenfolge ohne Leerzeichen eingeben und dann die Eingabetaste drücken.

  So installieren Sie NixOS Linux

Um beispielsweise den letzten Befehl zu wiederholen, der mit sudo begonnen hat, geben Sie diesen Befehl ein:

!sudo

Ein

Darin liegt jedoch ein Element der Gefahr. Wenn der letzte Befehl, der mit sudo gestartet wurde, nicht der ist, den Sie denken, starten Sie den falschen Befehl.

Um jedoch ein Sicherheitsnetz bereitzustellen, können Sie den Modifikator :p (print) verwenden, wie unten gezeigt:

!sudo:p

Ein

Dadurch wird der Verlauf angewiesen, den Befehl im Terminalfenster zu drucken, anstatt ihn auszuführen. Auf diese Weise können Sie den Befehl sehen, bevor Sie ihn verwenden. Wenn es der gewünschte Befehl ist, drücken Sie den Aufwärtspfeil und drücken Sie dann die Eingabetaste, um ihn zu verwenden.

Wenn Sie einen Befehl suchen möchten, der eine bestimmte Zeichenfolge enthält, können Sie ein Ausrufezeichen und ein Fragezeichen verwenden.

Um beispielsweise den ersten passenden Befehl zu finden und auszuführen, der das Wort „Aliases“ enthält, geben Sie diesen Befehl ein:

!?aliases

Ein

Dadurch wird jeder Befehl gefunden, der die Zeichenfolge „aliases“ enthält, unabhängig davon, wo sie in der Zeichenfolge vorkommt.

Interaktive Suche

Eine interaktive Suche ermöglicht es Ihnen, durch eine Liste passender Befehle zu springen und den gewünschten Befehl zu wiederholen.

Drücken Sie einfach Strg+r, um die Suche zu starten.

Ein Terminalfenster nach

Während Sie den Suchhinweis eingeben, wird der erste passende Befehl angezeigt. Die von Ihnen eingegebenen Buchstaben erscheinen zwischen dem Backtick (`) und dem Apostroph (‚). Die entsprechenden Befehle werden während der Eingabe jedes Buchstabens aktualisiert.

EIN

Jedes Mal, wenn Sie Strg+r drücken, suchen Sie rückwärts nach dem nächsten passenden Befehl, der im Terminalfenster angezeigt wird.

EIN

Wenn Sie die Eingabetaste drücken, wird der angezeigte Befehl ausgeführt.

Der

Um einen Befehl zu bearbeiten, bevor Sie ihn ausführen, drücken Sie entweder die linke oder die rechte Pfeiltaste.

EIN

Der Befehl wird in der Befehlszeile angezeigt und Sie können ihn bearbeiten.

Sie können andere Linux-Tools verwenden, um die Verlaufsliste zu durchsuchen. Zum Beispiel, um die Ausgabe von history in grep zu leiten und Suche nach Befehlen, die die Zeichenfolge . enthalten „aliases“ können Sie diesen Befehl verwenden:

history | grep aliases

Der

Ändern des letzten Befehls

Wenn Sie einen Tippfehler korrigieren und den Befehl dann wiederholen müssen, können Sie ihn mit der Einfügemarke (^) ändern. Dies ist ein großartiger Trick, den Sie immer im Ärmel haben sollten, wenn Sie einen Befehl falsch schreiben oder einen mit einer anderen Befehlszeilenoption oder einem anderen Parameter erneut ausführen möchten.

Um es zu verwenden, geben Sie (ohne Leerzeichen) ein Caret-Zeichen, den zu ersetzenden Text, ein anderes Caret-Zeichen, den zu ersetzenden Text, ein anderes Caret-Zeichen ein, und drücken Sie dann die Eingabetaste.

Angenommen, Sie geben den folgenden Befehl ein und geben versehentlich „shhd“ anstelle von „sshd“ ein:

sudo systemctl start shhd

Sie können dies leicht korrigieren, indem Sie Folgendes eingeben:

^shhd^sshd^

EIN

Der Befehl wird mit „shhd“ in „sshd“ korrigiert ausgeführt.

Löschen von Befehlen aus der Verlaufsliste

Sie können mit der Option -d (Löschen) auch Befehle aus der Verlaufsliste löschen. Es gibt keinen Grund, Ihren falsch geschriebenen Befehl in der Verlaufsliste zu behalten.

Sie können grep verwenden, um es zu finden, seine Nummer mit der Option -d an den Verlauf übergeben, um es zu löschen, und dann erneut suchen, um sicherzustellen, dass es verschwunden ist:

history | grep shhd
history -d 83
history | grep shhd

Der

Sie können auch eine Reihe von Befehlen an die Option -d übergeben. Um alle Listeneinträge von 22 bis 32 (einschließlich) zu löschen, geben Sie diesen Befehl ein:

history -d 22 32

Um nur die letzten fünf Befehle zu löschen, können Sie eine negative Zahl wie folgt eingeben:

history -d -5

Manuelles Aktualisieren der Verlaufsdatei

Wenn Sie sich anmelden oder eine Terminalsitzung öffnen, wird die History-Liste aus der History-Datei eingelesen. In Bash ist die Standardverlaufsdatei .bash_history.

  Wie man We Were Here Together unter Linux spielt

Alle Änderungen, die Sie in Ihrer aktuellen Terminalfenstersitzung vornehmen, werden nur in die Verlaufsdatei geschrieben, wenn Sie das Terminalfenster schließen oder sich abmelden.

Angenommen, Sie möchten ein weiteres Terminalfenster öffnen, um auf die vollständige Verlaufsliste zuzugreifen, einschließlich der Befehle, die Sie im ersten Terminalfenster eingegeben haben. Mit der Option -a (all) können Sie dies im ersten Terminalfenster tun, bevor Sie das zweite öffnen.

Geben Sie Folgendes ein, um es zu verwenden:

history -a

Der

Die Befehle werden stillschweigend in die History-Datei geschrieben.

Wenn Sie alle Änderungen an der History-Liste in die History-Datei schreiben möchten (wenn Sie beispielsweise einige alte Befehle gelöscht haben), können Sie die Option -w (write) verwenden, wie folgt:

history -w

Der

Löschen der Verlaufsliste

Um alle Befehle aus der Verlaufsliste zu löschen, können Sie die Option -c (clear) wie folgt verwenden:

history -c

Wenn Sie diese Änderungen an der Verlaufsdatei zusätzlich erzwingen möchten, verwenden Sie die Option -w wie folgt:

history -w

Sicherheit und Verlaufsdatei

Wenn Sie Anwendungen verwenden, bei denen Sie vertrauliche Informationen (wie Kennwörter) in die Befehlszeile eingeben müssen, denken Sie daran, dass dies auch in der Verlaufsdatei gespeichert wird. Wenn Sie bestimmte Informationen nicht speichern möchten, können Sie diese mit der folgenden Befehlsstruktur sofort aus der Verlaufsliste löschen:

special-app my-secret-password;history -d $(history 1)
history 5

EIN

Diese Struktur enthält zwei Befehle, die durch ein Semikolon (;) getrennt sind. Lassen Sie uns das aufschlüsseln:

special-app: Der Name des von uns verwendeten Programms.
my-secret-password: Das geheime Passwort, das wir für die Anwendung auf der Kommandozeile angeben müssen. Dies ist das Ende von Befehl eins.
history -d: In Befehl zwei rufen wir die Option -d (delete) von history auf. Was wir löschen werden, steht im nächsten Teil des Befehls.
$(history 1): Dies verwendet eine Befehlsersetzung. Der in $() enthaltene Teil des Befehls wird in einer Subshell ausgeführt. Das Ergebnis dieser Ausführung wird als Text im ursprünglichen Befehl angezeigt. Der Befehl history 1 gibt den vorherigen Befehl zurück. Sie können sich den zweiten Befehl also als history -d „letzter Befehl hier“ vorstellen.

Sie können den Befehl history 5 verwenden, um sicherzustellen, dass der Befehl mit dem Kennwort aus der Verlaufsliste entfernt wurde.

Es gibt jedoch einen noch einfacheren Weg, dies zu tun. Da Bash standardmäßig Zeilen ignoriert, die mit einem Leerzeichen beginnen, fügen Sie einfach ein Leerzeichen wie folgt am Anfang der Zeile ein:

 special-app another-password
history 5

EIN

Der Befehl mit dem Kennwort wird nicht zur Verlaufsliste hinzugefügt. Der Grund, warum dieser Trick funktioniert, ist in der .bashrc-Datei enthalten.

Die .bashrc-Datei

Die .bashrc-Datei wird jedes Mal ausgeführt, wenn Sie sich anmelden oder ein Terminalfenster öffnen. Es enthält auch einige Werte, die das Verhalten des Befehls history steuern. Lassen Sie uns diese Datei mit gedit bearbeiten.

Geben Sie Folgendes ein:

gedit .bashrc

Der

Oben in der Datei sehen Sie zwei Einträge:

  So sichern Sie Ihre Linux-Installation

HISTSIZE: Die maximale Anzahl von Einträgen, die die History-Liste enthalten kann.
HISTFILESIZE: Die Grenze für die Anzahl der Zeilen, die eine Verlaufsdatei enthalten kann.

Diese beiden Werte interagieren auf folgende Weise:

Wenn Sie sich anmelden oder eine Terminalfenstersitzung starten, wird die Verlaufsliste aus der Datei .bash_history gefüllt.
Wenn Sie ein Terminalfenster schließen, wird die in HISTSIZE festgelegte maximale Anzahl von Befehlen in der Datei .bash_history gespeichert.
Wenn die Shell-Option histappend aktiviert ist, werden die Befehle an .bash_history angehängt. Wenn histappend nicht gesetzt ist, wird .bash_history überschrieben.
Nach dem Speichern der Befehle aus der Verlaufsliste in .bash_history wird die Verlaufsdatei so gekürzt, dass sie nicht mehr als HISTFILESIZE-Zeilen enthält.

Außerdem sehen Sie oben in der Datei einen Eintrag für den HISTCONTROL-Wert.

Der

Sie können diesen Wert für eine der folgenden Aktionen festlegen:

ignorespaces: Zeilen, die mit einem Leerzeichen beginnen, werden der Verlaufsliste nicht hinzugefügt.
ignoriertups: Doppelte Befehle werden der Verlaufsdatei nicht hinzugefügt.
ignoreboth: Aktiviert beide der oben genannten.

Sie können auch bestimmte Befehle auflisten, die Sie nicht zu Ihrer Verlaufsliste hinzufügen möchten. Trennen Sie diese durch einen Doppelpunkt (:) und setzen Sie sie in Anführungszeichen („…“).

Sie würden dieser Struktur folgen, um Ihrer .bashrc-Datei eine Zeile hinzuzufügen und die Befehle zu ersetzen, die ignoriert werden sollen:

export HISTIGNORE="ls:history"

Ein

Verwenden von Zeitstempeln

Wenn Sie der Verlaufsliste Zeitstempel hinzufügen möchten, können Sie die Einstellung HISTIMEFORMAT verwenden. Dazu fügen Sie Ihrer .bashrc-Datei einfach eine Zeile wie die folgende hinzu:

export HISTTIMEFORMAT="%c "

Beachten Sie, dass vor den schließenden Anführungszeichen ein Leerzeichen steht. Dadurch wird verhindert, dass der Zeitstempel an die Befehle in der Befehlsliste angrenzt.

Ein

Wenn Sie nun den Befehl history ausführen, sehen Sie Datums- und Zeitstempel. Beachten Sie, dass alle Befehle, die sich in der Verlaufsliste befanden, bevor Sie die Zeitstempel hinzugefügt haben, mit dem Datum und der Uhrzeit des ersten Befehls versehen werden, der einen Zeitstempel empfängt. In diesem unten gezeigten Beispiel war dies der Befehl 118.

Das ist ein sehr langatmiger Zeitstempel. Sie können jedoch andere Token als %c verwenden, um es zu verfeinern. Die anderen Token, die Sie verwenden können, sind:

%d: Tag
%m: Monat
%y: Jahr
%H: Stunde
%M: Minuten
%S: Sekunden
%F: Vollständiges Datum (Jahr-Monat-Datum-Format)
%T: Zeit (Stunde:Minuten:Sekunden-Format)
%c: Vollständiger Datums- und Zeitstempel (Tag-Datum-Monat-Jahr und Stunde:Minuten:Sekunden-Formate)

Lassen Sie uns experimentieren und ein paar verschiedene Token verwenden:

export HISTTIMEFORMAT="%d n%m %T "

Der Export HISTTIMEFORMAT=

Die Ausgabe verwendet Tag, Monat und Uhrzeit.

Wenn wir jedoch Tag und Monat entfernen, wird nur die Uhrzeit angezeigt.

Alle Änderungen, die Sie an HISTIMEFORMAT vornehmen, gelten für die gesamte Verlaufsliste. Dies ist möglich, da die Uhrzeit für jeden Befehl als Anzahl der Sekunden aus der Unix-Epoche. Die HISTTIMEFORMAT-Direktive gibt einfach das Format an, das verwendet wird, um diese Anzahl von Sekunden in einen für Menschen lesbaren Stil zu rendern, wie zum Beispiel:

export HISTTIMEFORMAT="%T "

Der

Unsere Ausgabe ist jetzt überschaubarer.

Sie können zum Auditieren auch den Befehl history verwenden. Manchmal kann Ihnen die Überprüfung von Befehlen, die Sie in der Vergangenheit verwendet haben, dabei helfen, herauszufinden, was ein Problem verursacht haben könnte.

Genau wie im Leben können Sie unter Linux den Befehl history verwenden, um die guten Zeiten noch einmal zu erleben und aus den schlechten zu lernen.