デフォルト
デフォルトの状態だと history
コマンドを打ってもいつ実行されたのか分かりません。
history
1 free -m
2 top
3 history
日時の追加
HISTTIMEFORMAT='%F %T '
を実行すると日時が追加されるようになります。
HISTTIMEFORMAT='%F %T '
history
1 2016-11-25 10:00:00 free -m
2 2016-11-25 10:00:00 top
3 2016-11-25 10:00:00 history
4 2016-11-25 11:00:00 HISTTIMEFORMAT='%F %T '
5 2016-11-25 11:00:00 history
永続化
これを永続化するために /etc/profile.d/history.sh に HISTTIMEFORMAT
を書き込みます。
その他デフォルトから変更した方がよいものを追記しておきます。
cat << "_EOF_" > /etc/profile.d/history.sh
# history initialization
HISTTIMEFORMAT='%F %T '
HISTSIZE=100000
HISTFILESIZE=100000
HISTIGNORE='history:pwd:ls:ls *:ll:w:top:df *' # 保存しないコマンド
HISTCONTROL=ignoreboth # 空白、重複履歴を保存しない
PROMPT_COMMAND='history -a; history -c; history -r' # 履歴のリアルタイム反映
_EOF_
項目 | 説明 | 例 |
---|---|---|
HISTTIMEFORMAT |
実行日時の書式設定 | |
HISTSIZE |
記録される実行コマンドの最大値 | |
HISTFILESIZE |
記録される実行コマンドの最大値 | |
HISTIGNORE |
履歴から除外するコマンド | |
HISTCONTROL |
ignoredups: 重複コマンドを無視 ignorespace: 空白で始まるコマンドを無視 ignoreboth: erasedups: 同一コマンドを無視 |
|
PROMPT_COMMAND |
HISTCONTROL
保存方法を制御するコロンで区切られた値のリスト。
値 | 内容 |
---|---|
ignorespace |
空白文字で始まる行を保存しない |
ignoredups |
以前の履歴と一致する行を保存しない |
ignoreboth |
ignorespace と ignoredups の省略形 |
erasedups |
現在の行と一致する履歴を保存前にすべて削除 |
上記のリストにない値は無視される。
HISTCONTROL
が設定されていない、または有効な値が含まれていない場合、シェルパーサーが読み取ったすべての行は HISTIGNORE
の値に従って履歴に保存される。
複数行の複合コマンドの2行目以降の行は検査されず、HISTCONTROL
の値に関係なく履歴に追加される。 1
HISTFILE
コマンド履歴が保存されるファイル名。デフォルト値は ~/.bash_history になる。
HISTFILESIZE
履歴ファイルに含まれる行の最大数。この変数に値が割り当てられると、必要に応じて履歴ファイルが切り捨てられ、最も古いエントリを削除してその行数を超えないようにする。履歴ファイルはシェル終了時に書き込んだ後にこのサイズに切り捨てられる。
値が 0
の場合、履歴ファイルは 0 サイズに切り捨てられる。数値以外の値と 0
より小さい数値は切り捨てを禁止する。
シェルは、起動ファイルを読み込んだ後、デフォルト値を HISTSIZE
の値に設定する。
HISTIGNORE
どのコマンドラインが履歴リストに保存されるべきかを決定づけるコロン区切りのパターンリスト。
各パターンは行頭に固定され、行と完全に一致する必要がある。(暗黙の *
は付加されない)
各パターンは HISTCONTROL
で指定されたチェックが適用された後、行に対して検査する。
通常のシェルパターン一致文字に加えて &
は前の履歴行と一致する。&
はバックスラッシュでエスケープできる。(マッチを試みる前にバックスラッシュは削除される。)
2行目以降の複数行の複合コマンドの行はテストされず、HISTIGNORE
の値に関係なく履歴に追加される。
HISTIGNORE
は HISTCONTROL
の機能を包含している。&
のパターンは ignoredups
と同じで、 [ ] *
のパターンは ignorespace
と同じになる。これらの2つのパターンを組み合わせてコロンで区切ると ignoreboth
の機能が提供される。
HISTSIZE
履歴リストで記憶されるコマンドの最大数。値が 0
の場合、コマンドは履歴リストに保存されない。
0
より小さい数値はすべてのコマンドが履歴リストに保存される。
シェルは起動ファイルを読み込んだ後、デフォルト値を 500
に設定する。
HISTTIMEFORMAT
この変数が設定され null
でない場合、その値は strftime
のフォーマット文字列として使用され、履歴ビルトインによって表示される各履歴エントリに関連付けられたタイムスタンプを出力する。
この変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれ、シェルセッション間で保存される可能性がある。これは履歴コメント文字 #
を使用して他の履歴行とタイムスタンプを区別する。
shopt
cmdhist
shopt -s cmdhist
設定されている場合、Bashは複数行のコマンドのすべての行を同じ履歴エントリに保存する。これにより複数行のコマンドを簡単に再編集できる。
histappend
shopt -s histappend
設定されている場合、履歴リストはファイルを上書きするのではなく、シェルが終了するときに HISTFILE
変数の値で指定されたファイルに追加される。
histreedit
shopt -s histreedit
設定され、Readline が使用されている場合、ユーザーは失敗した履歴置換を再編集する機会が与えられる。
histverify
shopt -s histverify
設定され、Readline が使用されている場合、履歴置換の結果は直ちにシェルパーサーに渡されない。代わりに、結果の行が Readline 編集バッファにロードされ、さらに変更が可能になる。
lithist
shopt -s lithist
これを有効にして cmdhist
オプションを有効にすると、可能な場合はセミコロン区切り記号を使用するのではなく、改行を埋め込んだ複数行コマンドが履歴に保存される。
その他
プロセスアカウンティングや script コマンドで履歴出力などもあります。