
history
のデータベースから特定の行を削除するにはどうすればよいですか?
答え1
history -a
現在の履歴がディスクにコミットされるように、ログアウトして再度ログインするか、実行する必要があります。
次に、ファイルを編集します~/.bash_history
。
答え2
コマンドラインを使用して履歴ファイルから削除するには、次の 2 つの手順を実行します。
- 入力すると、
history -d <line_number>
メモリ内の履歴から指定された行が削除されます。 - 入力すると、
history -w
現在のメモリ内の履歴が~/.bash_history
ファイルに書き込まれます。
2つのステップを組み合わせることで、メモリ内の行を永久に削除します。歴史そして、.bash_履歴ファイルも同様です。
答え3
に防ぐそもそもコマンドが履歴に追加されないようにするには、環境変数のHISTCONTROL
コロンで区切られた値の中に値 が含まれていることを確認してくださいignorespace
。たとえば、(たとえば を に追加します.bashrc
)。
$ export HISTCONTROL=ignorespace
これにより、先頭にスペースがあるコマンドが履歴に追加されなくなります。その後、次のコマンドを実行して履歴を完全に消去できます。
$ history -c -w
^-- additional space character
答え4
いくつかのテクニック:
機密情報が履歴ファイルに保存されないようにする
コマンド ラインでパスワードを入力し、すべてのコマンドがログに記録されることに気付いた場合は、次のいずれかを実行できます。
履歴を保存せずに現在のセッションを強制終了します:
kill -9 $$
これにより、現在の履歴がすべて削除されます。
正しく指摘されているようにS0AndS0'コメントもう一つの方法は、履歴ファイル名:
HISTFILE=
↑ (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
、名前に改行が含まれるファイルは処理されません。