Terminal "Inkognito-Modus"?

230

Ich benutze Terminal häufig, und manchmal führe ich Befehle aus, die nicht von anderen angezeigt werden sollen, aber mehr Befehle, die versehentlich ausgeführt und ausgeführt werden, verursachen große Probleme.

Ich frage mich also, ob es einen „Inkognito-Modus“ für das Terminal gibt oder geben kann, der es mir ermöglicht, nach Ausführung eines bestimmten Befehls die Aufzeichnung meines Verlaufs zu beenden und erst dann mit der Aufzeichnung zu beginnen, nachdem ich entweder a ausgeführt habe Starten Sie die Aufzeichnung des Verlaufs erneut Befehl und beenden Sie den Inkognito-Modus, oder starte ich das Terminal einfach neu?

Weil ich mich später wieder dabei befinde, Dinge von meinem zu entfernen .bash_history, wenn es viel einfacher wäre, wenn ich die Aufnahme dort überhaupt hätte stoppen oder zumindest versuchen können, sie irgendwo aufzunehmen, wo es einfach nicht wäre erlaubt, und würde am Ende nur nicht aufnehmen.


quelle
6
Nun, vermutlich bist du paranoid, dass deine Geschichte von anderen gelesen wird?
Sparhawk
6
@Sparhawk: Nun, es ist zum Teil so, und Party Ich möchte nicht versehentlich einen möglicherweise tödlichen Wartungsbefehl ausführen, wenn ich mich in Zukunft gerade aufmache! : D
19
Nur hinzufügen, die Sie nicht selbst rechtfertigen: „die sind nicht Dinge , die ich will nicht anderen sehen“ . Das wäre auch für mich ein triftiger Grund. (Besonders in dieser Zeit und in dieser Zeit, in der jeder versucht, dich für "Dinge, die zu verbergen sind" schuldig zu machen)
ereOn
2
Wenn Sie zwei Registerkarten öffnen, in der ersten etwas tun, in der zweiten etwas tun und dann die zweite schließen, BEVOR die erste, scheint nur der Verlauf der ersten beschrieben zu werden .bash_history. (Ubuntu 15.04 ruiniert Terminal, zum Glück ist dies ein Live-USB.)
Hitechcomputergeek
1
Siehe diese Frage auf serverfault
Luc M

Antworten:

265

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

Setzen Sie einfach ein Leerzeichen vor den Befehl. Bash ignoriert Befehle mit vorangestelltem Leerzeichen:

Beispiel: Spaceecho "Some secret text"

Hinweis: Dies funktioniert nur, wenn die HISTCONTROLVariable auf ignorespaceoder gesetzt ist ignoreboth.


Verlauf vorübergehend deaktivieren:

  • Führen Sie Spaceset +o historyoder aus Spaceshopt -uo history, um den Verlauf zu deaktivieren.
  • Führen Sie set -o historyoder aus shopt -so history, um es erneut zu aktivieren.

Verlauf für die aktuelle Sitzung deaktivieren (speichert keine Befehle aus der Sitzung):

unset HISTFILE

Hinweis: Sie können sehen, wie die Befehle gedrückt werden, Upbis Sie das Terminal schließen.


Entfernen Sie einen Befehl aus dem Verlauf:

Lauf Spacehistory | 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 vom Befehl aus. Sie können es mit Ctrl+ Shift+ kopierenC

Führen Sie aus, Spacehistory -d <number>wo <number>sich die Eintragsnummer befindet, um den Eintrag zu entfernen.
Sie können diese Nummer mit Ctrl+ Shift+ einfügenV


Andere interessante Antworten:

Helio
quelle
7
Wenn Sie history -dzum Entfernen einer Zeile verwenden, wird der Inhalt der Zeile entfernt, Sie können jedoch niemals die Tatsache entfernen, dass Sie ausgeführt wurden history -d(es sei denn, Sie verwenden sie zum ersten Mal set +o historyvor dem Ausführen history -d)
AJFaraday,
1
Es hat mich nur an die Logik der
Superinstruktion
4
(OT) Unterlassungsklagen sind rechtliche Dokumente, die Menschen davon abhalten, etwas zu veröffentlichen. Eine Super-Verfügung hindert sie auch daran, die Tatsache zu veröffentlichen, dass ihnen die Veröffentlichung verweigert wurde. Einige logische Argumente fragen, ob sie veröffentlichen können, dass ihnen die Möglichkeit verweigert wurde, einige Informationen zu veröffentlichen. Dann wird es ein zyklisches Argument.
AJFaraday,
1
@Helio Ich denke, es ist besser für Benutzer, die "richtige" Art des Kopierens zu kennen - insbesondere, wenn sie versehentlich Text auswählen. Ich bin mir nicht sicher, wie ich den Raum gestalten soll, vielleicht kläre ich mehr, dass der Raum da ist? Das [Leerzeichen] sieht für mich etwas ungeschickt aus ...
Tim
2
Der unset HISTFILEAnsatz funktioniert auch rückwirkend für alle Befehle, die noch nicht geschrieben wurden .bash_history.
Kasperd
40

Sie können den Verlauf einer bestimmten Terminalsitzung einfach löschen, indem Sie history -cwnach der Arbeit einen Befehl hinzufügen .

Schließen Sie das Terminal nicht, bevor Sie diesen Befehl erteilt haben.

Moithil Biswas
quelle
Dies wird nicht den gesamten Verlauf entfernen?
Helio
6
Dadurch wird nur der Verlauf dieser bestimmten Terminalsitzung entfernt.
Moithil Biswas
28

