Frage Terminal 'Inkognito-Modus'?


Ich benutze Terminal sehr oft und manchmal führe ich Befehle aus, die nicht Dinge sind, die andere nicht sehen sollen, aber mehr Befehle, die, wenn ich versehentlich einen Pfeil nach oben schiebe und versehentlich ausgeführt würde, eine Menge Ärger verursachen würden.

Ich frage mich also, ob es einen Inkognito-Modus gibt, mit dem ich bei der Ausführung eines bestimmten Befehls aufhören kann, meine Geschichte aufzuzeichnen, und dann erst dann mit der Aufnahme beginne, nachdem ich entweder einen Starten Sie den Aufzeichnungsverlauf erneut, und beenden Sie den Inkognito-Modus oder starten Sie einfach das Terminal neu?

Weil ich mich später wieder aufhalte und Sachen von meinen Sachen entferne .bash_history, wenn es viel einfacher wäre, wenn ich hätte aufhören können, es dort aufzunehmen, oder es zumindest versuchen würde, es irgendwo aufzunehmen, wo es einfach nicht erlaubt wäre, und es am Ende nicht aufzeichnen würde.


225
2018-05-18 14:53


Ursprung


@Sparhawk: Was?
Nun, vermutlich bist du es paranoid dass deine Geschichte von anderen gelesen wird? - Sparhawk
@Sparhawk: Nun, es ist teilweise das, und Party Ich möchte nicht versehentlich einen möglicherweise tödlichen Wartungsbefehl ausführen, wenn ich nur in der Zukunft aufsteige! : D
Nur um hinzuzufügen, müssen Sie sich nicht rechtfertigen: "Das sind keine Dinge, von denen ich nicht möchte, dass andere sie sehen". Das wäre für mich auch ein absolut gültiger Grund. (Vor allem in dieser Zeit, in der jeder versucht, dich schuldig zu machen, weil er "Dinge zu verstecken" hat) - ereOn
Wenn du zwei Tabs öffnest, mach Sachen in der ersten, mach Sachen in der zweiten, dann schließe die zweite vor der ersten, nur die Geschichte der ersten scheint in geschrieben zu sein .bash_history. (Ubuntu 15.04 zerstörten Terminal, Glück, das ist ein Live-USB.) - Hitechcomputergeek


Antworten:


Führen Sie einen Befehl aus, ohne ihn in den Verlauf zu schreiben:

Setzen Sie einfach ein Leerzeichen vor dem Befehl. Bash ignoriert Befehle mit einem vorangestellten Leerzeichen:

Beispiel: Raumecho "Some secret text"

Hinweis: Dies funktioniert nur, wenn der HISTCONTROL Variable ist auf gesetzt ignorespace oder ignoreboth.


Geschichte vorübergehend deaktivieren:

  • Lauf Raumset +o history oder Raumshopt -uo history um den Verlauf zu deaktivieren.
  • Lauf set -o history oder shopt -so history um es wieder zu aktivieren.

Deaktiviere den Verlauf für die aktuelle Sitzung (erinnert sich nicht an Befehle aus der Sitzung):

unset HISTFILE

Hinweis: Sie können die Befehle anzeigen, die gedrückt werden Oben bis Sie das Terminal schließen.


Entfernen Sie einen Befehl aus dem Verlauf:

Lauf Raumhistory | grep "part of your secret command"

Es wird eine Liste der zuvor ausgeführten Befehle in folgendem Format angezeigt:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Wählen Sie die Eintragsnummer links neben dem Befehl. Sie können es mit kopieren Strg+Verschiebung+C

Lauf Raumhistory -d <number> woher <number> ist die Eintragsnummer, um den Eintrag zu entfernen.
Sie können diese Nummer mit einfügen Strg+Verschiebung+V


Andere interessante Antworten:


260
2018-05-19 15:01



Wenn du benutzt history -dUm eine Zeile zu entfernen, wird der Inhalt der Zeile entfernt, aber Sie können nie die Tatsache entfernen, die Sie ausgeführt haben history -d (es sei denn du benutzt es zuerst set +o history vor dem Laufen history -d) - AJFaraday
Es hat mich nur an die Super-Injunction-Logik erinnert, das ist alles;) - AJFaraday
(OT) Injunctions sind ein juristisches Dokument, das die Leute davon abhält, etwas zu veröffentlichen. Eine Super-Verfügung hält sie auch davon ab, die Tatsache zu veröffentlichen, dass ihnen die Möglichkeit zur Veröffentlichung verweigert wurde. Einige logische Argumente fragen, ob sie veröffentlichen können, dass ihnen die Möglichkeit verweigert wurde, Informationen zu veröffentlichen. Dann wird es ein zyklisches Argument. - AJFaraday
@Helio Ich denke, es ist besser für die Benutzer zu wissen, die "richtige" Art zu kopieren - vor allem, wenn sie versehentlich gehen und einen Text auswählen. Ich bin mir nicht sicher, wie ich den Raum gestalten soll, vielleicht mehr darüber, dass der Raum da ist? Der [Raum] sieht ein wenig ungeschickt für mich aus ... - Tim
Das unset HISTFILE Der Ansatz funktioniert auch rückwirkend für alle Befehle, auf die noch nicht geschrieben wurde .bash_history noch. - kasperd


Sie können den Verlauf einer bestimmten Terminalsitzung einfach löschen, indem Sie einen Befehl hinzufügen history -cw nach der Arbeit. Schließen Sie das Terminal nicht bevor Sie den Befehl geben.


39
2018-05-18 15:04



