Help us understand the problem. What is going on with this article?

history コマンドに日時を付与する

デフォルト

デフォルトの状態だと 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 ignorespaceignoredups の省略形
erasedups 現在の行と一致する履歴を保存前にすべて削除

上記のリストにない値は無視される。
HISTCONTROL が設定されていない、または有効な値が含まれていない場合、シェルパーサーが読み取ったすべての行は HISTIGNORE の値に従って履歴に保存される。
複数行の複合コマンドの2行目以降の行は検査されず、HISTCONTROL の値に関係なく履歴に追加される。 1

HISTFILE

コマンド履歴が保存されるファイル名。デフォルト値は ~/.bash_history になる。

HISTFILESIZE

履歴ファイルに含まれる行の最大数。この変数に値が割り当てられると、必要に応じて履歴ファイルが切り捨てられ、最も古いエントリを削除してその行数を超えないようにする。履歴ファイルはシェル終了時に書き込んだ後にこのサイズに切り捨てられる。
値が 0 の場合、履歴ファイルは 0 サイズに切り捨てられる。数値以外の値と 0 より小さい数値は切り捨てを禁止する。
シェルは、起動ファイルを読み込んだ後、デフォルト値を HISTSIZE の値に設定する。

HISTIGNORE

どのコマンドラインが履歴リストに保存されるべきかを決定づけるコロン区切りのパターンリスト。
各パターンは行頭に固定され、行と完全に一致する必要がある。(暗黙の * は付加されない)
各パターンは HISTCONTROL で指定されたチェックが適用された後、行に対して検査する。
通常のシェルパターン一致文字に加えて & は前の履歴行と一致する。& はバックスラッシュでエスケープできる。(マッチを試みる前にバックスラッシュは削除される。)
2行目以降の複数行の複合コマンドの行はテストされず、HISTIGNORE の値に関係なく履歴に追加される。

HISTIGNOREHISTCONTROL の機能を包含している。& のパターンは 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 コマンドで履歴出力などもあります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away