shopt -uo history sollte es am besten tun.

Wenn Sie die HISTFILE(et al) -Variablen deaktivieren, wird die Protokollierung Ihres UpVerlaufs nicht gestoppt , sondern nur nicht auf die Festplatte verschoben. Dies mag für Sie positiv sein oder auch nicht, aber wenn Sie es erwähnen, möchten Sie wahrscheinlich etwas Besseres. Das Ändern der shoptVerlaufseinstellung verhindert, dass der gesamte Verlaufsmechanismus ausgelöst wird.

Sie können die Anmeldung mit wieder einschalten shopt -so history( -sund -usind gesetzt bzw. nicht gesetzt).

Beachten Sie, dass der Befehl wahrscheinlich selbst protokolliert wird. Stellen Sie ihm also ein Leerzeichen voran, um zu verhindern, dass er dem Verlauf hinzugefügt wird, bevor Sie die Variable löschen.

Oli
quelle
17

Eine andere Möglichkeit, die aktuelle Shell ohne Protokollierung in der Verlaufsdatei zu beenden, ist:

kill -9 $$

Dies veranlasst bash (und wahrscheinlich auch andere Shells), das SIGKILL-Signal an sich selbst zu senden, es an Ort und Stelle zu töten und zu verhindern, dass etwas auf die Festplatte geschrieben wird.

Trottel
quelle
7
aka "Schieß dir in den Kopf" :). Dies hat den Vorteil, dass Sie vor dem Schreiben der Befehle nicht daran denken müssen, etwas zu tun.
Guido,
3
Ich benutze zsh mit inkrementellem Verlaufsschreiben, daher bezweifle ich, dass dies in meinem Fall funktionieren würde
Wayne Werner,
13

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

unset HISTFILE

Während die Sitzung aktiv ist, können Sie wie gewohnt auf den Verlauf zugreifen, dieser wird jedoch nicht auf der Festplatte gespeichert.

In derselben Sitzung rückgängig machen (alle Änderungen werden aufgezeichnet)

HISTFILE=$HOME/.bash_history
Bruni
quelle
1
Und gibt es in der aktuellen Sitzung eine einfache Möglichkeit, dies umzukehren und weiterzumachen?
@ParanoidPanda Ich habe einen Befehl zum Zurücksetzen in der aktuellen Sitzung hinzugefügt.
Bruni
1
@ParanoidPanda: Warum benötigen Sie einen Befehl, um ihn HISTFILEin der aktuellen Sitzung erneut festzulegen ? Wenn Sie die Änderung rückgängig machen (auch nachdem Sie die geheimen Befehle ausgeführt haben), werden diese beim Beenden im Verlauf gespeichert.
Helio
@Helio: Oh nein, ich meinte einen Befehl, der dann wieder mit der Aufnahme anfängt, aber die Befehle, die ich nicht speichern wollte, nicht speichert.
1
@ParanoidPanda, Helio scheint hier richtig zu sein, da der Verlauf beim Beenden gespeichert wird. Ich hatte das nicht in Betracht gezogen.
Bruni,
10

Sie können Verlaufszeilen in der aktuellen Shell-Sitzung ändern. Wenn Sie durch den Verlauf zurückgehen (z. B. mit Upoder Ctrl+ P) und eine Zeile ändern, ohne sie auszuführen , wird nur die geänderte Version der Zeile gespeichert. Sie können es beliebig ändern. Eine gute Wahl wäre die Verwendung von Ctrl+, Uum die Zeile vollständig auszublenden, oder die Verwendung von Esc#, um ein #Kommentarzeichen am Anfang einzufügen.

Denken Sie daran, nicht auf Return( Enter) zu drücken, um eine Zeile zu verlassen, ohne sie auszuführen . Ich kehre über zur neuesten Zeile in der Geschichte zurück Esc>.

(Anstatt Escgefolgt von >, können Sie in den meisten Terminals gedrückt halten Altund drücken >. Dasselbe gilt für den Esc#obigen Vorschlag.)

Hinweis: Einträge aus früheren Sitzungen können auf diese Weise nicht dauerhaft geändert werden. Diese Änderungen werden HISTFILEam Ende der Sitzung nicht übernommen.

Echristopherson
quelle
6

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

 chattr +i .bash_history
Webtm
quelle
5

Sie können die vertraulichen Befehle in einer Bildschirmsitzung ausführen und die Sitzung anschließend zerstören.

Alternativ können Sie diese Bildschirmsitzung lebendig, aber getrennt halten und nur dann darauf zugreifen, wenn Sie tatsächlich in der Lage sein möchten, den Pfeil nach oben zu den ansonsten gefährlichen Befehlen zu bewegen.

keag
quelle
1

Ich persönlich verwende mkshund diese Shell hat standardmäßig keine Verlaufsdatei. Das bedeutet, dass Sie eine alternative Shell wie mkshoder dash(die übrigens standardmäßig verwendet wird) starten können, um den Befehl auszuführen, den Benutzer nicht sehen sollen, und das Programm dann zu beenden. bashDer Verlauf zeichnet nur auf, dass Sie eine alternative Shell gestartet haben, und das wars.

Sergiy Kolodyazhnyy
quelle
1

Sie können auch Terminal - Multiplexer wie verwenden tmux, screen. Also unter tmuxoder screenGeschichte würde nicht gespeichert werden.

vusan
quelle