Linux date कमांड: फॉर्मेटिंग और ऑटोमेटेड बैकअप गाइड

परिचय और मुख्य उपयोग

लिनक्स एनवायरनमेंट में सिस्टम क्लॉक को मॉनिटर करने और तारीख के फॉर्मेट को अपनी ज़रूरत के अनुसार ढालने के लिए date कमांड एक बेहद ताकतवर टूल है। बुनियादी सिंटैक्स से लेकर एडवांस्ड पैरामीटर्स तक, यह टूल बैकअप टास्क ऑटोमेशन, लॉग फाइलों के सटीक टाइमस्टैम्पिंग और टाइमजोन कन्वर्जन में अहम भूमिका निभाता है। इस गाइड में हम प्रोडक्शन सर्वर पर काम आने वाले व्यावहारिक उदाहरणों के साथ इसके इस्तेमाल को समझेंगे।

सिस्टम समय देखना और कस्टम फॉर्मेट तैयार करना

टर्मिनल पर बिना किसी अतिरिक्त फ्लैग के केवल date टाइप करने पर सिस्टम का वर्तमान दिन, तारीख, समय, टाइमज़ोन और वर्ष डिफ़ॉल्ट लेआउट में स्क्रीन पर आ जाता है।

⚙️ [ज़रूरी ऑप्शंस]

-d, --date=STRING : वर्तमान समय की जगह आपके द्वारा दिए गए किसी खास स्ट्रिंग के आधार पर समय की गणना करता है।
-s, --set=STRING : सिस्टम की क्लॉक और कैलेंडर को नए मान पर सेट करता है।
-u, --utc : लोकल टाइमज़ोन को छोड़कर यूनिवर्सल कोऑर्डिनेटेड टाइम (UTC) दिखाता है।
-r, --reference=FILE : सिस्टम क्लॉक की जगह किसी विशिष्ट फाइल के अंतिम मॉडिफिकेशन टाइम को प्रदर्शित करता है।
-I, --iso-8601[=FMT] : अंतरराष्ट्रीय ISO 8601 मानक के अनुसार तारीख और समय फॉर्मेट करता है।

डिफ़ॉल्ट date कमांड आउटपुट

कस्टम लेआउट पाने के लिए कमांड के आगे + सिंबल जोड़कर फॉर्मेट स्पेसिफायर्स का इस्तेमाल किया जाता है। जैसे YYYY-MM-DD HH:MM:SS स्ट्रक्चर पाने के लिए %Y (4-अंकों का वर्ष), %m (महीना), %d (तारीख), %H (24-घंटे का प्रारूप), %M (मिनट), और %S (सेकंड) को एक साथ व्यवस्थित किया जा सकता है। यह फॉर्मेट एप्लिकेशन लॉग्स और रिलेशनल डेटाबेस एंट्रीज के लिए सबसे मुफीद माना जाता है।

ISO स्टाइल में समय फॉर्मेट करना

जब बैकअप आर्काइव या सर्वर लॉग्स तैयार करने हों, तो ऐसे नाम बेहतर होते हैं जिनमें कोई खाली जगह (स्पेस) या विशेष चिह्न न हों। केवल अंकों और अंडरस्कोर (_) को जोड़कर एक सुरक्षित स्ट्रिंग तैयार की जा सकती है, जिससे फाइल सिस्टम में स्क्रिप्टिंग संबंधी गलतियों की कोई गुंजाइश नहीं रहती और पुरानी फाइलें ओवरराइट होने से बची रहती हैं।

फाइलनेम के लिए बिना स्पेस का टाइमस्टैम्प

यदि आप एडमिनिस्ट्रेटिव ईमेल या सिस्टम स्टेटस रिपोर्ट के लिए इंसानों द्वारा आसानी से पढ़े जा सकने वाले वाक्य जैसा आउटपुट चाहते हैं, तो %A और %B का प्रयोग करें। यहाँ %A सप्ताह का पूरा दिन (जैसे Saturday) और %B महीने का पूरा नाम (जैसे October) प्रिंट करता है।

दिन और महीने के पूरे नाम के साथ तारीख

पिछली या अगली तारीखों की गणना और टाइमज़ोन बदलना

क्लाउड इन्फ्रास्ट्रक्चर और डिस्ट्रीब्यूटेड क्लस्टर्स में सभी नोड्स के लॉग्स को एक समान समय रेखा पर सिंक करने के लिए UTC मानक का पालन किया जाता है। -u फ्लैग लोकल टाइमज़ोन की बाधा को हटाकर सीधे समन्वित वैश्विक समय दिखाता है।

UTC समय प्रदर्शित करना

बिना सर्वर की ग्लोबल टाइमज़ोन सेटिंग को छेड़े, केवल एक सेशन के लिए किसी खास शहर का समय देखना हो तो TZ एनवायरनमेंट वेरिएबल का अस्थायी प्रयोग किया जाता है। रिमोट डेटा सेंटर के संचालन समय की जांच करने के लिए यह एक त्वरित समाधान है।

पर्यावरण चर TZ से टाइमज़ोन बदलना

