Fälschung des Datums für eine bestimmte Shell-Sitzung


30

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

Irgendwelche Ideen ?

Antworten:


27

Sie können nur ausführbare Dateien faketime(aus Ubuntu-Repositorys sudo apt-get install faketime) verwenden, indem Sie:

faketime -f "-15d" date

Oder auch mal im ganzen Panzer durch fälschen

faketime -f "-15d" bash -l

1
Kyle Brant hat so ziemlich diese Antwort im Jahr 2010 gepostet . Bitte bearbeiten Sie Ihre Antwort, um sie auf eine Weise zu erweitern, die sie wesentlich von den vorhandenen Antworten unterscheidet.
ein

5
Meine Lösung ist viel einfacher als das Vorladen der Bibliothek, wie Kyle Brant antwortete, da der Speicherort der libfaketime .so-Datei sehr spezifisch ist und von der Linux-Distribution und den Paketmanagern abhängt.
abonec

3
@ MichaelKjörling Diese Antwort ist überhaupt nicht die gleiche wie die von Kyle Brant.

1
@ MichaelKjörling Diese Antwort ist deutlich einfacher als die von Kyle Brant.
Ken Sharp

29

Ich habe es noch nicht ausprobiert. Aber wenn dies aktuell ist, sieht es so aus, als ob jemand die Bibliothek bereits geschrieben hat, können Sie sie mit libfaketime vorladen .

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 ltracedamit sicherstellen, dass alle von Ihrer Anwendung verwendeten Zeitfunktionen abgedeckt sind.


7

Sie können die TZ-Variable auf einen ungeraden 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

1
Cleverer Trick, der jedoch nur die Zeitzone ändert. Auf diese Weise sind Sie auf den Bereich [-12 Stunden + 11 Stunden] beschränkt.
Nicoulaj

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, `TZ = 'UTC + 120: 00' Datum Sa Aug 4 09:00:47 UTC 2018 , TZ = 'UTC-120: 00' Datum Di Aug 14 09:01:41 UTC 2018`. Etwa + - eine Woche.
Phil Pirozhkov

3

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


1
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.
Kjetil Joergensen

Es ist ein Java-Programm und es scheint gut mit libfaketime zu funktionieren.
Nicoulaj
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.