Dies wird nicht den gesamten Verlauf entfernen? - Helio
Dadurch wird nur der Verlauf dieser bestimmten Terminalsitzung gelöscht. - Moithil Biswas


shopt -uo history sollte es am besten machen.

Nuking der HISTFILE (et al) Variablen werden Ihre nicht stoppen Oben Geschichte wird protokolliert, es wird nur nicht auf die Festplatte geschoben. Dies kann oder auch nicht eine positive Sache für Sie sein, aber wenn Sie es erwähnen, denke ich, dass Sie etwas besseres wollen. Wechseln shopt History-Einstellung verhindert, dass der gesamte History-Mechanismus ausgelöst wird.

Sie können die Anmeldung wieder mit aktivieren shopt -so history (das -s und -u werden jeweils gesetzt und nicht gesetzt).

Beachten Sie, dass der Befehl selbst wahrscheinlich protokolliert wird, sodass er mit einem Leerzeichen versehen wird, um zu verhindern, dass er dem Verlauf hinzugefügt wird, bevor Sie die Variable löschen.


28
2018-05-19 22:00





Eine weitere Möglichkeit, die aktuelle Shell ohne Protokollierung in der Verlaufsdatei zu beenden, besteht darin,

kill -9 $$

Dies veranlaßt bash (und wahrscheinlich auch andere Shells), das Signal SIGKILL an sich selbst zu senden, was es an Ort und Stelle tötet und es daran hindert, etwas auf die Platte zu schreiben.


17
2018-05-18 15:02



a.k.a. "Schieße dich in den Kopf" :). Dies hat den Vorteil, dass Sie sich vor dem Schreiben der Befehle nicht daran erinnern müssen, etwas zu tun. - Guido
Ich verwende zsh mit inkrementellem Verlaufsschreiben, also bezweifle ich, dass das in meinem Fall funktionieren würde - Wayne Werner


Um den Befehlsverlauf für die aktuelle Sitzung vorübergehend zu deaktivieren, können Sie die Umgebungsvariable HISTFILE vorübergehend aufheben.

unset HISTFILE

Solange die Sitzung aktiv ist, können Sie wie gewohnt auf den Verlauf zugreifen, er wird jedoch nicht auf dem Datenträger gespeichert.

Umkehren in derselben Sitzung (alle Änderungen werden aufgezeichnet)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



Und gibt es in der aktuellen Sitzung einen einfachen Weg, dies umzukehren und weiterzumachen?
@ParanoidPanda Ich habe in der aktuellen Sitzung einen Befehl zum Zurücksetzen hinzugefügt. - Bruni
@ ParanoidPanda: Warum brauchen Sie einen Befehl zu setzen HISTFILE wieder auf der aktuellen Sitzung? Wenn Sie die Änderung rückgängig machen (auch nach Ausführung der geheimen Befehle), werden sie beim Beenden in den Verlauf gespeichert. - Helio
@Helio: Oh, nein, ich meinte einen Befehl, der dann wieder mit der Aufnahme beginnen würde, aber nicht die Befehle speichern, die ich nicht speichern wollte.
@ParanoidPanda, Helio scheint hier recht zu haben, da die Geschichte beim Verlassen gerettet wird. Das hatte ich nicht bedacht. - Bruni


Sie können Verlaufszeilen in der aktuellen Shell-Sitzung ändern. Wenn Sie durch die Geschichte gehen (z. B. mit Oben oder Strg+P) und ändere eine Zeile ohne es auszuführen, nur die geänderte Version der Zeile wird gespeichert. Sie können es beliebig modifizieren; eine gute Wahl wäre die Verwendung Strg+U um die Zeile komplett zu leeren oder zu verwenden Esc# einlegen # Kommentarzeichen am Anfang.

Um eine Linie zu verlassen, ohne sie auszuführen, denken Sie daran, nicht zu treffen Rückkehr (Eingeben). Was ich mache, ist über die Esc>.

(Anstatt von Esc gefolgt von >In den meisten Terminals können Sie halten Alt und drücke >; das gleiche gilt für die Esc# Vorschlag oben.)

Hinweis: Sie können auf diese Weise Einträge aus früheren Sitzungen nicht dauerhaft ändern. Diese Änderungen werden nicht auf die Anwendung angewendet HISTFILE am Ende der Sitzung.


10
2018-05-20 03:24





Sie könnten .bash_history auch schreibgeschützt machen. Ich würde zuerst die Datei leeren und dann tun:

 chattr +i .bash_history

6
2018-05-21 20:46





Sie können die sensiblen Befehle in einer Bildschirmsitzung ausführen und dann die Sitzung zerstören, wenn Sie fertig sind.

Alternativ könnten Sie diese Bildschirmsitzung am Leben erhalten, aber freilassen, und nur darauf zugreifen, wenn Sie tatsächlich einen Pfeil zu den sonst gefährlichen Befehlen abfragen möchten.


5
2017-11-12 19:31





Persönlich benutze ich mksh, und diese Shell hat standardmäßig keine Verlaufsdatei. Das bedeutet, dass Sie alternative Shell wie z mksh oder dash (der übrigens standardmäßig kommt), um den Befehl auszuführen, den die Benutzer nicht sehen sollen, und beendet ihn, sobald er fertig ist. bash Geschichte wird nur aufzeichnen, dass Sie alternative Shell gestartet haben und das war's.


1
2018-04-06 10:50





Sie können auch Terminal-Multiplexer wie z tmux, screen. Also unter tmux oder screen Geschichte würde nicht gespeichert werden.


1