Làm giả ngày cho một phiên shell cụ thể


30

Tôi chắc chắn đang cố gắng đạt được điều gì đó kỳ lạ ở đây, nhưng tôi muốn giả mạo ngày cục bộ cho một phiên shell trên GNU / Linux. Tôi cần kiểm tra hộp đen cách chương trình hoạt động vào các ngày khác nhau và sửa đổi ngày trên toàn hệ thống có thể có tác dụng phụ không mong muốn (công việc định kỳ, nhật ký sai, v.v.).

Có ý kiến ​​gì không?

Câu trả lời:


27

Bạn chỉ có thể sử dụng tệp thực thi faketime(từ kho ubfox sudo apt-get install faketime) bằng cách:

faketime -f "-15d" date

Hoặc thậm chí giả thời gian trong toàn bộ vỏ bởi

faketime -f "-15d" bash -l

1
Kyle Brant đã đăng khá nhiều câu trả lời này vào năm 2010 . Vui lòng chỉnh sửa câu trả lời của bạn để mở rộng về nó theo một cách nào đó làm cho nó khác biệt đáng kể với các câu trả lời hiện có.
một CVn

5
Giải pháp của tôi dễ dàng hơn nhiều so với việc sử dụng tải trước thư viện như Kyle Brant đã trả lời vì vị trí của tệp libfaketime .so rất cụ thể và phụ thuộc vào trình quản lý gói và phân phối linux.
abonec

3
@ MichaelKjorling Câu trả lời này hoàn toàn không giống với Kyle Brant.

1
@ MichaelKjorling Câu trả lời này dễ hơn đáng kể so với Kyle Brant.
Ken Sharp

29

Chưa thử cái này bao giờ. Nhưng nếu đây là hiện tại thì có vẻ như ai đó đã viết thư viện, bạn có thể tải trước bằng libfaketime .

Cách sử dụng cơ bản là:

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

Bạn có thể sử dụng ltraceđể đảm bảo tất cả các chức năng thời gian mà ứng dụng của bạn được bảo hiểm.


7

Bạn có thể đặt biến TZ thành giá trị lẻ.

$ 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
Thủ thuật thông minh, nhưng nó chỉ sửa đổi múi giờ, vì vậy cách này bạn bị giới hạn trong phạm vi [-12 giờ, + 11 giờ].
nicoulaj

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, `TZ = 'UTC + 120: 00' ngày Sat ngày 8 tháng 8 09:00:47 UTC 2018 , TZ = 'UTC-120: 00' ngày Thứ ba 14 tháng 8 09:01:41 UTC 2018`. Khoảng + - một tuần.
phil pirozhkov

3

Bạn có thể tải trước một thư viện có time()triển khai thay thế .


1
Tùy thuộc vào cách chương trình truy cập thời gian hiện tại, bạn có thể phải tải trước các triển khai thay thế của gettimeofday, clock_gettime và / hoặc có thể cả những người khác nữa, nhưng vâng, tôi đã sử dụng phương pháp này thành công trước đây.
Kjetil Joergensen

Đây là một chương trình Java và dường như nó hoạt động tốt với libfaketime.
nicoulaj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.