15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
09.10.2024

Der `history`-Befehl in Linux: Ein vollständiger Leitfaden zur Bash-Historie

Der `history`-Befehl in Linux ist ein integriertes Bash-Shell-Dienstprogramm, das jeden in einer Terminalsitzung ausgeführten Befehl aufzeichnet, anzeigt und verwaltet. Es liest aus und schreibt in `~/.bash_history`, eine Klartextdatei im Home-Verzeichnis jedes Benutzers, die es ermöglicht, Befehle sitzungsübergreifend abzurufen, zu suchen, erneut auszuführen und zu überprüfen, ohne sie erneut eingeben zu müssen.

Für Systemadministratoren und erfahrene Benutzer ist die Bash-Historie nicht nur eine Komfortfunktion — sie ist ein operatives Prüfprotokoll, ein Debugging-Werkzeug und ein Produktivitätsmultiplikator. Das Verständnis ihrer internen Abläufe, Konfigurationsvariablen und Sicherheitsimplikationen unterscheidet gelegentliche Benutzer von Ingenieuren, die den maximalen Nutzen aus der Befehlszeile ziehen.

Wie Bash-Historie intern funktioniert

Wenn Sie eine Terminalsitzung öffnen, lädt Bash den Inhalt von `~/.bash_history` in eine speicherinterne Liste. Während Sie Befehle ausführen, werden diese an diesen speicherinternen Puffer angehängt. Wenn die Sitzung normal beendet wird (über `exit` oder `logout`), wird der Puffer gemäß den durch Ihre Umgebungsvariablen definierten Regeln zurück in `~/.bash_history` geschrieben.

Diese Architektur hat eine kritische Auswirkung: Wenn Ihre Sitzung abnormal beendet wird (Stromausfall, SSH-Trennung, `kill -9`), werden Befehle aus dieser Sitzung möglicherweise nie auf die Festplatte geschrieben. Dies ist eine häufige Quelle der Verwirrung, wenn Administratoren den Überblick über Befehle verlieren, die während einer unterbrochenen Sitzung ausgeführt wurden.

Zwei Shell-Optionen ändern dieses standardmäßige Schreib-beim-Beenden-Verhalten:

  • `shopt -s histappend` — hängt neue Historie an `~/.bash_history` an, anstatt sie zu überschreiben. Dies ist in Multi-Sitzungs-Umgebungen unerlässlich.
  • `PROMPT_COMMAND='history -a'` — zwingt Bash, den neuesten Befehl nach jeder Eingabeaufforderung an die Verlaufsdatei anzuhängen, was Echtzeit-Persistenz und sitzungsübergreifende Sichtbarkeit ermöglicht.

Ohne `histappend` gewinnt die zuletzt geschlossene Shell — sie überschreibt die Verlaufsdatei und verwirft stillschweigend Einträge aus allen anderen gleichzeitigen Sitzungen.

Grundlegende Verwendung des `history`-Befehls

Den vollständigen Befehlsverlauf anzeigen

“`bash

history

“`

Gibt eine nummerierte Liste gespeicherter Befehle aus. Die Zahl auf der linken Seite ist der Verlaufsindex, der für Ereignisbezeichner verwendet wird.

Eine bestimmte Anzahl aktueller Befehle anzeigen

“`bash

history 20

“`

Zeigt die letzten 20 Befehle an. Nützlich, wenn Sie einen schnellen Überblick über die letzten Aktivitäten benötigen, ohne durch Hunderte von Einträgen scrollen zu müssen.

Den aktuellen Sitzungsverlauf sofort in eine Datei schreiben

“`bash

history -w

“`

Erzwingt ein sofortiges Schreiben des speicherinternen Verlaufspuffers in `~/.bash_history`. Verwenden Sie dies, bevor Sie eine kritische Sitzung schließen, um sicherzustellen, dass nichts verloren geht.

Verlauf aus Datei in die aktuelle Sitzung laden

“`bash

history -r

“`

Lädt `~/.bash_history` erneut in den Speicher der aktuellen Sitzung. Nützlich, wenn Sie auf Befehle zugreifen möchten, die in einem anderen Terminalfenster während derselben Anmeldung eingegeben wurden.

Befehle abrufen und erneut ausführen

Ereignisbezeichner mit `!`

Die Ereignisbezeichner-Syntax von Bash ermöglicht die direkte Wiederausführung historischer Befehle per Referenz:

