誤ってパスワードまたはbashで機密性の高いものを入力した場合、history -d ROW#
を使用してその行を簡単に削除できますが、履歴にhistory -d ROW#
コマンドが常に残され、誰かが間違いを修正したことを示します。
コマンドに何かを追加して、bash履歴に表示されないようにできますか?
履歴に単一のコマンドを保存しないようにするには、その前にスペースを置きます(ここで␣
でマークされています):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
この動作は~/.bashrc
ファイル、つまり次の行で設定されます。
HISTCONTROL=ignoreboth
man bash
言います:
ヒストコントロール
コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト。値のリストにignorespaceが含まれる場合、スペース文字で始まる行は履歴リストに保存されません。 ignoredupsの値は、前の履歴エントリに一致する行を保存しません。 ignorebothの値は、ignorespaceおよびignoredups。
ちなみに、ignoredups
は、上記のテストでhistory | tail -n2
が履歴に1回しか表示されない理由です。
端末の履歴はRAMに保存され、端末を閉じるとすぐに~/.bash_history
にフラッシュされます。 ~/.bash_history
から特定のエントリを削除する場合は、sed
を使用して削除できます。
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
最後の1つでは、デフォルトの区切り文字/
を検索用語内で使用されるため、_
に変更しました。実際、これはsed -i '/\/path\//d' .bash_history
と同じです。コマンドが削除する行のみを出力する場合は、-i
オプションを追加し、!d
をd
に変更して削除を実行します。
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere
1つの方法は、HISTIGNORE
環境変数を設定することです。 man bash
から
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the com‐
plete line (no implicit `*' is appended). Each pattern is
tested against the line after the checks specified by HISTCON‐
TROL are applied.
[FWIW、それはデフォルトのHISTCONTROL
であり、前置き型の回避策を提供します]。
だから、例えば
HISTIGNORE='history -d*'
永続的にする場合は、~/.bashrc
からエクスポートします
export HISTIGNORE='history -d*'
私は通常使用します:
history -w; history -c; $EDITOR $HISTFILE; history -r
履歴ファイルはディスクに書き込まれ、メモリでクリアされます。編集して目的の操作を行い、編集した履歴ファイルが再び読み込まれます。
エディターがバックアップファイルを保存する場合、いたずらなWordがディスクに表示される可能性があることに注意してください。
-d
を使用するもう1つのオプションは、予測履歴番号を使用することです。
startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239 # bad thing
17240 history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239 # good thing
17240 # other thing
17241 history | tail -n 3
この例では、悪いものを削除し、履歴番号を取得するコマンドを削除してから、履歴の削除に使用したコマンドを削除します。その後、すべてが消毒されます。
履歴に保存せずにコマンドを実行する場合は、余分なスペースを追加してください
Prompt$ echo saved
Prompt$ echo not saved \
> # ^ extra space
これが機能するには、HISTCONTROLでignorespaceまたはignorebothのいずれかが必要です。たとえば、実行
HISTCONTROL = ignorespaceこの設定を永続的にするには、.bashrcに設定します。