ज़िप फ़ाइल का परीक्षण अखंडता?


21

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

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


2
किस बारे में unzip -t?
फ्लोइम स्वयं

ज़िप के रूप में एक ही व्यवहार।
मार्क रोचकिंड

जवाबों:


20

अनजिप -t

संग्रह फ़ाइलों का परीक्षण करें।

यह विकल्प प्रत्येक निर्दिष्ट फ़ाइल को स्मृति में निकालता है और मूल संग्रहीत संग्रहीत सीआरसी मान के साथ विस्तारित फ़ाइल के सीआरसी (चक्रीय अतिरेक जांच, एक बढ़ाया चेकसम) की तुलना करता है।

[स्रोत: https://linux.die.net/man/1/unzip ]


प्रति फ़ाइल 2 सीआरसी हैं: स्थानीय और केंद्रीय। unzip -tकेवल उत्तरार्द्ध का परीक्षण करता है।
मार्क रोचकिंड

2
मुझे नहीं पता कि आप "स्थानीय" बनाम "केंद्रीय" (केंद्रीय से क्या?) का मतलब है, लेकिन जब मैं "अनज़िप-टीएस myzip_file.zip" चलाता हूं, तो मुझे प्रत्येक ज़िप फ़ाइल की अखंडता पर टिप्पणी करने के लिए एक लाइन आउटपुट दिखाई देता है AASaturn.h ठीक ...:, की तरह (बेहतर स्वरूपण कल्पना): "परीक्षण: AARiseTransitSet.cpp ठीक परीक्षण: AARiseTransitSet.h ठीक परीक्षण: AASaturn.cpp ठीक परीक्षण
ठेओफ्रस्तुस

ज़िप फ़ाइलों की आंतरिक संरचना की व्याख्या करने का स्थान नहीं। Wikepedia लेख इस पर बहुत अच्छा है। जैसा कि मैंने कहा, यह एक भ्रामक रिपोर्ट है जिसे आप देख रहे हैं।
मार्क Rochkind

अगर मैं एक हेक्स-एडिटर के साथ ज़िप फ़ाइल में जाता हूं और एक बाइट को बदल देता हूं, तो मैं एक फाइल के लिए देखता हूं: परीक्षण: AA_sphere.htm खराब सीआरसी 7952862e (44c6f7f8 होना चाहिए) जबकि बाकी "ओके" के रूप में सूचीबद्ध हैं। आप इसे "भ्रामक" घोषित करना जारी रखेंगे, लेकिन यह वही है जो मैं एक ज़िप फ़ाइल के फ़ाइल-दर-फ़ाइल सीआरसी चेक के लिए उम्मीद करता हूं। अब ... आपको शुभकामनाएँ सर।
थियोफ्रेस्टस

मुझे लगता है कि आपने केंद्रीय निर्देशिका सीआरसी को अंत में बदल दिया है। फ़ाइल से पहले या बाद में स्थानीय एक को बदलने का प्रयास करें।
मार्क रोचाइंड

12

एक संग्रह को ठीक करने का प्रयास स्थानीय और केंद्रीय सीआरसी की तुलना करेगा, और संग्रह परीक्षणों के साथ संयोजन से सभी सीआरसी की जांच की जा सकेगी। अगर तुम दौड़ते हो

unzip -t archive.zip

तथा

zip -F archive.zip --out archivefix.zip

और न ही शिकायत करते हैं, इसका मतलब है कि संग्रह की सामग्री केंद्रीय और स्थानीय सीआरसी दोनों से मेल खाती है। (आप archivefix.zipबाद में हटा सकते हैं ।)

इसे सत्यापित करने के लिए zip, 3.0 के लिए Info-ZIP स्रोत कोड के साथ शुरू करके , मैंने एक फाइल इस प्रकार बनाई:

zip -9 test.zip zip.txt zipup.c

फिर मैंने zip.txtऑफसेट 0xB137 पर बाइट को बदलकर केंद्रीय निर्देशिका सीआरसी को दूषित कर दिया। आपने जो देखा उसके विपरीत व्यवहार मुझे मिला; unzip -vकेंद्रीय निर्देशिका से बदल सीआरसी की सूचना दी, लेकिन unzip -tऔर zip -Tखबर दी है कि फ़ाइल ठीक (स्थानीय सीआरसी के खिलाफ जाँच) था।

लेकिन दौड़ रहा है

zip -F test --out testfix

की सूचना दी

Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
 copying: zip.txt
        zip warning: Local Entry CRC does not match CD: zip.txt
 copying: zipup.c

"सही" फ़ाइल के लिए अभी भी परिवर्तित सीआरसी सूचीबद्ध है zip.txt

zip.txt0x10 पर ऑफसेट के लिए स्थानीय CRC को बदलना दोनों का कारण बनता है unzip -tऔर zip -TCRC त्रुटि की रिपोर्ट करता है, लेकिन zip -Fकुछ भी गलत नहीं हुआ।

इस प्रकार मेरे प्रयोगों से, एक संग्रह प्रविष्टि की सामग्री और उसके सीआरसी के बीच बेमेल का पता लगाया जा सकता है:

  • स्थानीय केवल: zip -Tऔर unzip -t; zip -Fस्थानीय-केंद्रीय बेमेल के बारे में भी शिकायत करेंगे
  • स्थानीय और केंद्रीय: zip -Tऔरunzip -t
  • केंद्रीय केवल: zip -Tऔर unzip -tशिकायत नहीं करेगा, लेकिन zip -Fएक स्थानीय-केंद्रीय बेमेल का संकेत देगा

(कि नोट डिफ़ॉल्ट रूप से zip -Tबस का उपयोग करता unzip -tqqहै, तो zip -Tऔर unzip -tवास्तव में बराबर हैं आप पढ़ सकते हैं। unzipकि एक संग्रह के परीक्षण वास्तव में स्थानीय सीआरसी, नहीं केंद्रीय एक तुलना की जाँच करने के स्रोत कोड, के लिए देखो extract_or_test_files(), extract_or_test_entrylist()और extract_or_test_member(), सभी में extract.c।)


उलझा हुआ। और कोई संदेह नहीं है कि क्या संस्करण (जीएनयू, बीएसडी, आदि) और सीआरसी बहुत सारे अखंडता जांचों में से एक है जो प्रदर्शन किया जा सकता है।
मार्क रोचकिंड

1
की नहीं कई संस्करण हैं zipऔर unzipपर उपलब्ध यूनिक्स की तरह प्लेटफार्मों; Info-ZIP का इस्तेमाल हर जगह बहुत किया जाता है ...
Stephen Kitt

1
जहाँ तक यह जटिल है, यह सिर्फ दो आज्ञाओं को लेता है; यदि दोनों unzip -tऔर zip -Fत्रुटि के बिना चलते हैं, तो आप ठीक हैं और दोनों CRCs को चेक किया गया है।
स्टीफन किट

धन्यवाद! इसकी जांच कराएंगे। इसके अलावा, उल्लेख करना भूल गए: ज़िप फाइलें ZIP64 हैं।
मार्क रोचकिंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.