특정 쉘 세션의 날짜를 가짜


30

나는 여기서 이상한 것을 달성하려고 노력하고 있지만 GNU / Linux에서 쉘 세션을 위해 날짜를 로컬로 가짜로 만들고 싶다. 프로그램이 다른 날짜에 작동하는 방식을 블랙 박스 테스트해야하며 시스템 전체 날짜를 수정하면 원하지 않는 부작용 (크론 작업, 엉망 진 로그 등)이 발생할 수 있습니다.

어떤 아이디어?

답변:


27

다음과 같이 실행 파일을 사용할 수 있습니다 faketime(우분투 리포지토리에서 sudo apt-get install faketime).

faketime -f "-15d" date

또는 전체 쉘에서 가짜 시간

faketime -f "-15d" bash -l

1
Kyle Brant는 2010 년 에이 답변을 거의 다시 올렸습니다 . 제발 편집 기존의 답변에서이 실질적으로 다른 점은 어떤 방법으로 그것을 확장 답변을.
CVn

5
Kyle Brant가 대답 한 것처럼 libfaketime .so 파일의 위치는 매우 구체적이며 Linux 배포 및 패키지 관리자에 따라 다르므로 내 솔루션은 라이브러리 사전로드를 사용하는 것보다 훨씬 쉽습니다.
abonec

3
@ MichaelKjörling이 답변은 Kyle Brant와 전혀 다릅니다.

1
@ MichaelKjörling이 답변은 Kyle Brant보다 훨씬 쉽습니다.
Ken Sharp

29

아직 시도하지 않았습니다. 그러나 이것이 최신이라면 누군가가 이미 라이브러리를 작성한 것처럼 보입니다 .libfaketime으로 미리로드 할 수 있습니다 .

기본 사용법은 다음과 같습니다.

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

당신은 사용할 수 ltrace있는지 모든 응용 프로그램 사용이 적용되는 시간 기능을 할 수 있습니다.


7

TZ 변수를 홀수 볼 값으로 설정할 수 있습니다.

$ 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
영리한 트릭이지만 시간대 만 수정하므로 [-12 시간, +11 시간] 범위로 제한됩니다.
nicoulaj

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018,`TZ = 'UTC + 120 : 00'날짜 토요일 8 월 4 일 09:00:47 UTC 2018 , TZ = 'UTC-120 : 00'날짜 화요일 8 월 14 일 09:01:41 UTC 2018`. 대략 +-일주일.
phil pirozhkov

3

대체 time()구현 이있는 라이브러리를 사전로드 할 수 있습니다 .


1
프로그램이 현재 시간에 액세스하는 방법에 따라 gettimeofday, clock_gettime 및 / 또는 기타의 대체 구현을 미리로드해야 할 수도 있지만 예, 이전에는이 ​​방법을 성공적으로 사용했습니다.
Kjetil Joergensen

Java 프로그램이며 libfaketime과 잘 작동하는 것 같습니다.
nicoulaj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.