एक विशिष्ट शेल सत्र के लिए तारीख तय करना


30

मैं निश्चित रूप से यहां कुछ अजीब हासिल करने की कोशिश कर रहा हूं, लेकिन मैं जीएनयू / लिनक्स पर शेल सत्र के लिए स्थानीय रूप से तारीख को नकली करना चाहता हूं। मुझे ब्लैक-बॉक्स टेस्ट करने की आवश्यकता है कि एक प्रोग्राम अलग-अलग तारीखों में कैसे व्यवहार करता है, और सिस्टम-वाइड डेट को संशोधित करने से अवांछित दुष्प्रभाव हो सकते हैं (क्रॉन जॉब्स, गड़बड़ लॉग्स, आदि)।

कोई विचार ?

जवाबों:


27

आप बस निष्पादन योग्य faketime(ubuntu रिपॉजिटरी से sudo apt-get install faketime) का उपयोग कर सकते हैं :

faketime -f "-15d" date

या पूरे खोल में भी नकली समय

faketime -f "-15d" bash -l

1
काइल ब्रैंट ने इस जवाब को 2010 में वापस पोस्ट किया । कृपया अपने उत्तर को उस पर विस्तार करने के लिए संपादित करें जो इसे मौजूदा उत्तरों से काफी अलग बनाता है।
13

5
लाइब्रेरी प्रीलोड का उपयोग करने की तुलना में मेरा समाधान बहुत आसान है क्योंकि काइल ब्रेंट ने उत्तर दिया क्योंकि libfaketime का स्थान .so फ़ाइल बहुत विशिष्ट है और लिनक्स वितरण और पैकेज प्रबंधकों पर निर्भर करता है।
abonec

3
@ माइकलकजर्लिंग यह उत्तर काइल ब्रैंट के समान नहीं है।

1
@ माइकलकॉर्जलिंग यह उत्तर काइल ब्रैंट की तुलना में काफी आसान है।
केन शार्प

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 घंटे] सीमा तक सीमित हैं।
14

1
@nicoulaj date Thu Aug 9 12:12:50 CDT 2018, `TZ = 'UTC + 120: 00' दिनांक Sat Aug 4 09:00:47 UTC 2018 , TZ = 'UTC-120: 00' तिथि Tue 14 अगस्त 09:01:41 UTC 2018`। मोटे तौर पर + एक सप्ताह।
फिल पिरोजोवकोव

3

आप वैकल्पिक time()कार्यान्वयन वाले पुस्तकालय को पहले से लोड करने में सक्षम हो सकते हैं ।


1
वर्तमान समय में प्रोग्राम (s) की पहुँच कैसे होती है, इसके आधार पर, आपको gettimeofday, clock_gettime, और / या संभवतः दूसरों के वैकल्पिक कार्यान्वयन को पहले से लोड करना पड़ सकता है, लेकिन हाँ, मैंने पहले भी सफलता के साथ इस दृष्टिकोण का उपयोग किया है।
Kjetil Joergensen

यह एक जावा प्रोग्राम है, और यह libfaketime के साथ अच्छी तरह से काम करता है।
निकुंज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.