historyコマンドで表示される、コマンドの実行履歴を削除する方法です。
Linuxでコマンドを実行する際、パスワードなどを引数に指定して実行すると、そのままだと「history」コマンドで表示される実行履歴に大切なパスワードが残ってしまいます。
コマンドの実行履歴にパスワードが表示されてしまうのは、セキュリティ的に好ましくありません。
今回は、特定のコマンド履歴や、全ての履歴を削除したい場合に使える「2つの方法」を紹介します。
- historyコマンドのオプションを使って削除する方法
- ~/.bash_historyファイルを直接編集して削除する方法
historyコマンドを使って削除する方法
「history」コマンドに「-d」オプションと削除したい履歴の「番号」を指定することで、特定の履歴だけを削除することができます。
「history -d」を実行しただけでは、メモリ上の履歴が消えただけで、まだファイルには反映されていません。
そのため、「-w」オプションを使って、変更内容を履歴ファイル(~/.bash_history)にしっかりと書き込ませる必要があります。
history -d 番号 history -w
※この方法では、「履歴を削除した」というコマンド自体の履歴は残る点に注意してください。
特定の履歴を削除する手順例
まず、「history」コマンドで履歴を表示させ、削除したい番号を確認します。
$ history
1 ls
2 vi test.txt
3 cp -p test.txt test_2.txt
4 mysqldump --single-transaction -upassw0rd root -p wordpress > wordpress_$(date +%Y%m%d-%H%M%S).sql
5 history
パスワードが含まれている4番の履歴を削除します。
$ history -d 4 $ history -w
「history」コマンドで履歴を表示すると、指定した4番の履歴(mysqldumpコマンドの履歴)が削除されていることが確認できます。
$ history
1 ls
2 vi test.txt
3 cp -p test.txt test_2.txt
4 history
5 history -d 4
6 history -w
7 history
指定した番号の履歴が消えて、それ以降の履歴番号が繰り上がっているのが確認できます。
また、履歴を削除した「history -d 4」や、ファイルに書き込んだ「history -w」情報もしっかり記録されています。
全ての履歴を削除
コマンドの実行履歴を全て消去したい場合は「history」コマンドに「-c」オプションを指定して実行します。
こちらの場合も「-w」オプションを使用して、変更内容を履歴ファイル(~/.bash_history)に書き込むのを忘れないようにしてください。
history -c history -w
削除の確認プロンプトなどは出ず、実行すると問答無用で全ての履歴を削除してしまうので注意してください。
履歴を全て削除する手順例
では実際に履歴を全て削除してみます。
$ history -c $ history -w
実行後に履歴を確認すると全ての履歴が削除されて、ファイルに履歴を書き込むための「history -w」と履歴を確認するために実行した「history」のみが表示されています。
$ history
1 history -w
2 history
履歴ファイル(.bash_history)を直接編集して削除する方法
Bashのコマンド実行履歴は、ユーザのホームディレクトリにある「.bash_history」ファイルに記録されています。
この「~/.bash_history」をエディタで直接編集することでも、コマンドの実行履歴を削除することができます。
※「~/」はユーザのホームディレクトリを意味します。
$ vi ~/.bash_history
この方法を使えば、「history -dを実行した」という履歴すら残したくない場合に、過去のログを綺麗に削除することができます。
ただし、現在ログイン中のセッションで行った操作はまだファイルに書き込まれていない場合があります。
その場合は、「history -w」でファイルに履歴を書き込んでから作業を行ってください。
ファイル編集後に変更結果を反映させる方法
「~/.bash_history」を編集しただけでは、現在ログインしている画面(メモリ上)には古い履歴が残ったままになってしまいます。
編集した内容を現在の画面にも反映させるには、「history -c」コマンドでメモリにキャッシュされている編集前の古い履歴を消去したあとに、「history -r」コマンドで編集後のファイル内容を新しくメモリ上に読み込ませる必要が有ります。
$ history -c $ history -r
コメント