Udawanie daty konkretnej sesji powłoki


30

Z pewnością staram się tutaj osiągnąć coś dziwnego, ale chcę lokalnie sfałszować datę sesji powłoki w systemie GNU / Linux. Muszę przetestować czarną skrzynkę, jak program zachowuje się w różnych terminach, a modyfikacja daty systemowej może mieć niepożądane skutki uboczne (zadania crona, pomieszane logi itp.).

Jakieś pomysły ?

Odpowiedzi:


27

Możesz po prostu użyć pliku wykonywalnego faketime(z repozytoriów ubuntu sudo apt-get install faketime) przez:

faketime -f "-15d" date

Lub nawet fałszywy czas w całej skorupce

faketime -f "-15d" bash -l

1
Kyle Brant opublikował prawie tę odpowiedź w 2010 roku . Proszę edytować swoją odpowiedź, aby rozwinąć na niej w jakiś sposób, który sprawia, że znacznie różni się od dotychczasowych odpowiedzi.
— CVn

5
Moje rozwiązanie jest znacznie łatwiejsze niż korzystanie z wstępnego ładowania bibliotek, ponieważ Kyle Brant odpowiedział, ponieważ lokalizacja pliku .so libfaketime jest bardzo specyficzna i zależy od dystrybucji linuksa i menedżerów pakietów.
— abonec

3
@ MichaelKjörling Ta odpowiedź wcale nie jest taka sama jak Kyle Brant.

1
@ MichaelKjörling Ta odpowiedź jest znacznie łatwiejsza niż odpowiedź Kyle'a Brant'a.
— Ken Sharp,

29

Jeszcze tego nie wypróbowałem. Ale jeśli jest to aktualne, wygląda na to, że ktoś już napisał bibliotekę, którą można wstępnie załadować z libfaketime .

Podstawowym zastosowaniem jest:

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

Możesz użyć, ltraceaby upewnić się, że wszystkie funkcje czasowe używane przez aplikację są objęte gwarancją.


7

Możesz ustawić zmienną TZ na nieparzystą wartość.

$ 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
Sprytna sztuczka, ale modyfikuje ona tylko strefę czasową, więc w ten sposób jesteś ograniczony do zakresu [-12 godzin, + 11 godzin].
— nicoulaj

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, data „TZ = 'UTC + 120: 00” sob. 4 sierpnia 09:00:47 UTC 2018 , TZ = data „UTC-120: 00” wtorek 14 09:01:41 UTC 2018`. Z grubsza + - jeden tydzień.
— phil pirozhkov,

3

Być może będziesz mógł wstępnie załadować bibliotekę, która ma alternatywną time()implementację.


1
W zależności od tego, w jaki sposób program (programy) uzyskuje dostęp do aktualnego czasu, może być konieczne wstępne załadowanie alternatywnych implementacji gettimeofday, clock_gettime i / lub ewentualnie innych, ale tak, wcześniej z powodzeniem stosowałem to podejście.
— Kjetil Joergensen

Jest to program Java i wydaje się, że działa dobrze z libfaketime.
— nicoulaj
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.