BezeichnerVerhalten
`!!`Führt den unmittelbar vorherigen Befehl erneut aus
`!n`Führt den Befehl am Verlaufsindex `n` aus
`!-n`Führt den Befehl `n` Positionen zurück vom aktuellen aus
`!string`Führt den neuesten Befehl aus, der mit `string` beginnt
`!?string?`Führt den neuesten Befehl aus, der `string` irgendwo enthält
`!$`Ersetzt das letzte Argument des vorherigen Befehls
`!*`Ersetzt alle Argumente des vorherigen Befehls

Praktisches Beispiel — das letzte Argument wiederverwenden:

“`bash

mkdir /var/www/myproject

cd !$

“`

`!$` wird zu `/var/www/myproject` erweitert und erspart Ihnen das erneute Eintippen des Pfades. Dies ist eine der am wenigsten genutzten, aber wertvollsten Funktionen der Bash-Historie.

Vorschau vor der Ausführung:

Hängen Sie `:p` an einen beliebigen Ereignisbezeichner an, um den Befehl auszugeben, ohne ihn auszuführen:

“`bash

!42:p

“`

Dies ist eine wichtige Sicherheitsgewohnheit bei der Arbeit auf Produktionsservern. Überprüfen Sie destruktive Befehle immer vor der Ausführung.

Wortbezeichner zur Argumentextraktion

Über die Wiederausführung ganzer Befehle hinaus ermöglicht Bash die Extraktion spezifischer Argumente aus Verlaufseinträgen:

“`bash

!!:2 # Second word (argument) of the last command

!!:1-3 # Words 1 through 3 of the last command

!ssh:$ # Last argument of the most recent ssh command

“`

Diese Granularitätsstufe ist unschätzbar wertvoll beim Aufbau komplexer Pipelines oder bei der Wiederholung von Operationen auf denselben Dateipfaden.

Tastaturkürzel zur Verlaufsnavigation

TastenkürzelAktion
`Up Arrow` / `Ctrl+P`Zum vorherigen Befehl wechseln
`Down Arrow` / `Ctrl+N`Zum nächsten Befehl wechseln
`Ctrl+R`Inkrementelle Rückwärtssuche durch den Verlauf
`Ctrl+S`Inkrementelle Vorwärtssuche (erfordert `stty -ixon`)
`Alt+.`Das letzte Argument des vorherigen Befehls einfügen
`Ctrl+G`Die aktuelle Verlaufssuche abbrechen

Hinweis zu `Ctrl+S`: Standardmäßig löst `Ctrl+S` die XON/XOFF-Flusssteuerung aus und friert das Terminal ein. Um die Vorwärts-Verlaufssuche zu aktivieren, fügen Sie `stty -ixon` zu Ihrer `~/.bashrc` hinzu.

Rückwärtssuche mit `Ctrl+R`

“`

(reverse-i-search)`git': git commit -am "fix: resolve race condition"

“`

Geben Sie eine Teilzeichenfolge ein und Bash findet inkrementell den neuesten Befehl, der diese enthält. Drücken Sie `Ctrl+R` erneut, um zu älteren Treffern zu wechseln. Drücken Sie `Enter` zum Ausführen oder `Ctrl+G` zum Abbrechen ohne Ausführung.

Für umfangreiche Verlaufssuchen leiten Sie durch `grep` weiter:

“`bash

history | grep "docker run"

history | grep -E "^[[:space:]]+[0-9]+[[:space:]]+ssh"

“`

Verlaufseinträge bearbeiten und verwalten

Einen bestimmten Eintrag löschen

“`bash

history -d 87

“`

Entfernt den Befehl bei Index 87 aus der speicherinternen Liste. Um dies dauerhaft zu machen, folgen Sie mit `history -w`, um die geänderte Liste zurück auf die Festplatte zu schreiben.

Einen Bereich von Einträgen löschen

“`bash

for i in $(seq 85 90); do history -d 85; done

“`

Da das Löschen die Indizes verschiebt, löschen Sie in einer Schleife immer dieselbe Indexnummer, anstatt sie zu erhöhen.

Den gesamten speicherinternen Verlauf löschen

“`bash

history -c

“`

Löscht den Verlaufspuffer der aktuellen Sitzung. Dies berührt `~/.bash_history` auf der Festplatte nicht.

Den gesamten Verlauf vollständig bereinigen

“`bash

history -c && history -w

