ブログトップ 記事一覧 ログイン 無料ブログ開設

理想未来はどうなった? このページをアンテナに追加 RSSフィード Twitter

2010-10-18

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


関連記事

[Linux]ファイルの種類をチェックする - fileコマンド
[Linux]CTRL + ALT + DELELEによる再起動を無効にする
[Linux]メモリオーバーコミット
[Linux]スワップ領域の操作 mkswap / swapon / swapoff
[Apple][Mac OS X]Mac OS X 10.7はLion? Appleが10月20日(水)に次期OS発表イベントを開催