web-dev-qa-db-ja.com

特定のシェルセッションの日付を偽る

私は確かにここで奇妙な何かを達成しようとしていますが、GNU/Linuxのシェルセッションのローカルで日付を偽装したいと思います。プログラムが異なる日付でどのように動作するかをブラックボックスでテストする必要があります。システム全体の日付を変更すると、望ましくない副作用(cronジョブ、ログの乱れなど)が発生する可能性があります。

何か案は ?

33
nicoulaj

実行可能ファイルfaketimeを使用できます(ubuntuリポジトリからSudo apt-get install faketime) 沿って:

faketime -f "-15d" date

またはシェル全体の偽の時間でさえ

faketime -f "-15d" bash -l
31
abonec

これはまだ試していません。しかし、これが最新のものである場合は、誰かがすでにライブラリを書いたように見えます libfaketime でプリロードできます。

基本的な使用法は次のとおりです。

user@Host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" date
Mon Nov  8 12:01:12 CEST 2007

ltraceを使用して、アプリケーションが使用するすべての機能がカバーされていることを確認できます。

29
Kyle Brandt

TZ変数を奇数の値に設定できます。

$ date
Tue May  4 06:24:43 CDT 2010
$ date -u
Tue May  4 11:24:47 UTC 2010
$ export TZ='CDT-3:12'
$ date
Tue May  4 14:36:53 CDT 2010
$ export TZ='CDT+5:37'
$ date
Tue May  4 05:48:00 CDT 2010

代替のtime()実装を持つライブラリをプリロードできる場合があります。

3
Douglas Leeder