“`

Löscht den speicherinternen Puffer und schreibt dann den leeren Puffer in `~/.bash_history`, wodurch die Datei effektiv abgeschnitten wird. Dies ist die korrekte zweistufige Sequenz — die alleinige Verwendung von `> ~/.bash_history` löscht den speicherinternen Puffer nicht, sodass die Datei beim Beenden der Sitzung möglicherweise wieder befüllt wird.

Bash-Verlauf konfigurieren: Umgebungsvariablen

Das gesamte Verlaufsverhalten wird durch Umgebungsvariablen gesteuert, die typischerweise in `~/.bashrc` (interaktive Nicht-Login-Shells) oder `~/.bash_profile` / `~/.profile` (Login-Shells) gesetzt werden. Änderungen werden nach dem Einlesen der Datei wirksam:

“`bash

source ~/.bashrc

“`

`HISTSIZE`

Steuert, wie viele Befehle während einer aktiven Sitzung im Speicher gehalten werden.

“`bash

export HISTSIZE=10000

“`

Wenn dies auf `0` gesetzt wird, wird der speicherinterne Verlauf vollständig deaktiviert. Wenn es auf `-1` gesetzt wird (in Bash 4.3+), ist er unbegrenzt.

`HISTFILESIZE`

Steuert die maximale Anzahl von Zeilen, die in `~/.bash_history` auf der Festplatte gespeichert werden.

“`bash

export HISTFILESIZE=20000

“`

Wenn die Datei dieses Limit überschreitet, kürzt Bash die ältesten Einträge. Für compliance-sensible Umgebungen setzen Sie diesen Wert auf einen großen Wert und kombinieren Sie ihn mit Log-Rotation.

`HISTCONTROL`

Bestimmt Filterregeln dafür, welche Befehle aufgezeichnet werden.

WertVerhalten
`ignoredups`Überspringt aufeinanderfolgende doppelte Befehle
`ignorespace`Überspringt Befehle, die mit einem Leerzeichen beginnen
`ignoreboth`Kombiniert beide oben genannten Optionen
`erasedups`Entfernt alle vorherigen Vorkommen eines Befehls, bevor der neue hinzugefügt wird

“`bash

export HISTCONTROL=ignoreboth

“`

Sicherheitsanwendungsfall für `ignorespace`: Stellen Sie jedem Befehl, der ein Passwort oder ein Geheimnis enthält, ein Leerzeichen voran, um zu verhindern, dass er aufgezeichnet wird:

“`bash

mysql -u root -pSuperSecretPassword

“`

Dies ist eine weit verbreitete operative Sicherheitspraxis auf gemeinsam genutzten oder Mehrbenutzersystemen.

`HISTTIMEFORMAT`

Fügt jedem Verlaufseintrag einen Zeitstempel hinzu, der als Kommentarzeile in `~/.bash_history` gespeichert wird.

“`bash

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

“`

Ausgabebeispiel:

“`

487 2024-11-14 09:32:17 systemctl restart nginx

488 2024-11-14 09:32:45 tail -f /var/log/nginx/error.log

“`

Zeitstempel sind für die forensische Analyse nach Vorfällen in VPS Hosting-Umgebungen und dedizierter Infrastruktur unerlässlich. Ohne sie wissen Sie *was* ausgeführt wurde, aber nicht *wann*.

`HISTIGNORE`

Eine durch Doppelpunkte getrennte Liste von Glob-Mustern. Befehle, die einem Muster entsprechen, werden nicht im Verlauf gespeichert.

“`bash

export HISTIGNORE="ls:ll:la:cd:pwd:exit:clear:history"

“`

Dies verhindert, dass triviale Befehle Ihren Verlauf verunreinigen und Suchergebnisse verwässern. Sie können auch Platzhalter verwenden:

“`bash

export HISTIGNORE="*password*:*secret*:*token*"

