Bash
Linux
CentOS
shell
Linuxコマンド

historyコマンドの実行日時のフォーマットについて

More than 3 years have passed since last update.


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