Falso la data per una specifica sessione di shell


30

Sto certamente cercando di ottenere qualcosa di strano qui, ma voglio falsificare la data localmente per una sessione di shell su GNU / Linux. Devo testare in black box il comportamento di un programma in date diverse e la modifica della data a livello di sistema può avere effetti collaterali indesiderati (lavori cron, registri incasinati, ecc.).

Qualche idea ?

Risposte:


27

Puoi semplicemente usare il file eseguibile faketime(dai repository ubuntu sudo apt-get install faketime):

faketime -f "-15d" date

O anche un tempo falso nell'intero guscio di

faketime -f "-15d" bash -l

1
Kyle Brant ha pubblicato praticamente questa risposta nel 2010 . Si prega di modificare la risposta di espandersi su di essa in qualche modo che lo rende sostanzialmente diverso dalle risposte esistenti.
un CVn

5
La mia soluzione è molto più semplice rispetto all'utilizzo del precarico della libreria come Kyle Brant ha risposto perché la posizione del file .so libfaketime è molto specifica e dipende dalla distribuzione di Linux e dai gestori dei pacchetti.
abonec,

3
@ MichaelKjörling Questa risposta non è affatto la stessa di Kyle Brant.

1
@ MichaelKjörling Questa risposta è significativamente più semplice di quella di Kyle Brant.
Ken Sharp,

29

Non l'ho ancora provato. Ma se questo è attuale sembra che qualcuno abbia già scritto la libreria, è possibile precaricare con libfaketime .

L'utilizzo di base è:

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

È possibile utilizzare ltraceper assicurarsi che tutte le funzioni temporali utilizzate dall'applicazione siano coperte.


7

È possibile impostare la variabile TZ su un valore dispari.

$ 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
Trucco intelligente, ma modifica solo il fuso orario, quindi in questo modo sei limitato a [-12 ore, + 11 ore].
nicoulaj,

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, `TZ = 'UTC + 120: 00' data sab 4 ago 09:00:47 UTC 2018 , TZ = 'UTC-120: 00' mar 14 ago 09:01:41 UTC 2018`. Circa + - una settimana.
phil pirozhkov,

3

Potresti essere in grado di precaricare una libreria con time()un'implementazione alternativa .


1
A seconda di come i programmi accedono all'ora corrente, potrebbe essere necessario precaricare implementazioni alternative di gettimeofday, clock_gettime e / o possibilmente anche altri, ma sì, ho già usato questo approccio con successo.
Kjetil Joergensen,

È un programma Java e sembra funzionare bene con libfaketime.
nicoulaj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.