“`

Dies ist eine Defense-in-Depth-Maßnahme — kombinieren Sie sie mit `ignorespace` für maximale Credential-Hygiene.

Bash-Verlauf-Konfigurationsvariablen: Vollständige Referenztabelle

VariableStandardZweck
`HISTSIZE`500–1000Pro Sitzung im Speicher gehaltene Befehle
`HISTFILESIZE`500–2000In `~/.bash_history` gespeicherte Zeilen
`HISTCONTROL`(nicht gesetzt)Filterregeln für aufgezeichnete Befehle
`HISTTIMEFORMAT`(nicht gesetzt)Zeitstempelformat, das Einträgen vorangestellt wird
`HISTIGNORE`(nicht gesetzt)Glob-Muster für auszuschließende Befehle
`HISTFILE``~/.bash_history`Pfad zur Verlaufsdatei
`histappend` (shopt)ausAnhängen vs. Überschreiben beim Beenden der Sitzung

Verlauf über mehrere Terminalsitzungen hinweg teilen

Standardmäßig pflegt jede Bash-Sitzung ihren eigenen isolierten Verlaufspuffer. In Terminal A eingegebene Befehle sind für Terminal B unsichtbar, bis beide Sitzungen geschlossen werden und die Datei geschrieben wird. Für Administratoren, die mehrere SSH-Sitzungen gleichzeitig auf Dedizierten Servern verwalten, entstehen dadurch Lücken im operativen Protokoll.

Die empfohlene Konfiguration für die sitzungsübergreifende Echtzeit-Verlaufsfreigabe:

“`bash

~/.bashrc

export HISTSIZE=100000

export HISTFILESIZE=100000

export HISTCONTROL=ignoreboth

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

shopt -s histappend

PROMPT_COMMAND='history -a; history -c; history -r'

“`

Was dies bewirkt:

  • `history -a` — hängt den neuesten Befehl an die Datei an
  • `history -c` — löscht den speicherinternen Puffer
  • `history -r` — lädt die Datei erneut in den Speicher

Nach jedem Befehl sieht jede Terminalsitzung den vollständigen, einheitlichen Verlauf aus allen aktiven Sitzungen. Der Kompromiss ist ein geringer Overhead bei der `PROMPT_COMMAND`-Ausführung, der in der Praxis vernachlässigbar ist.

Verlauf effizient durchsuchen: Fortgeschrittene Techniken

`fzf` — Fuzzy-Verlaufssuche

Das `fzf`-Tool verwandelt die Verlaufssuche von einem linearen Scan in eine interaktive Fuzzy-Match-Oberfläche:

“`bash

Install fzf (Debian/Ubuntu)

sudo apt install fzf

Bind Ctrl+R to fzf-powered history search

Add to ~/.bashrc:

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

“`

Nach der Konfiguration öffnet `Ctrl+R` eine Vollbild-Fuzzy-Suche über Ihren gesamten Verlauf. Dies ist besonders leistungsstark bei großen Verlaufsdateien (10.000+ Einträge), bei denen `grep` umständlich wird.

Verlauf für Skripting extrahieren

“`bash

Export all unique commands containing "iptables" to a script

history | grep iptables | awk '{$1=""; print $0}' | sort -u > iptables_audit.sh

