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 ?

nicoulaj
quelle

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
abonec
quelle
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.

Kyle Brandt
quelle
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
Bis auf weiteres angehalten.
quelle
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.

Douglas Leeder
quelle
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