Diese Frage sollte wahrscheinlich nach ServerFault verschoben werden, da dies nicht so sehr "programmiert" als "Serveradministrator" - aber danke für die Frage / Antwort, genau das, was ich brauchte!
Andrew Theken
Antworten:
294
Beginnen Sie Ihren Befehl mit einem Leerzeichen und es wird nicht in den Verlauf aufgenommen.
Beachten Sie, dass hierfür die Umgebungsvariable $HISTCONTROLfestgelegt werden muss.
Überprüfen Sie, ob der folgende Befehl ignorespaceoder
zurückgibtignoreboth
#> echo $HISTCONTROL
Um die Umgebungsvariable hinzuzufügen, falls sie fehlt, kann die folgende Zeile zum Bash-Profil hinzugefügt werden. Z.B%HOME/.bashrc
export HISTCONTROL=ignorespace
Nach dem erneuten Sourcing des Profils werden keine Befehle mit Leerzeichenpräfix geschrieben $HISTFILE
Dies funktioniert nur, wenn in $ HISTCONTROL ein Ignorierraum enthalten ist - obwohl dies auf den meisten Systemen wahrscheinlich die Standardeinstellung ist.
pgl
2
Richtig. Für weitere Informationen sollte sich das OP HISTCONTROL und HISTIGNORE in der Bash-Manpage ansehen.
U-Punkt
2
thegeekstuff.com/2008/08/… - Weitere Tipps zum Bash-Verlauf finden Sie hier, einschließlich dieser Methode zum Ausblenden von Befehlen aus dem Verlauf
user379997
52
Setzen Sie in einer bestimmten Bash-Sitzung die Verlaufsdatei auf / dev / null, indem Sie Folgendes eingeben:
export HISTFILE=/dev/null
Beachten Sie, dass, wie in den Kommentaren erwähnt, keine Befehle in dieser Sitzung in den Verlauf geschrieben werden!
Leg dich bitte nicht mit der harten Arbeit deines Systemadministrators an;)
Doodads Lösung ist eleganter. Deaktivieren Sie einfach die Variable: unset HISTFILE(danke!)
Dadurch wird verhindert, dass alle Befehle protokolliert werden. Es ist nicht das, was der Fragesteller will.
Noufal Ibrahim
12
Dies verursachte Probleme für mich, da die /dev/nullBerechtigungen beim Abmelden auf 0600 festgelegt wurden. Stattdessen habe ich verwendet unset HISTFILE.
Fahren Sie dann mit Ihren hinterhältigen Aktivitäten fort. Das Festlegen der Histdatei auf /dev/nullwird in der Verlaufsdatei protokolliert. Dieser Eintrag wird jedoch sofort gelöscht und es werden keine Spuren (zumindest in der Verlaufsdatei) angezeigt.
Dies wurde bereits viele Male beantwortet. Was würden Sie sagen, Ihre Antwort fügt diesem Thread hinzu (außer nutzlosem Rauschen)?
gniourf_gniourf
Es wurde nicht in einer Antwort zusammengefasst , damit der Befehl selbst nicht in der Historie angezeigt wird und nichts angezeigt wird, was danach eingegeben wird.
Christian
1
Aber jetzt ist dieser Thread ein echtes Chaos! In diesem Fall, besonders für eine so alte Frage,
halte
5
Wie von Doodad in den Kommentaren erwähnt , unset HISTFILEfunktioniert dies gut, aber falls Sie auch einen Verlauf löschen möchten, müssen Sie echo $HISTFILE(normalerweise ~/.bash_history) den Speicherort der Verlaufsdatei abrufenunset HISTFILE und bearbeiten ~/.bash_history(oder was auch immer HISTFILEwar - natürlich ist es jetzt unsetso, dass Sie es können. ' t lies es).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Dann haben Sie Ihren Verlauf bearbeitet und die Tatsache, dass Sie ihn bearbeitet haben!
Versuchte dies auf: GNU Bash, Version 3.2.57 (1) -Veröffentlichung (x86_64-apple-darwin15) und es funktioniert nicht. Die Befehle, die ich nach dem Deaktivieren von HISTORY verwendet habe, wurden in ~ / .bash_history
Krystian am
@Krystian Mein Fehler - Ich hatte "nicht gesetzte GESCHICHTE" geschrieben, wenn es "nicht gesetzte HISTFILE" sein sollte - korrigiert. Funktioniert es jetzt? Es funktioniert mit GNU Bash, Version 4.3.30 (1) -Veröffentlichung (x86_64-pc-linux-gnu).
Drkvogel
Nun, ich bin mir nicht sicher. Einfacher Test: unset HISTFILE; echo TEST; historyGibt Ihnen den Befehl echo TESTwie der vorletzte. Obwohl der Verlauf nach Beendigung der Sitzung und erneuter Verbindung in der Tat nicht über diesen Eintrag verfügt. Also würde ich sagen, es funktioniert :)
Krystian
unset HISTFILEscheint nicht zu verhindern, dass Befehle im Verlauf im Speicher aufgezeichnet werden, aber es verhindert, dass sie in einer beliebigen Datei $ HISTFILE aufgezeichnet werden. Ich denke, Sie haben Ihren lokalen Verlauf noch im Speicher, aber er wird nicht mehr in einer Datei aufgezeichnet, was Sie vielleicht wollen! ;)
drkvogel
4
Sie können auch den folgenden Befehl verwenden:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Ich habe einen Alias daraus erstellt: alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"und jetzt können Sie es so etwas tun:mysql -uroot -pSecretPassword ; forget
sobi3ch
1
Entschuldigung, aber mir ist klar, dass Sie eine Funktion anstelle eines Alias erstellen müssen, da Anführungszeichen die Bedeutung $sund andere Dinge in sed ändern . function forget() { // put code here // }
sobi3ch
3
Wenn Sie zsh verwenden , können Sie Folgendes ausführen:
setopt histignorespace
Nachdem dies festgelegt wurde, wird jeder Befehl, der mit einem Leerzeichen beginnt , aus dem Verlauf ausgeschlossen.
Sie können mit Aliasnamen in .zshrcdiese einzuschalten on / off :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Schön, aber diese Frage ist speziell markiert Bash
Tripleee
2
Es gibt verschiedene Möglichkeiten, dies zu erreichen. Dadurch wird die Größe der Verlaufsdatei auf 0 gesetzt:
export HISTFILESIZE=0
Dadurch wird die Verlaufsdatei auf gesetzt /dev/nullund effektiv deaktiviert:
export HISTFILE=/dev/null
Bei einzelnen Befehlen können Sie dem Befehl ein Leerzeichen voranstellen, das nicht in der Verlaufsdatei gespeichert wird. Beachten Sie, dass hierfür der ignorespaceWert in der $HISTCONTROLUmgebungsvariablen enthalten sein muss (man bash und suchen Sie ignorespacenach weiteren Details).
Dadurch wird verhindert, dass alle Befehle protokolliert werden. Es ist nicht das, was der Fragesteller will.
Noufal Ibrahim
Nun, ich ging davon aus, dass der Fragesteller die Werte zurücksetzen würde, nachdem er getan hatte, was er wollte, das nicht protokolliert werden sollte.
pgl
1
Dies ist praktisch, wenn Sie den gesamten Verlauf löschen möchten, einschließlich der Tatsache, dass Sie den gesamten Verlauf gelöscht haben!
Dadurch wird der Verlauf für alle zukünftigen Befehle deaktiviert, nicht für einen einzelnen Befehl. Die meisten Leute, die hierher kommen, sollten sich stattdessen die akzeptierte Antwort ansehen.
Tripleee
Dies ist gültig oder in Ordnung, aber unvollständig. Solange wir set -x historydanach den umgekehrten Befehl hinzufügen , funktioniert es.
Abdillah
0
Dieser Befehl kann nützlich sein. Dadurch wird der ausgeführte Befehl nicht aufgezeichnet
Antworten:
Beginnen Sie Ihren Befehl mit einem Leerzeichen und es wird nicht in den Verlauf aufgenommen.
Beachten Sie, dass hierfür die Umgebungsvariable
$HISTCONTROL
festgelegt werden muss.Überprüfen Sie, ob der folgende Befehl
ignorespace
oder zurückgibtignoreboth
Um die Umgebungsvariable hinzuzufügen, falls sie fehlt, kann die folgende Zeile zum Bash-Profil hinzugefügt werden. Z.B
%HOME/.bashrc
Nach dem erneuten Sourcing des Profils werden keine Befehle mit Leerzeichenpräfix geschrieben
$HISTFILE
quelle
Setzen Sie in einer bestimmten Bash-Sitzung die Verlaufsdatei auf / dev / null, indem Sie Folgendes eingeben:
Beachten Sie, dass, wie in den Kommentaren erwähnt, keine Befehle in dieser Sitzung in den Verlauf geschrieben werden!
Leg dich bitte nicht mit der harten Arbeit deines Systemadministrators an;)
Doodads Lösung ist eleganter. Deaktivieren Sie einfach die Variable:
unset HISTFILE
(danke!)quelle
/dev/null
Berechtigungen beim Abmelden auf 0600 festgelegt wurden. Stattdessen habe ich verwendetunset HISTFILE
.quelle
Eine Erweiterung der Antwort von @John Doe & @ user3270492. Aber das scheint für mich zu funktionieren.
Sie sollten den Eintrag des Befehls nicht in Ihrem Verlauf sehen.
Hier ist die Erklärung ..
Das 'history -d' löscht den genannten Eintrag aus dem Verlauf.
Das HISTCMD speichert die Befehlsnummer der nächsten auszuführenden. (HISTCMD-1) bezieht sich also auf den zuletzt ausgeführten Befehl.
Entfernen Sie eine bestimmte Zeile aus der Bash-Verlaufsdatei
quelle
Sie könnten in Betracht ziehen, eine Shell ohne Verlauf zu verwenden, wie vielleicht
(vielleicht
/bin/dash
oder/bin/sash
könnte angemessener sein als/bin/sh
)oder noch besser das Batch- Dienstprogramm verwenden, z
Die Geschichte würde dann enthalten
sh
oderbatch
was nicht sehr aussagekräftig istquelle
Sie können Ihre Sitzung mit beginnen
Fahren Sie dann mit Ihren hinterhältigen Aktivitäten fort. Das Festlegen der Histdatei auf
/dev/null
wird in der Verlaufsdatei protokolliert. Dieser Eintrag wird jedoch sofort gelöscht und es werden keine Spuren (zumindest in der Verlaufsdatei) angezeigt.Auch dies ist nicht permanent.
quelle
Wie von Doodad in den Kommentaren erwähnt ,
unset HISTFILE
funktioniert dies gut, aber falls Sie auch einen Verlauf löschen möchten, müssen Sieecho $HISTFILE
(normalerweise~/.bash_history
) den Speicherort der Verlaufsdatei abrufenunset HISTFILE
und bearbeiten~/.bash_history
(oder was auch immerHISTFILE
war - natürlich ist es jetztunset
so, dass Sie es können. ' t lies es).Dann haben Sie Ihren Verlauf bearbeitet und die Tatsache, dass Sie ihn bearbeitet haben!
quelle
unset HISTFILE; echo TEST; history
Gibt Ihnen den Befehlecho TEST
wie der vorletzte. Obwohl der Verlauf nach Beendigung der Sitzung und erneuter Verbindung in der Tat nicht über diesen Eintrag verfügt. Also würde ich sagen, es funktioniert :)unset HISTFILE
scheint nicht zu verhindern, dass Befehle im Verlauf im Speicher aufgezeichnet werden, aber es verhindert, dass sie in einer beliebigen Datei $ HISTFILE aufgezeichnet werden. Ich denke, Sie haben Ihren lokalen Verlauf noch im Speicher, aber er wird nicht mehr in einer Datei aufgezeichnet, was Sie vielleicht wollen! ;)Sie können auch den folgenden Befehl verwenden:
Ich denke, es ist ein sehr portabler Befehl.
quelle
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
und jetzt können Sie es so etwas tun:mysql -uroot -pSecretPassword ; forget
$s
und andere Dinge in sed ändern .function forget() { // put code here // }
Wenn Sie zsh verwenden , können Sie Folgendes ausführen:
Nachdem dies festgelegt wurde, wird jeder Befehl, der mit einem Leerzeichen beginnt , aus dem Verlauf ausgeschlossen.
Sie können mit Aliasnamen in
.zshrc
diese einzuschalten on / off :quelle
Es gibt verschiedene Möglichkeiten, dies zu erreichen. Dadurch wird die Größe der Verlaufsdatei auf 0 gesetzt:
Dadurch wird die Verlaufsdatei auf gesetzt
/dev/null
und effektiv deaktiviert:Bei einzelnen Befehlen können Sie dem Befehl ein Leerzeichen voranstellen, das nicht in der Verlaufsdatei gespeichert wird. Beachten Sie, dass hierfür der
ignorespace
Wert in der$HISTCONTROL
Umgebungsvariablen enthalten sein muss (man bash und suchen Sieignorespace
nach weiteren Details).quelle
Dies ist praktisch, wenn Sie den gesamten Verlauf löschen möchten, einschließlich der Tatsache, dass Sie den gesamten Verlauf gelöscht haben!
quelle
Sie müssen nur ausführen:
$ set +o history
Um mehr zu sehen, führen Sie Folgendes aus:
$ man set
quelle
set -x history
danach den umgekehrten Befehl hinzufügen , funktioniert es.Dieser Befehl kann nützlich sein. Dadurch wird der ausgeführte Befehl nicht aufgezeichnet
quelle