“`

Dieses Muster ist nützlich, um Runbooks aus Ad-hoc-Befehlen zu rekonstruieren, die während der Reaktion auf Vorfälle ausgeführt wurden.

Sicherheitsüberlegungen zur Bash-Historie

Die Bash-Historie ist ein zweischneidiges Werkzeug. Sie beschleunigt legitime Arbeitsabläufe, stellt aber auch eine erhebliche Angriffsfläche dar.

Wichtige Risiken und Gegenmaßnahmen:

  • Credential-Exposition: Passwörter, die als Befehlszeilenargumente übergeben werden (z. B. `curl -u admin:password`), werden im Klartext in `~/.bash_history` gespeichert. Verwenden Sie stattdessen `ignorespace`, `HISTIGNORE` oder Umgebungsvariablen.
  • Forensik zur Privilegienerweiterung: Angreifer, die Shell-Zugang erlangen, lesen routinemäßig `~/.bash_history`, um die Umgebung zu verstehen, Credentials zu entdecken und hochwertige Ziele zu identifizieren. Setzen Sie restriktive Berechtigungen: `chmod 600 ~/.bash_history`.
  • Verlaufsmanipulation: Ein kompromittierter Benutzer kann `history -c && history -w` ausführen, um alle Beweise zu löschen. Für Prüfungszwecke auf Produktionssystemen sollten Sie `auditd`- oder `syslog`-basierte Befehlsprotokollierung in Betracht ziehen, die vom Benutzer nicht manipuliert werden kann.
  • Root-Verlaufsisolierung: Der Verlauf des Root-Benutzers wird in `/root/.bash_history` gespeichert. Stellen Sie sicher, dass diese Datei nicht weltweit lesbar ist und in Ihren Backup- und Prüfungsbereich einbezogen wird.

Für Umgebungen, die eine strenge Befehlsprüfung erfordern — wie PCI-DSS- oder SOC 2-konforme Infrastruktur — ist die Bash-Historie allein unzureichend. Kombinieren Sie sie mit Kernel-Level-Prüfung über `auditd` und zentralisiertem Log-Versand.

Bash-Verlauf vs. alternative Shell-Verlaufssysteme

FunktionBash-VerlaufZsh-VerlaufFish-Verlauf
Standard-Verlaufsdatei`~/.bash_history``~/.zsh_history``~/.local/share/fish/fish_history`
ZeitstempelunterstützungÜber `HISTTIMEFORMAT`IntegriertIntegriert (YAML-Format)
Duplikatbehandlung`HISTCONTROL``HIST_IGNORE_DUPS`-OptionAutomatische Deduplizierung
Sitzungsübergreifende FreigabeManuell (`PROMPT_COMMAND`)`INC_APPEND_HISTORY`-OptionAutomatisch (standardmäßig geteilt)
Suchoberfläche`Ctrl+R` (linear)`Ctrl+R` (linear)Syntaxhervorgehoben, kontextbewusst
Maximale Verlaufsgröße`HISTFILESIZE`-Variable`SAVEHIST`-VariableKein festes Limit
SperrmechanismusKeiner (Race Conditions möglich)Dateisperrung unterstütztSQLite-basiert (atomare Schreibvorgänge)

Die primäre Einschränkung der Bash-Historie ist das Fehlen einer integrierten Sperrung, was zu Race Conditions führen kann, wenn mehrere Sitzungen gleichzeitig schreiben. Zsh und Fish handhaben dies auf Shell-Ebene eleganter.

Praktische Konfiguration für Produktionsumgebungen

Im Folgenden finden Sie eine bewährte `~/.bashrc`-Verlaufskonfiguration, die für Linux-Produktionsserver geeignet ist, einschließlich solcher, die VPS mit cPanel oder benutzerdefinierte Kontrollpanels betreiben:

“`bash

— Bash History Configuration —

export HISTSIZE=50000

export HISTFILESIZE=50000

export HISTCONTROL=ignoreboth:erasedups

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

export HISTIGNORE="ls:ll:la:cd:pwd:exit:clear:bg:fg:jobs"

export HISTFILE=~/.bash_history

Append to history file; don't overwrite

shopt -s histappend

Save and reload history after each command

PROMPT_COMMAND='history -a; history -c; history -r'

Enable multi-line command history as single entry

shopt -s cmdhist

Store multi-line commands with embedded newlines

shopt -s lithist

“`

`cmdhist` und `lithist` verdienen besondere Erwähnung. Ohne `cmdhist` wird ein mehrzeiliger Befehl (wie eine interaktiv eingegebene `for`-Schleife) als separate Zeilen gespeichert, was eine saubere Wiederausführung unmöglich macht. Mit aktiviertem `cmdhist` und gesetztem `lithist` wird das gesamte Konstrukt als einzelner Verlaufseintrag mit wörtlichen Zeilenumbrüchen gespeichert, wodurch seine Struktur erhalten bleibt.

Verlaufsbasierte Workflows automatisieren

Einen Befehlshäufigkeitsbericht erstellen

“`bash

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -20

“`

Dies zeigt Ihre 20 am häufigsten verwendeten Befehle — nützlich zur Identifizierung von Kandidaten für Aliase oder Shell-Funktionen.

`sudo`-Nutzung prüfen

“`bash

history | grep sudo | awk '{$1=""; print $0}'

“`

In gemeinsam genutzten VPS Control Panels-Umgebungen bietet dies eine schnelle Prüfung der privilegierten Operationen, die während einer Sitzung durchgeführt wurden.

Eine Sitzungszeitlinie rekonstruieren

“`bash

HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " history | grep "2024-11-14"

