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

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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