แกล้งทำวันที่สำหรับเปลือกเซสชั่นที่เฉพาะเจาะจง


30

แน่นอนฉันพยายามที่จะบรรลุสิ่งที่แปลกที่นี่ แต่ฉันต้องการปลอมวันที่ในท้องถิ่นสำหรับเซสชั่นเปลือกบน GNU / Linux ฉันต้องทดสอบแบบกล่องดำว่าโปรแกรมทำงานในวันที่ต่างกันอย่างไรและการแก้ไขวันที่ทั่วทั้งระบบอาจมีผลข้างเคียงที่ไม่พึงประสงค์ (งาน cron, บันทึกไฟล์ที่ยุ่งเหยิง ฯลฯ )

ความคิดใด ๆ

คำตอบ:


27

คุณสามารถใช้ไฟล์ปฏิบัติการfaketime(จากที่เก็บ Ubuntu sudo apt-get install faketime) โดย:

faketime -f "-15d" date

หรือแม้กระทั่งเวลาปลอมในเปลือกทั้งหมดด้วย

faketime -f "-15d" bash -l

1
ไคล์ตัวผู้โพสต์สวยมากคำตอบนี้กลับในปี 2010 โปรดแก้ไขคำตอบของคุณเพื่อขยายในบางวิธีที่ทำให้แตกต่างจากคำตอบที่มีอยู่
CVn

5
โซลูชันของฉันนั้นง่ายกว่าการใช้ไลบรารี่ที่โหลดล่วงหน้าอย่างที่ Kyle Brant ตอบเพราะตำแหน่งของไฟล์ libfaketime. so มีความเฉพาะเจาะจงมากและขึ้นอยู่กับการแจกจ่าย linux และตัวจัดการแพ็คเกจ
abonec

3
@ MichaelKjörlingคำตอบนี้ไม่เหมือนกับของ Kyle Brant

1
@ MichaelKjörlingคำตอบนี้ง่ายกว่าของ Kyle Brant อย่างมาก
เคนชาร์ป

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' วันที่ Sat 4 ส.ค. 09:00:47 UTC 2018 , TZ = 'UTC-120: 00' date วันที่อ. ส.ค. 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.