Wie entferne ich die letzten 5 Zeilen im Bash-Verlauf?

11

Wie kann ich die letzten 5 Zeilen im Bash-Verlauf entfernen? Wenn ich den Ubuntu-Server neu lade oder neu starte, sind sie überhaupt nicht da?

history -c entfernt es nur aus der aktuellen Sitzung, aber wenn ich mich erneut anmelde, werden die Befehle erneut angezeigt. Ich möchte die letzten 5 löschen.

Ich bin gelaufen:

history

Dann sehe ich die Nummern der Befehle, zB:

  489  cd ..
  490  cd .zshrc
  491  cat .zshrc

Dann laufe ich zum Beispiel:

history -d 489
history -c 

Dann schließe ich das Terminal und öffne es erneut. Ich sehe immer noch Zeile 489. Es wurde nur für diese aktuelle Sitzung gelöscht. Wie lösche ich es dauerhaft aus allen zukünftigen Sitzungen?

Bitte beraten.

Anthony Pinto
quelle
Ist die Verlaufsdatei nicht nur eine einfache TXT-Datei, die bearbeitet werden kann? Entschuldigung in Windows im Moment und nie wirklich versucht.
EODCraft Staff

Antworten:

8

Es gibt verschiedene Möglichkeiten, um diese Aufgabe zu erfüllen. Lassen Sie uns jedoch etwas klarstellen, bevor Sie fortfahren.

Es gibt eine Datei mit dem Namen:, ~/.bash_historydie den Verlauf Ihrer älteren Terminalsitzungen enthält. Wenn Sie Ihr Terminal schließen, wird Ihr Verlauf dort gespeichert.

Gleichzeitig ist der Verlauf Ihrer alten Sitzungen zusammen mit der aktuellen Sitzung vorübergehend über historyBefehle zugänglich , bis Sie das Terminal schließen, das dann in einer ~/.bash_historyDatei gespeichert wird.

Wenn Sie also am Ende von 5 Zeilen entfernen ~/.bash_history, führt das Schließen des Terminals dazu, dass Ihr aktueller Befehl bei den nächsten Sitzungen verfügbar ist.

Also, wenn ich eine wcauf .bash_history mache:

wc -l ~/.bash_history

Meistens bekomme ich eine kleinere Anzahl als von history | wc -l.

Wenn Sie die letzten 5 Zeilen der Datei entfernen möchten, können Sie diesen Befehl verwenden:

for i in {1..5}; do sed -i '$d' .bash_history; done;

Und wenn Sie den gesamten Verlauf mit Ausnahme der letzten 5 Befehle behalten möchten, die im aktuellen Sitzungslauf ausgegeben wurden:

history | awk '{ print $2 }' | head -n -5 > .bash_history

Vergiss nicht zu rennen history -c.

