Ich möchte einige Befehle ausführen, aber nicht im Befehlsverlauf speichern. Damit niemand in der Lage ist, es in der .bash_history
Datei zu suchen .
Gibt es eine Möglichkeit, Bash-Befehle auf diese Weise auszuführen?
Ich möchte einige Befehle ausführen, aber nicht im Befehlsverlauf speichern. Damit niemand in der Lage ist, es in der .bash_history
Datei zu suchen .
Gibt es eine Möglichkeit, Bash-Befehle auf diese Weise auszuführen?
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
#> 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
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!)
/dev/null
Berechtigungen beim Abmelden auf 0600 festgelegt wurden. Stattdessen habe ich verwendet unset HISTFILE
.
Eine Erweiterung der Antwort von @John Doe & @ user3270492. Aber das scheint für mich zu funktionieren.
<your_secret_command>; history -d $((HISTCMD-1))
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
Sie könnten in Betracht ziehen, eine Shell ohne Verlauf zu verwenden, wie vielleicht
/bin/sh << END
your commands without history
END
(vielleicht /bin/dash
oder /bin/sash
könnte angemessener sein als /bin/sh
)
oder noch besser das Batch- Dienstprogramm verwenden, z
batch << EOB
your commands
EOB
Die Geschichte würde dann enthalten sh
oder batch
was nicht sehr aussagekräftig ist
Sie können Ihre Sitzung mit beginnen
export HISTFILE=/dev/null ;history -d $(history 1)
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.
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 Sie echo $HISTFILE
(normalerweise ~/.bash_history
) den Speicherort der Verlaufsdatei abrufenunset HISTFILE
und bearbeiten ~/.bash_history
(oder was auch immer HISTFILE
war - natürlich ist es jetzt unset
so, 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!
unset HISTFILE; echo TEST; history
Gibt Ihnen den Befehl echo 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:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Ich denke, es ist ein sehr portabler Befehl.
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:
setopt histignorespace
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 :
# 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."'
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/null
und 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 ignorespace
Wert in der $HISTCONTROL
Umgebungsvariablen enthalten sein muss (man bash und suchen Sie ignorespace
nach weiteren Details).
Sie müssen nur ausführen:
$ set +o history
Um mehr zu sehen, führen Sie Folgendes aus:
$ man set
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
history -d $((HISTCMD-1)) && <Your Command Here>