-d फ्लैग प्राकृतिक भाषा के शब्दों को बखूबी समझता है। उदाहरण के लिए 'yesterday' पास करके बीती हुई तारीख निकाली जा सकती है, जो आधी रात के बाद चलने वाली डेली डेटा प्रोसेसिंग और रोटेशन जॉब्स में अत्यधिक उपयोगी है।

कल की तारीख प्राप्त करना

पुरातन डेटा क्लीनअप या 7 दिन पुरानी लॉग फाइलों को आर्काइव करने के लिए आप सीधे '7 days ago' जैसा रिलेटिव एक्सप्रेशन दे सकते हैं। इससे ऑटो-पर्ज स्क्रिप्ट्स बहुत सरल बन जाती हैं।

सात दिन पहले की तारीख की गणना

सप्ताह के आगामी दिनों की तारीख तय करने के लिए 'next Monday' जैसे एक्सप्रेशन्स भी सीधे काम करते हैं। इसका इस्तेमाल वीकली मेंटेनेंस शेड्यूल और आवधिक क्रॉन जॉब्स के ऑटोमेशन में बहुत आसानी से किया जा सकता है।

आगामी सोमवार की तारीख निकालना

ऑटोमेटेड बैकअप स्क्रिप्ट और टाइमस्टैम्प आधारित फाइल नामकरण

प्रैक्टिकल लैब के लिए सबसे पहले एक सुरक्षित अस्थायी डायरेक्टरी तैयार करके उस लोकेशन पर स्विच करते हैं: mkdir -p /tmp/backup_demo && cd /tmp/backup_demo।

बैकअप टेस्ट डायरेक्टरी बनाना

परीक्षण के उद्देश्य से एक डमी कॉन्फ़िगरेशन फ़ाइल बना लेते हैं: echo 'Application configuration data' > config.ini।

सैंपल कॉन्फ़िगरेशन फ़ाइल तैयार करना

कमांड सब्स्टीट्यूशन सिंटैक्स ($()) का प्रयोग करके date '+%Y%m%d_%H%M%S' के आउटपुट को BACKUP_TAG नाम के वेरिएबल में सुरक्षित कर लिया जाता है। इस वेरिएबल में अब साल, महीना, दिन और समय का एक यूनिक स्ट्रिंग तैयार है।

शेल वेरिएबल में टाइमस्टैम्प स्टोर करना

तैयार किए गए वेरिएबल को आर्काइव के नाम में शामिल करते हुए टारबॉल जनरेट करते हैं: tar -czf "config_backup_${BACKUP_TAG}.tar.gz" config.ini। इससे फाइल के नाम को देखते ही पता चल जाता है कि बैकअप किस पल लिया गया था।

टाइमस्टैम्प के साथ बैकअप आर्काइव बनाना

ls -l config_backup_*.tar.gz रन करके डायरेक्टरी लिस्टिंग देखें। आउटपुट में config_backup_20261024_174030.tar.gz जैसी अलग और यूनिक फाइल दिखाई देगी, जो साबित करती है कि कई बार बैकअप चलने पर भी पुराना डेटा सुरक्षित रहेगा।

तैयार की गई बैकअप फ़ाइल की जांच करना

Unix टाइमस्टैम्प (Epoch) कन्वर्जन और निष्पादन समय मापना

1 जनवरी 1970 00:00:00 UTC से अब तक बीते कुल सेकंड्स को Unix Epoch कहा जाता है। इसे प्राप्त करने के लिए date +%s निष्पादित किया जाता है। प्रोग्रामिंग लॉजिक और डेटाबेस प्राइमरी कीज़ में समय की तुलना करने के लिए यह इंटीजर सबसे सटीक माना जाता है।

वर्तमान Unix Epoch टाइम प्राप्त करना

यदि लॉग्स में कोई न्यूमेरिक Epoch वैल्यू (जैसे 1700000000) दर्ज है, तो उसे इंसानों के पढ़ने योग्य रूप में बदलने के लिए वैल्यू से पहले @ लगाकर -d फ्लैग के साथ पास करें। यह सिंबल लिनक्स को बताता है कि इनपुट कोई साधारण टेक्स्ट नहीं बल्कि टाइमस्टैम्प है।

Epoch सेकंड्स को सामान्य तारीख में बदलना

किसी टास्क या बैच प्रोसेस के निष्पादन समय की सटीक मॉनिटरिंग के लिए %s%N के ज़रिए नैनोसेकंड स्तर की टाइमिंग दर्ज की जा सकती है। शेल के अंकगणितीय ऑपरेटर $(( )) द्वारा शुरुआत और समाप्ति के अंतर को मिलीसेकंड (ms) में बदलकर परफॉर्मेंस प्रोफाइलिंग आसानी से की जाती है।

स्क्रिप्ट के चलने का समय मापना

इस गाइड में हमने लिनक्स date यूटिलिटी के फंडामेंटल सिंटैक्स, डायनामिक डेट कैलकुलेशन, बैकअप नेमिंग पैटर्न्स और यूनिक्स इपॉक के व्यवहार को विस्तार से समझा। इन तकनीकों को अपनी शेल स्क्रिप्ट्स में शामिल करके आप अपने इंफ्रास्ट्रक्चर के ऑटोमेशन को अधिक मजबूत और पारदर्शी बना सकते हैं।