伪造特定Shell会话的日期


30

我当然想在这里取得一些成就,但是我想在本地为GNU / Linux上的shell会话伪造日期。我需要对程序在不同日期的行为进行黑盒测试,并且修改系统范围的日期可能会带来不良的副作用(定时作业,混乱的日志等)。

有任何想法吗 ?

Answers:


27

您可以通过以下方式使用可执行文件faketime(来自ubuntu存储库sudo apt-get install faketime):

faketime -f "-15d" date

甚至假装整个外壳中的时间

faketime -f "-15d" bash -l

1
凯尔·布​​兰特(Kyle Brant)早在2010年就发布了这个答案。请编辑您的答案以某种方式扩展它,使其与现有答案有很大不同。
CVn 2015年

5
我的解决方案比使用库预加载要容易得多,正如Kyle Brant回答的那样,因为libfaketime .so文件的位置非常具体,并且取决于linux发行版和软件包管理器。
abonec'1

3
@MichaelKjörling这个答案与Kyle Brant的答案完全不同。

1
@MichaelKjörling这个答案比Kyle Brant的答案容易得多。
肯·夏普

29

还没有尝试过这个。但是,如果这是最新的,则好像有人已经编写了库,则可以使用libfaketime预加载。

基本用法是:

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

您可以ltrace用来确保覆盖了应用程序所使用的所有时间功能。


7

您可以将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

1
巧妙的技巧,但它只会修改时区,因此您只能在[-12小时,+ 11小时]范围内使用。
nicoulaj 2010年

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018,`TZ ='UTC + 120:00'日期UTC 2018年8月4日星期六09:00:47 UTC 2018 , TZ ='UTC-120:00'日期UTC 2018年8月14日星期二09:01:41 UTC。大约+-一个星期。
菲尔·皮罗

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.