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.


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.


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


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

(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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.