“`

Filtert alle an einem bestimmten Datum ausgeführten Befehle — unschätzbar wertvoll bei der Überprüfung nach Vorfällen.

Wichtige technische Erkenntnisse und Entscheidungs-Checkliste

Bevor Sie eine Bash-Verlaufskonfiguration in einer Umgebung einsetzen, überprüfen Sie Folgendes:

  • `shopt -s histappend` ist gesetzt — verhindert Verlustrisiken durch gleichzeitige Sitzungen, die sich gegenseitig überschreiben
  • `HISTSIZE` und `HISTFILESIZE` sind beide konfiguriert — das Setzen von nur einer lässt die andere auf ihrem Standard, was zu unerwarteter Kürzung führt
  • `HISTTIMEFORMAT` ist aktiviert — ohne Zeitstempel hat der Verlauf keinen forensischen Wert
  • `HISTCONTROL=ignoreboth` ist mindestens gesetzt — reduziert Rauschen und verhindert, dass credential-nahe Befehle protokolliert werden
  • `HISTIGNORE` schließt triviale Befehle aus — hält das Signal-Rausch-Verhältnis des Verlaufs hoch
  • `~/.bash_history` hat `chmod 600` — verhindert, dass andere Benutzer Ihren Befehlsverlauf lesen
  • `cmdhist` ist aktiviert — stellt sicher, dass mehrzeilige Befehle als kohärente Einheiten gespeichert werden
  • `PROMPT_COMMAND` synchronisiert den Verlauf in Echtzeit — erforderlich für Multi-Sitzungs-Umgebungen
  • `auditd` wird parallel eingesetzt — für Produktionssysteme, bei denen manipulationssichere Protokollierung erforderlich ist
  • Credentials werden niemals als CLI-Argumente übergeben — verwenden Sie stattdessen Umgebungsvariablen, `.netrc` oder Secrets-Manager

Häufig gestellte Fragen

Warum verschwindet mein Bash-Verlauf nach dem Schließen einer SSH-Sitzung?

Dies geschieht typischerweise, weil `shopt -s histappend` nicht gesetzt ist. Ohne es überschreibt jede Sitzung `~/.bash_history` beim Beenden. Wenn die Sitzung abnormal beendet wird (Netzwerkunterbrechung, `kill -9`), findet der Schreibvorgang überhaupt nicht statt. Setzen Sie `histappend` und `PROMPT_COMMAND='history -a'`, um Befehle in Echtzeit zu persistieren.

Wie verhindere ich, dass Passwörter im Bash-Verlauf gespeichert werden?

Verwenden Sie zwei ergänzende Techniken: Stellen Sie dem Befehl ein Leerzeichen voran (erfordert `HISTCONTROL=ignorespace` oder `ignoreboth`) und fügen Sie sensible Befehlsmuster zu `HISTIGNORE` hinzu. Für langfristige Hygiene übergeben Sie niemals Geheimnisse als CLI-Argumente — verwenden Sie Umgebungsvariablen oder dedizierte Secrets-Management-Tools.

Was ist der Unterschied zwischen `HISTSIZE` und `HISTFILESIZE`?

`HISTSIZE` steuert, wie viele Befehle Bash während einer aktiven Sitzung im Speicher hält. `HISTFILESIZE` steuert, wie viele Zeilen in `~/.bash_history` auf der Festplatte gespeichert werden. Beide müssen explizit gesetzt werden — ein großes `HISTSIZE` mit einem kleinen `HISTFILESIZE` bedeutet, dass Ihr sitzungsinterner Verlauf umfangreich ist, aber der Großteil davon beim Beenden der Sitzung verworfen wird.

Können gelöschte Verlaufseinträge wiederhergestellt werden?

Sobald `history -c && history -w` ausgeführt wird, wird der speicherinterne Puffer gelöscht und die Datei abgeschnitten — eine standardmäßige Wiederherstellung ist nicht möglich. Wenn Ihr System jedoch Dateisystem-Snapshots oder Backup-Lösungen verwendet, kann die vorherige Version von `~/.bash_history` aus einem Snapshot wiederhergestellt werden. Dies ist ein weiterer Grund, `auditd` für manipulationssichere Protokollierung auf kritischer Infrastruktur zu implementieren.

Wie teile ich den Bash-Verlauf über mehrere gleichzeitige Terminalsitzungen hinweg?

Fügen Sie Folgendes zu `~/.bashrc` hinzu: `shopt -s histappend` und `PROMPT_COMMAND='history -a; history -c; history -r'`. Dies zwingt jede Sitzung, ihren neuesten Befehl an die gemeinsame Datei anzuhängen und die vollständige Datei nach jeder Eingabeaufforderung neu zu laden, wodurch alle aktiven Terminals eine einheitliche Echtzeit-Ansicht des Befehlsverlaufs erhalten.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen