historyにコマンド実行日時を保存するには
まずは historyコマンドでコマンドの実行日時を保存する方法を軽く説明します。
環境変数 HISTTIMEFORMAT が設定されていて、かつその値が null でない場合は ~/.bash_history
にコマンド実行日時がタイムスタンプで保存されます。
つまり、export HISTTIMEFORMAT="%F %T "
と実行すれば ~/.bash_history
に実行したコマンドの日時の情報(タイムスタンプ)が保存されるようになります。
export HISTTIMEFORMAT="%F %T "
は毎回ログインしたときに実行が必要です。もちろん毎回実行するのは面倒なので ~/.bash_profile
にでも書き込んでおきましょう。全ユーザに対して実行させたいときは /etc/profile
にでも書いておきましょう。個人的には /etc/profile.d/history.sh
に書き込むのがすっきりしていて好きです。
ちなみに HISTTIMEFORMAT が設定されていなかったときに実行された過去のコマンドの実行日時はどうやっても知ることはできません。
コマンド実行日時のフォーマット
さてこの historyコマンドの実行時間のフォーマットですが strftime によって任意のフォーマットに整形されて hitoryコマンドに出力されます。
"%F %T"
なら 2016-02-05 18:05:40
に整形されます。
つまり、
結局 HISTTIMEFORMAT で指定できるフォーマットは strftime と同じ。なので strftime のマニュアルを見るべし。
ということです。
strftime のフォーマットは下記のリンクをチェックすると良いでしょう。
http://www.agr.unideb.hu/~agocs/informatics/11_e_unix/unixhelp/unixhelp.ed.ac.uk/CGI/man-cgie064.html?strftime+3
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strftime.3.html
おまけ
せっかくなのでおすすめのフォーマットを紹介しましょう。
RFC822形式(曜日, 日 月 年 時:分:秒 タイムゾーン)
HISTTIMEFORMAT="%a, %d %b %Y %H:%M:%S %z " history
#=> 1054 金, 05 2月 2016 18:28:27 +0900 ls -ltr
シンプル
HISTTIMEFORMAT="%Y/%m/%d(%a) %T " history
#=> 1054 2016/02/05(金) 18:28:27 ls -ltr
大河ドラマっぽく
HISTTIMEFORMAT="%EY %Om月%Od日 %a %OH時%OM分%OS秒 仕り候 " history
#=> 1054 平成28年 二月五日 金 十八時二十八分二十七秒 仕り候 ls -ltr
改行を使ってみました
HISTTIMEFORMAT="%c %n------------------------------------ " history
#=> 1054 2016年02月05日 18時28分27秒
#=> ------------------------------------ ls -ltr