Bash 履歴ファイルから特定の行を削除する

Bash 履歴ファイルから特定の行を削除する

historyのデータベースから特定の行を削除するにはどうすればよいですか?

答え1

history -a現在の履歴がディスクにコミットされるように、ログアウトして再度ログインするか、実行する必要があります。

次に、ファイルを編集します~/.bash_history

答え2

コマンドラインを使用して履歴ファイルから削除するには、次の 2 つの手順を実行します。

  1. 入力すると、history -d <line_number>メモリ内の履歴から指定された行が削除されます。
  2. 入力すると、history -w現在のメモリ内の履歴が~/.bash_historyファイルに書き込まれます。

2つのステップを組み合わせることで、メモリ内の行を永久に削除します。歴史そして、.bash_履歴ファイルも同様です。

答え3

防ぐそもそもコマンドが履歴に追加されないようにするには、環境変数のHISTCONTROLコロンで区切られた値の中に値 が含まれていることを確認してくださいignorespace。たとえば、(たとえば を に追加します.bashrc)。

$ export HISTCONTROL=ignorespace

これにより、先頭にスペースがあるコマンドが履歴に追加されなくなります。その後、次のコマンドを実行して履歴を完全に消去できます。

$  history -c -w
  ^-- additional space character

答え4

いくつかのテクニック:

機密情報が履歴ファイルに保存されないようにする

コマンド ラインでパスワードを入力し、すべてのコマンドがログに記録されることに気付いた場合は、次のいずれかを実行できます。

  1. 履歴を保存せずに現在のセッションを強制終了します:

     kill -9 $$
    

    これにより、現在の履歴がすべて削除されます。

    1. 正しく指摘されているようにS0AndS0'コメントもう一つの方法は、履歴ファイル名:

      HISTFILE=
      
  2. ↑ (up arrow)開いているbashセッションで機密情報が表示されるまで入力し、 Ctrl+などの行編集キーストロークを使用してW機密情報を削除します。それから ↓ (down arrow)新しい空行がプロンプトされるまで、前に入力中Enter

履歴ファイルから機密情報を削除する

機密情報がすでに保存されていることに気づき、その情報だけを削除したいが、履歴全体は削除したくない場合は、次の手順を実行します。

簡単なsedコマンドでこの作業を実行できます:

sed -e '/SeNsItIvE InFo/d' -i .bash_history

ただし、これを入力すると、削除しようとしている検索パターン (機密情報) を含む別の履歴行が作成されます。そのため、次の操作を実行できます。

sed -e "/$(head -n1)/d" -i .bash_history

これは、ターミナルからの入力で実行されますhead -n1。ターミナルがハングしているように見えます (プロンプトは表示されません)。ファイルから削除したい情報を入力するだけです。これは、コマンド ラインに実際に入力せずにコマンド (の一部) を入力できるようにするトリックです。これにより、履歴レコードに含めることができなくなります。次に、sed入力したテキストを使用して、.bash_history 機密情報を含むすべての行を検索して削除します。注: 機密情報パターンにスラッシュが含まれている場合は、バックスラッシュでエスケープするか、sedパターンに表示されない区切り文字を指定するために、次の構文を使用するようにコマンドを変更する必要があります。

sed -e "\|$(head -n1)|d" -i .bash_history

別の方法としては、機密情報のみを削除し、その情報を含むコマンドは保持するという方法があります。このためには、機密情報を任意の代替テキストに置き換えるだけです。

sed -e "s/$(head -n1)/Santa Claus/g" -i .bash_history.

特定のツリー内のファイルから機密情報を削除する

最後に、これが別の忘れられたファイル:

SENSITIVEINFO="$(head -n1)"
find . -type f -print0 | xargs -0 grep -l "$SENSITIVEINFO"

関係するすべてのファイルを一覧表示します。

find . -type f -print0 |
    xargs -0 grep -lZ "$SENSITIVEINFO" |
    xargs -0 sed -e "s/$SENSITIVEINFO/Santa Claus/g" -i

は、 をルートとするディレクトリ ツリー内のすべてのファイル内の機密情報をすべて置き換えます.。注: このコマンドは を使用しますがxargs -0、名前に改行が含まれるファイルは処理されません。

関連情報