bash履歴で「history -d」を非表示にします


14

誤ってパスワードまたはbashで機密性の高いものを入力した場合、その行を簡単に削除できますがhistory -d ROW#、常にhistory -d ROW#誰かが間違いを修正したことを示すコマンドが履歴に残ります。

コマンドに何かを追加して、bash履歴に表示されないようにできますか?

回答:


27

単一のコマンドを履歴に保存しないようにするには、その前にスペースを付けてください(ここでマークされています):

$ 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 言う:

HISTCONTROL
コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト。値のリストが含まれている場合 ignorespaceを空白文字で始まる行は履歴リストに保存されませんignoreupsの値により 、前の履歴エントリに一致する行は保存されません。ignorebothの値は 、ignorespaceおよびignoreupsの省略形です。

ignoredupsちなみにhistory | tail -n2、上記のテストで履歴に一度しか表示されないのはそのためです。


端末の履歴は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

最後に、私は、デフォルトの区切り文字を変更/する_ことで、これはに等しく、それは検索語の内部で使われていますようsed -i '/\/path\//d' .bash_history。コマンドが削除する行のみを出力する場合、-iオプションを追加し、削除を実行するように変更!ddます。

                                   # 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

12

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*'

6

あなたはできる

  • 端末ウィンドウを閉じます。これにより、(他のウィンドウを閉じた後)最後に閉じたターミナルウィンドウの最新の履歴がファイルにフラッシュされます。/home/$USER/.bash_history

  • を使用/home/$USER/.bash_historyせずにファイル編集します。bashたとえば、お気に入りのエディターをAlt+F2

    このようにして、履歴全体を検査し、もはやそこにいたくないコマンドを削除できます。

    ここに画像の説明を入力してください

    ここに画像の説明を入力してください


1

私は通常使用します:

history -w; history -c; $EDITOR $HISTFILE; history -r

履歴ファイルはディスクに書き込まれ、メモリでクリアされ、編集して目的の操作を行い、編集した履歴ファイルが再び読み込まれます。

編集者がバックアップファイルを保存する場合、いたずらな言葉がディスク上に表示される可能性があることに注意してください。

-dを使用する別のオプションは、予測履歴番号を使用することです。

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

この例では、悪いものを削除し、履歴番号を取得するコマンドを削除してから、履歴の削除に使用したコマンドを削除します。その後、すべてが消毒されます。


0

履歴に保存せずにコマンドを実行する場合は、余分なスペースを追加してください

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

これが機能するには、HISTCONTROLでignorespaceまたはignorebothのいずれかが必要です。たとえば、実行

HISTCONTROL = ignorespaceこの設定を永続的にするには、.bashrcに設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.