bash 履歴の管理
bashの履歴管理に関するメモ
重複する履歴は記録しない
HISTCONTROLにignoredupsを指定する事で、二回以上連続実行したコマンドは履歴として記録しないようにすることが出来ます。
export HISTCONTROL=ignoredups
空白から始めたコマンドを保存しない
HISTCONTROLにignorespaceを指定する事で、空白から始めたコマンドは履歴として記録しないようにすることが出来ます。
export HISTCONTROL=ignorespace
ignoredupsとignorespaceを組み合わせる
ignoredupsとignorespaceを組み合わせで設定する場合は、HISTCONTROLにignorebothを設定します。
export HISTCONTROL=ignoreboth
特定の履歴は残さない
特定の履歴を残さないようにするにはHISTIGNOREを設定します。
export HISTIGNORE='history:ls*:ll*:fg*:bg*:pwd'
履歴のサイズを指定する。
履歴はサイズはHISTSIZEおよびHISTFILESIZEで設定します。
HISTSIZE=40000 HISTFILESIZE=40000
コマンドを実行したタイムスタンプを記録する
デフォルトの状態ではコマンドを実行した時刻まで表示することができません。
historyでコマンドを実行した時間を調べれるようにするには、HISTTIMEFORMATを設定します。
HISTTIMEFORMAT="%y/%m/%d %H:%M:%S : "
複数端末間でコマンド履歴を共有する
端末を同時に複数立ち上げていると、端末間で履歴の共有ができなくて不便です。
下記のサイトに複数端末間でコマンド履歴を共有する方法が記載されています。
iandeth. - bashにて複数端末間でコマンド履歴(history)を共有する方法
function share_history { history -a history -c history -r } PROMPT_COMMAND='share_history' shopt -u histappend
古い履歴を纏める
bashを使い込むうちに だんだんと.bash_historyが長くなってきます。
又、実行したコマンドの重複も増えてきますので見通しが悪くなります。
そこで古い履歴をまとめるスクリプトを作成してみました。
.bash_profileなどに記載してログイン時に実行すると良いかと思います。
#毎回行わず前回纏めてから1日以上経過している時に整理を行う。 if [ ! -f ~/.bash_history~ -o "`find ~/.bash_history~ -type f -mtime +1 2> /dev/null`" != "" ]; then #整理を行う前にバックアップを取っておく cp -fp ~/.bash_history ~/.bash_history~ FIRSTHALF=~/.bash_history_firsthalf LASTHALF=~/.bash_history_lasthalf HISTTIME=0 # 90日以前の履歴を纏める TIMELIMIT=`expr \`date '+%s'\` - 86400 \* 90` OUTFILE=${FIRSTHALF} rm -f ${LASTHALF} ${FIRSTHALF} # .bash_history を90日より前の履歴と90日以内の履歴に分ける。 # 90日より前の履歴はタイムスタンプを削除する while read LINE do FIRSTCHAR=${LINE:0:1} if [ "${FIRSTCHAR}" = "#" ]; then HISTTIME=${LINE#\#} if [ ${HISTTIME} -gt ${TIMELIMIT} ]; then OUTFILE=${LASTHALF} echo ${LINE} >> ${OUTFILE} fi else echo ${LINE} >> ${OUTFILE} fi done < ~/.bash_history # 90日以前の履歴はソートを行った上でuniqなものだけ残す cat ${FIRSTHALF} | sort | uniq > ~/.bash_history cat ${LASTHALF} >> ~/.bash_history rm -f ${FIRSTHALF} ${LASTHALF} fi