Ravexina
quelle
Entfernt das nur die letzten 5 Befehle in Bash? Und dauerhaft? zB also, wenn ich das Terminal herunterfahre und mich erneut bei ssh anmelde, werden die letzten 5 nicht da sein?
Anthony Pinto
ps. versuchte es zuerst vor Ort und bekam "head: illegal line count - -5"
Anthony Pinto
Was zu funktionieren scheint, ist, wenn ich zum Beispiel history -wd 493 ausführe und es endgültig lösche. Dann habe ich in der Geschichte eine Reihe von history -wd's usw. ... also ist es nicht intuitiv, wie kann ich Löschen Sie zB die letzten 5 Befehle in einem Schuss, die am besten wären, und dann den eigentlichen Befehl, mit dem ich sie selbst
Anthony Pinto
Testen Sie den neuen Code. funktioniert gut für mich.
Ravexina
Sagt, "Kopf: illegale Zeilenanzahl - -5" noch. :(
Anthony Pinto
11

Sie können das Entfernen aus der Verlaufsdatei über die Befehlszeile in zwei Schritten erreichen:

Durch history -d <line_number>Eingabe wird eine angegebene Zeile aus dem Verlauf im Speicher gelöscht. Durch Eingabe wird history -wder aktuelle In-Memory-Verlauf in die Datei ~ / .bash_history geschrieben. Die beiden Schritte zusammen entfernen die Zeile dauerhaft aus dem In-Memory-Verlauf und auch aus der Datei .bash_history.

Ref: StackExchange

EODCraft-Mitarbeiter
quelle
Dies ist viel näher, also führe ich zum Beispiel history -wd 493 aus und es funktioniert, um es endgültig zu löschen. In der Geschichte habe ich jedoch eine Reihe von history -wd's usw. ... also ist es nicht intuitiv, wie kann ich das löschen? zB die letzten 5 Befehle auf einmal, die am besten wären, und dann den eigentlichen Befehl, mit dem ich sie selbst gelöscht habe.
Anthony Pinto
Gibt es keine Geschichtsmanpage? Sry ich bin in Windows ....
EODCraft Staff
1
@EODCraftStaff Typ manund Name der Befehlsanleitung, die Sie anzeigen möchten. In diesem Fall : man history.
LD James
Verwenden Sie ein Leerzeichen vor Ihrem Befehl zum Löschen des Verlaufs. Dieser wird nicht in Ihren Verlauf verschoben, nachdem Inhalte aus dem Verlauf entfernt wurden. Alternativ, kill -s 9 $$wenn Sie fertig sind.
Stephen
8

Ich denke, Sie müssen dies versuchen, es ist sehr einfach und unkompliziert.

  1. So löschen Sie den Verlauf spurlos

    history -d $((HISTCMD-1)) && history -d NO_of_History_you_want_to_delete
  2. Wenn Sie einen Befehl ausführen möchten, ohne eine Spur zu hinterlassen.

    history -d $((HISTCMD-1)) && type_your_command_here_and_execute
Kartik Agarwal
quelle
(2.) beantwortet die Frage nicht und es wäre viel einfacher, dem spurlosen Befehl ein Leerzeichen voranzustellen, um seine Hinzufügung zum Verlauf wegzulassen.
David Foerster
1
(1.) ist sowohl eine ausgezeichnete als auch eine elegante Lösung. Ich bin nicht sicher, wie das Hinzufügen eines Leerzeichens verhindert, dass es zur Geschichte hinzugefügt wird, David
theking2
@ theking2 Bei einigen Systemen weist ein Leerzeichen bash bash an, den Befehl nicht in den Verlauf /programming/6475524 zu schreiben .
Chaptuck
0

Öffnen Sie ~/.bash_historyin Ihrem Editor und entfernen Sie die letzten 5 Zeilen.

Nick Rodriguez
quelle
Nicht so toll mit VIM - kann ich ausführen, Verlauf -wd 1, Verlauf -wd 2, Verlauf -wd 3, Verlauf -wd 4, Verlauf -wd 5 und dann Verlauf -c? Wenn ich dann das nächste Mal alle 5 öffne, sind die Befehle für diese Sitzung zum Löschen verschwunden?
Anthony Pinto
Wenn Sie Befehle aus dem Verlauf ausblenden möchten, verwenden Sie die Variable HISTIGNORE, z. B. in Ihrer .bashrc, HISTIGNORE = 'clear: history: ls: cd'
Nick Rodriguez
Sie können gedit ~ / .bash_history verwenden, müssen weder vim noch nano verwenden.
EODCraft Staff
0

1. Schreiben Sie den aktuellen Verlauf in die Verlaufsdatei und überschreiben Sie den Inhalt der Verlaufsdatei

Geschichte -w

2. Bearbeiten Sie den Verlauf nach Ihren Wünschen

vi ~ / .bash_history

3. Lesen Sie den Inhalt der Verlaufsdatei und verwenden Sie ihn als aktuellen Verlauf.

Geschichte -r

Rostislav Stribrny
quelle