LoginSignup
20

More than 5 years have passed since last update.

bash history から特定のコマンド履歴を削除する

Last updated at Posted at 2017-03-03

履歴番号を指定して履歴削除する

パスワードを平文でコマンドラインに書いた場合など、狙い撃ちで履歴から削除したい場合がある.

history -10
history -d 履歴番号
  • 直近10個のコマンド履歴を表示して履歴番号を確認し、番号を指定して削除する.

特定パターンを履歴削除する

これが、この記事の本題.
grep、diff、less、man、git status、git log などの内容確認や状況確認コマンドは、セッション中は履歴に残して Ctrl+R や Ctrl+P で再利用したいが、仕事が終われば作業記録上のゴミである. そこで履歴をファイルに書き出し、egrep -v で不要なパターンを除去して、その結果を履歴に読み込むことで履歴から削除する. この一連の作業をシェルスクリプトにしたいところだが、履歴はシェル環境に保持されており、シェルスクリプトは実行開始時にシェル環境を複製し、終了時に破棄してしまうので不適切. そこでシェル関数として作成し、それを ~/.bashrc に直接書くか、関数記述ファイルを ~/.bashrc から source で取り込む.

function.sh

histclean()
{
  # save current history to $HISTFILE.
  history -w
  if [ "$1" == "-e" ]; then
    # edit history
    ${EDITOR:-vi} $HISTFILE
    history -c && history -r $HISTFILE
  else
    # remove status check commands from history.
    local new=$(mktemp)
    command egrep -vw \
      -e '^(ls|ll|lt|la|l|h|[ef]?grep|ps|diff|less|man|help|histclean)' \
      -e '^git (status|show|grep|diff.*|log.*|[a-z]l|st|ss|crlf)' \
      $HISTFILE > $new
    history -c && history -r $new && history -w
    command rm $new
  fi
}
  • egrep に与える除外パターンはお好みで調整する.
  • -e オプション指定時は、エディタで履歴ファイルを編集する.

全履歴を消す

過去のコマンド履歴を全て忘れたい.

history -c && history -w
  • history -w を忘れると、今回セッションの履歴は消えるが、前回セッションの履歴は残るかもしれない.
  • ログアウト処理で $HISTFILE への書き戻しをどのようにしているのかに依存する.

最初から履歴に入れないための設定

ここから先は、改めて書くことでもないが、網羅的な資料としたいのであえて記す.
履歴用の変数を設定することで、履歴対象から外すことができる. 設定は ~/.bashrc に記入すればOK.

重複コマンドなどを履歴に残さない

~/.bashrc
HISTCONTROL=ignoreboth
  • 直前と同じコマンドは履歴に残さない.
  • コマンド行の先頭に空白を入れると履歴に残さない.

指定したパターンに合致するコマンドを履歴に残さない

~/.bashrc
HISTIGNORE='?:??:???:exit'
  • 履歴に残したくないパターンをコロンで区切って記述する. 上記の例では1~3文字のみのコマンド(ls,cd,pwd 等)および、exit を除外指定している.

【おまけ】コマンド実行日時を履歴に記録する設定

~/.bashrc
HISTTIMEFORMAT='%F %T '
  • 設定する書式は strftime と同じ。詳細は man strftime

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20