टेस्ट टैश फाइल इंटेग्रिटी इन बैश


25

मेरे पास एक बैश स्क्रिप्ट है जो '.tar' फाइल बनाती है। एक बार फाइल बन जाने के बाद, मैं इसकी अखंडता का परीक्षण करना चाहता हूं और अगर अखंडता खराब है तो रूट उपयोगकर्ता को एक ईमेल भेजना होगा।

मुझे पता है कि मुझे tar -tf /root/archive.tarफ़ाइल की अखंडता की जांच करने के लिए कमांड का उपयोग करने की आवश्यकता होगी , लेकिन अगर मैं बयान और त्रुटियों की जांच करूं तो मैं इसे कैसे रोक सकता हूं?

जवाबों:


33

यदि tarइसके इनपुट में त्रुटियां मिलती हैं, तो यह exit(3)गैर-शून्य निकास मान के साथ होगा। यह - अधिकांश tarकार्यान्वयन के साथ - संग्रह सामग्री को सूचीबद्ध करते समय भी किया जाता है t। तो आप बस tarयह निर्धारित करने के लिए बाहर निकल सकते हैं कि क्या कुछ गलत हो गया है:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

यदि आपकी tarसभी त्रुटियों के साथ नहीं मिलता है t, तो आप अभी भी संग्रह को निकाल सकते हैं stdoutऔर पुनर्निर्देशित stdoutकर सकते हैं /dev/null, जो कि धीमी लेकिन अधिक विश्वसनीय होगी:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

The यह संकेतन मैनपेज को दर्शाता है, वास्तविक कॉल को नहीं। देखते हैं man 3 exit


1
आप शायद tarआउटपुट को पुनर्निर्देशित करना चाहेंगे /dev/null, जैसा कि आप शायद वास्तव में इसे देखना नहीं चाहते हैं।
केविन

1
सभी tarक्रियान्वयन सभी त्रुटियों का पता लगाते हैं या रिपोर्ट करते हैं t( bsdtarनहीं, आप tar xOf file.tar > /dev/nullवहां उपयोग कर सकते हैं )। सभी tarकार्यान्वयन निकास स्थिति 2, star(255) ot bsdtar(1) से बाहर नहीं निकलेंगे, लेकिन क्या मायने रखता है कि निकास स्थिति यहां शून्य नहीं है।
स्टीफन चेज़लस

1
मैंने उसी के अनुसार अपनी पोस्ट संपादित की। चूंकि exit(2)मैं उपयुक्त मेन्यू के बारे में था, न कि सटीक निकास मान (जिसके कारण मेरे पास गैर-शून्य «स्पष्ट रूप से निम्नलिखित वाक्य में उल्लिखित था)। इसे नोट किया गया (और अनुभाग को दाईं ओर बदल दिया गया है-)।
एंड्रियास विसे

आपका उत्तर केवल लिस्टिंग और निष्कर्षण की क्षमता के बारे में है, अगर मैं एक संपादक के साथ टार संग्रह खोल देता हूं और कुछ बदल देता हूं तो आपका समाधान किसी भी तरह की त्रुटि नहीं पकड़
पाएगा

0

क्षमा करें, लेकिन आप ऐसा नहीं कर सकते, ऐसा लगता है कि टार में परीक्षण की क्षमता का अभाव है (उदाहरण के लिए यदि आप * निक्स के बारे में भूल जाते हैं और इसे वाइनर के साथ परीक्षण करने का प्रयास करते हैं, तो परिणाम होगा: "इस प्रकार के संग्रह के लिए कमांड समर्थित नहीं है")

मैंने ऊपर दिए गए टिप्पणियों में कैसे बताया, टार का शाब्दिक रूप से तुलना करने के लिए आंतरिक सीआरसी का अभाव है, इसलिए यदि आप एक संपादक के साथ एक टार संग्रह को बदलते हैं, तो लिस्टिंग और निष्कर्षण बिना किसी त्रुटि के निर्दोष काम कर सकते हैं, लेकिन दूषित डेटा को निकाल सकते हैं

निष्कर्ष में, मैं एक समाधान के लिए उम्मीद कर रहा हूं, लेकिन एक नहीं है, सौभाग्य से दो अच्छी खबरें हैं:

बहुत, बहुत, बहुत दुर्लभ टार अभिलेखागार हैं जो किसी अन्य प्रोग्राम (जैसे कि gzip, bzip2, आदि) के साथ भी संपीड़ित नहीं होते हैं, इसलिए उस प्रोग्राम का एक परीक्षण समाधान होगा और जो लोग उन्हें संकुचित नहीं करते हैं वे थोड़े लंगड़े हैं, वास्तव में सभी नाम

अपनी व्यक्तिगत समस्या के लिए, मैं भाग्यशाली हूं, इसे निकालने के बाद, मुझे बस एक md5sum फ़ाइल मिली, जिसमें सभी फाइलों के CRC के साथ (यहां तक ​​कि वह व्यक्ति जो नेट पर arhive टार लगाता है और इसे संपीड़ित नहीं करना चाहता था, वह अभी भी बनना चाहता था सत्यापित किया जा सकेगा)


-5

आप निम्न तर्क पास करके इसे कर सकते हैं tar:

$ tar -cvzf test.tar test_file

2
एक-पंक्ति के उत्तर अक्सर मददगार नहीं होते हैं। कुछ स्रोत सामग्री (जैसे, प्रलेखन) को शामिल करने के लिए अपनी पोस्ट का विस्तार करने पर विचार करें जो आपके समाधान का समर्थन करती है।
हेलोजगॉस्ट

6
-c-f('test.tar') नाम से फाइल बनाता है । -zअभिलेखागार gzips। -vयह क्रिया करता है। मुझे पूरा यकीन है कि यह एक सटीक समाधान नहीं है।
एपिकवॉयज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.