VMware ESXi and vSphere Cluster Management
Shell-History durchsuchen und Befehle wiederverwenden
Lerne, wie du die Bash-History mit history, Pfeiltasten und Strg+R durchsucht, Befehle sicher wiederholst und sensible Einträge richtig behandelst.
Eine Shell-History ist der Befehlsverlauf einer interaktiven Shell. Sie speichert zuvor eingegebene Befehle, damit du lange oder komplexe Eingaben später wiederfinden, prüfen, ändern und erneut verwenden kannst.
Umfang, Speicherort und Verhalten hängen von der verwendeten Shell, ihrer Konfiguration und der jeweiligen Sitzung ab. Die folgenden Beispiele beziehen sich hauptsächlich auf Bash, eine weit verbreitete Unix-Shell.
Verlauf mit history anzeigen
Der Befehl history listet die in der aktuellen Shell verfügbaren Verlaufseinträge auf:
history
Die Ausgabe enthält normalerweise fortlaufende History-Nummern. Diese Nummer ist eine Referenz auf den jeweiligen Eintrag, zum Beispiel:
41 pwd
42 ls -la
43 grep -R "TODO" src/
44 git status
Mit einer Zahl begrenzt du die Ausgabe auf die jüngsten Einträge:
history 20
Damit werden die letzten 20 verfügbaren Einträge angezeigt. Die sichtbare Anzahl kann durch die Shell-Konfiguration begrenzt sein. Ein sehr alter Befehl muss daher nicht mehr vorhanden sein, selbst wenn er irgendwann ausgeführt wurde.
Methoden zum Wiederfinden und Wiederholen
| Methode | Eingabe oder Tastenkürzel | Zweck | Wichtiger Hinweis |
|---|---|---|---|
history | history | Verlauf mit Nummern anzeigen | Nur Einträge anzeigen, die in Sitzung oder Speicher verfügbar sind |
history mit Anzahl | history 20 | Jüngste Einträge begrenzt anzeigen | Die tatsächliche Menge hängt von der Konfiguration ab |
!Nummer | !17 | Eintrag mit einer bestimmten Nummer wiederholen | Nummer vorher prüfen; nicht blind bei kritischen Befehlen verwenden |
| Pfeil nach oben und unten | ↑ und ↓ | Durch frühere Eingaben navigieren | Der eingefügte Befehl kann vor dem Absenden bearbeitet werden |
Strg+R | Strg+R | Interaktiv rückwärts suchen | Erneutes Strg+R wechselt zu älteren Treffern |
Befehle anhand der History-Nummer ausführen
Eine Eingabe wie !17 verwendet die History-Expansion. Bash ersetzt den Ausdruck vor der Ausführung durch den Befehl mit der History-Nummer 17:
!17
Prüfe die Nummer vorher mit history. Eine History-Nummer ist keine dauerhafte Kennzeichnung: Neue Befehle verändern die Nummerierung, und eine andere Sitzung kann einen anderen Verlauf besitzen.
Bei Unsicherheit ist die explizite Anzeige und Bearbeitung sicherer als blindes Wiederholen. Die History zeigt nur, dass ein Befehl früher verwendet wurde. Sie beweist nicht, dass er für die aktuelle Situation noch geeignet ist.
Navigation mit den Pfeiltasten
Mit der Pfeil-nach-oben-Taste wird ein vorheriger Befehl in die aktuelle Eingabezeile eingefügt. Du kannst ihn prüfen oder bearbeiten und anschließend mit Enter ausführen.
- Drücke
↑, bis der gewünschte Befehl erscheint. - Ändere zum Beispiel einen Pfad, eine Option oder einen Dateinamen.
- Prüfe die vollständige Eingabe.
- Drücke erst danach Enter.
Mit der Pfeil-nach-unten-Taste gehst du wieder vorwärts durch die zuvor aufgerufenen Verlaufseinträge. Sie ist nützlich, wenn du mit der Aufwärtstaste zu weit zurückgegangen bist.
Interaktive Suche mit Strg+R
Strg+R startet in Bash normalerweise die reverse-i-search, also eine rückwärts gerichtete inkrementelle Suche. Dabei suchst du vom jüngsten Eintrag ausgehend nach einem Textbestandteil.
- Drücke
Strg+R. - Gib einen Suchbegriff ein, zum Beispiel
dd. - Bash zeigt einen passenden älteren Befehl an.
- Drücke erneut
Strg+R, um zum nächsten älteren Treffer mit demselben Suchbegriff zu wechseln.
(reverse-i-search)`dd': sudo dd if=image.iso of=/dev/sdb status=progress
Wenn der passende Befehl angezeigt wird, kannst du ihn in die Eingabezeile übernehmen und vor der Ausführung bearbeiten. Je nach Terminal- und Shell-Konfiguration führen Enter oder eine passende Bestätigung zur Ausführung. Mit einer Taste zur Zeilenbearbeitung, häufig dem Pfeil nach links oder rechts, verlässt du die Suche und kannst den Treffer ändern. Mit Strg+C brichst du die Suche ab, ohne den gefundenen Befehl auszuführen.
History löschen und sensible Daten behandeln
history -c leert den Verlaufsspeicher der aktuellen Shell:
history -c
Das entfernt nicht automatisch jede bereits gespeicherte Kopie. Ein Teil des Verlaufs kann bereits in die persistente History-Datei geschrieben worden sein. Außerdem können gleichzeitig geöffnete Shells ihren eigenen Verlauf später wieder speichern.
In Befehlszeilen gehören insbesondere folgende Werte nicht ungeschützt hinein:
- Passwörter
- API-Schlüssel und Tokens
- Private Schlüssel oder andere Geheimnisse
- Verbindungsdaten mit eingebetteten Zugangsdaten
Sicherere Vorgehensweisen sind:
- Geheime Werte nicht direkt als Kommandozeilenargument eingeben.
- Eine verdeckte Passworteingabe verwenden, wenn das Programm sie unterstützt.
- Umgebungsvariablen oder Konfigurationsmechanismen umsichtig einsetzen und ihre Berechtigungen prüfen.
- Die Berechtigungen der History-Datei kontrollieren, damit nur der passende Benutzer sie lesen kann.
- Ein versehentlich offengelegtes Token möglichst sofort rotieren oder widerrufen.
Auch nach dem Löschen aus der Shell-History können Befehle in Prozesslisten, Logs, Terminalaufzeichnungen oder anderen Systemspuren sichtbar gewesen sein. history -c ist daher keine Garantie für eine vollständige Entfernung aller Spuren.
Bash-Konfiguration und Persistenz
Bash speichert den Verlauf typischerweise in einer benutzerspezifischen Datei. Der Pfad steht in der Variablen HISTFILE. Die aktuellen Einstellungen kannst du so anzeigen:
echo "$HISTFILE"
echo "$HISTSIZE"
echo "$HISTFILESIZE"
| Variable oder Datei | Funktion | Typische Auswirkung | Sicherheits- oder Nutzungshinweis |
|---|---|---|---|
HISTFILE | Pfad zur persistenten Bash-History-Datei | Bestimmt, wo Bash den Verlauf über Sitzungen hinweg speichert | Dateiberechtigungen prüfen; der Pfad kann leer oder speziell konfiguriert sein |
HISTSIZE | Anzahl der Einträge, die Bash im Speicher hält | Begrenzt, wie weit du in der laufenden Sitzung zurückgehen kannst | Zu kleine Werte lassen alte Befehle verschwinden |
HISTFILESIZE | Größe des gespeicherten Dateiverlaufs | Begrenzt typischerweise die Anzahl der Einträge in der History-Datei | Ein Eintrag kann aus der Datei entfernt werden, obwohl er zuvor vorhanden war |
HISTCONTROL | Steuert bestimmte Ausschlussregeln | Kann beispielsweise führende Leerzeichen oder aufeinanderfolgende Duplikate auslassen | Kein vollständiger Geheimnisschutz; Verhalten vor der Nutzung testen |
Ein Beispiel für HISTCONTROL ist:
HISTCONTROL=ignoreboth
Damit kann Bash Befehle mit führendem Leerzeichen und aufeinanderfolgende Duplikate aus dem Verlauf ausschließen. Das ist nur eine Komfortfunktion und sollte nicht als verlässliche Methode zur Geheimnisverwaltung betrachtet werden.
Dauerhafte Änderungen werden häufig in einer Shell-Startdatei wie ~/.bashrc gesetzt. Änderungen dort gelten möglicherweise erst für neue Sitzungen. Öffne anschließend eine neue Shell und prüfe das tatsächliche Verhalten. Unterschiedliche Shells können andere Variablen und Dateien verwenden.
Sicheres Wiederverwenden in der Praxis
Verwende folgenden Prüfablauf, bevor du einen alten Befehl erneut ausführst:
- Ist es wirklich der richtige History-Eintrag?
- Zeigen alle Pfade noch auf die richtigen Dateien oder Verzeichnisse?
- Sind Optionen wie Löschen, Überschreiben oder rekursive Verarbeitung vorhanden?
- Haben Variablen und Platzhalter noch die erwarteten Werte?
- Benötigt der Befehl Root-Rechte oder verändert er Systeme außerhalb des lokalen Rechners?
- Gibt es eine Vorschauoption oder eine sichere Testumgebung?
Ein gefundener Befehl kann durch geänderte Dateien, Berechtigungen, Netzwerke, Arbeitsverzeichnisse oder Softwareversionen heute eine andere Wirkung haben als bei seiner ursprünglichen Ausführung.
Fehlerbehebung
Strg+R findet einen erwarteten Befehl nicht
- Suche nach einem kürzeren oder anderen Teilbegriff.
- Prüfe den Verlauf zusätzlich mit
history. - Kontrolliere
HISTSIZE,HISTFILESIZEundHISTCONTROL. - Der Befehl kann außerhalb der gespeicherten Größe liegen oder in einer anderen Sitzung ausgeführt worden sein.
Ein Eintrag erscheint nach history -c später wieder
Unterscheide zwischen dem Verlauf im Speicher, der persistenten History-Datei und anderen gleichzeitig laufenden Sitzungen. Eine andere Shell kann ihren Verlauf später zurückschreiben. Prüfe die Shell-spezifische Behandlung der Datei und beachte, dass Systemspuren wie Logs oder Prozesslisten nicht durch history -c entfernt werden.
Der wiederholte Befehl hat unerwartete Folgen
Wahrscheinlich haben sich Pfade, Dateien, Berechtigungen oder Variablen geändert, oder die History-Nummer wurde falsch zugeordnet. Zeige den Befehl an, bearbeite ihn, verwende eine Vorschauoption und teste kritische Aktionen zunächst in einer sicheren Umgebung.
Ein Passwort oder Token wurde eingegeben
Behandle den Verlaufseintrag, aber gehe nicht davon aus, dass damit alle Kopien entfernt sind. Widerrufe oder rotiere das betroffene Geheimnis nach Möglichkeit und verwende künftig eine verdeckte Eingabe oder eine geeignete Geheimnisverwaltung.
Kurzreferenz
history # Verlauf anzeigen
history 20 # letzte 20 Einträge anzeigen
!17 # Eintrag 17 wiederholen: vorher prüfen
↑ / ↓ # im Verlauf zurück und vorwärts navigieren
Strg+R # rückwärts interaktiv suchen
history -c # Verlaufsspeicher der aktuellen Shell leeren
echo "$HISTFILE" # History-Datei anzeigen
echo "$HISTSIZE" # Speicherlimit anzeigen
echo "$HISTFILESIZE" # Dateilimit anzeigen
Für weiterführende Grundlagen kannst du die Lektion Shell-History durchsuchen als Referenz verwenden.