Frage Das Datum für eine bestimmte Shell-Sitzung fälschen


Ich versuche hier sicherlich etwas Seltsames zu erreichen, aber ich möchte das Datum lokal für eine Shell-Sitzung unter GNU / Linux fälschen. Ich muss einen Black-Box-Test durchführen, wie sich ein Programm an verschiedenen Daten verhält, und das Ändern des systemweiten Datums kann unerwünschte Nebenwirkungen haben (Cron-Jobs, vermischte Logs usw.).

Irgendwelche Ideen ?


20
2018-05-04 10:56


Ursprung




Antworten:


Sie können einfach ausführbare Dateien verwenden faketime (von Ubuntu-Repositories sudo apt-get install faketime) durch:

faketime -f "-15d" date

Oder sogar falsche Zeit in der ganzen Hülle von

faketime -f "-15d" bash -l

17
2018-01-09 13:03



Kyle Brant hat so ziemlich diese Antwort gepostet zurück im Jahr 2010. Bitte bearbeiten Ihre Antwort auf etwas, das es wesentlich von den vorhandenen Antworten unterscheidet. - α CVn
Meine Lösung ist viel einfacher als die Verwendung des Bibliotheks-Preloads, da Kyle Brant antwortet, da der Speicherort der Datei libfaketime .so sehr spezifisch ist und von der Linux-Distribution und den Paket-Managern abhängt. - abonec
@ MichaelKjörling Diese Antwort ist nicht die gleiche wie Kyle Brants.
@ MichaelKjörling Diese Antwort ist wesentlich einfacher als die von Kyle Brant. - Ken Sharp


Habe das noch nicht ausprobiert. Aber wenn dies aktuell ist, sieht es so aus, als hätte jemand bereits die Bibliothek geschrieben, die Sie vorab laden können libfunkzeit.

Die grundlegende Verwendung ist:

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

Sie können verwenden ltrace um sicherzustellen, dass alle Zeitfunktionen, die Ihre Anwendung verwendet, abgedeckt sind.


29
2018-05-04 13:36



libfaktime ist einfach perfekt, danke! - nicoulaj


Sie können die TZ-Variable auf einen Oddball-Wert setzen.

$ 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

6
2018-05-04 11:26



Kluger Trick, aber es ändert nur die Zeitzone, so dass Sie auf [-12 Stunden, + 11 Stunden] Reichweite beschränkt sind. - nicoulaj
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, `TZ = 'UTC + 120: 00' Datum Sat 4. August 09:00:47 UTC 2018, TZ = 'UTC-120: 00' Datum Tue Aug 14 09:01:41 UTC 2018`. Ungefähr + - eine Woche. - phil pirozhkov


Möglicherweise können Sie eine Bibliothek mit einer Alternative vorab laden time() Implementierung.


3
2018-05-04 11:24



Abhängig davon, wie die Programme auf die aktuelle Zeit zugreifen, müssen Sie möglicherweise alternative Implementierungen von gettimeofday, clock_gettime und / oder möglicherweise auch anderen vorab laden, aber ja, ich habe diesen Ansatz mit Erfolg zuvor verwendet. - Kjetil Joergensen
Es ist ein Java-Programm und es scheint gut mit libfaketime zu funktionieren. - nicoulaj