dateコマンドで現在時刻を騙す『libfaketime』

dateコマンドでは、「-d」で○○日後とか、□月後といった指定で日付を取得することが出来る。
しかし、特定の日付を指定した上で○○日後の日付を指定する事が出来ない。

もしdateコマンドで特定の日付の○○日後、次の○曜日といった指定をする場合、今回紹介する『libfaketime』を用いると便利だろう。
これは、dateコマンドが読み込む現在日時を変数「FAKETIME」とすることで、システム時刻に変更を加える事なく特定の日付をdateコマンドで出力させることが出来る。

1.インストール

まずはインストール。
以下コマンドを実行し、コンパイル・インストールを行う。

git clone https://github.com/wolfcw/libfaketime
cd libfaketime/
make
make install

2.日時を出力させる

次に、実際にどう使うのかについて記述する。
以下のように、インストールしたライブラリ「libfaketime.so.1」をLD_PRELOADに代入し、dateコマンド実行と同時に変数「FAKETIME」に特定の日時を入れるだけだ。

export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
FAKETIME='特定の日時' date

[root@test-centos7 libfaketime]# date
2015年 11月 30日 月曜日 22:15:44 JST
[root@test-centos7 libfaketime]#
[root@test-centos7 libfaketime]# date -d 'next sunday'
2015年 12月  6日 日曜日 00:00:00 JST
[root@test-centos7 libfaketime]#
[root@test-centos7 libfaketime]# export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
[root@test-centos7 libfaketime]# FAKETIME='2015-01-01 00:00:00' date
2015年  1月  1日 木曜日 00:00:00 JST
[root@test-centos7 libfaketime]#
[root@test-centos7 libfaketime]# FAKETIME='2015-01-01 00:00:00' date -d 'next sunday'
2015年  1月  4日 日曜日 00:00:00 JST

まぁ、あまり使うことはないような気もするけれどどこかで役に立ちそうな気がしなくもない。