GZ

GZ फ़ाइल क्या होती है?

एक अकेली फ़ाइल को कंप्रेस करता है। TAR के साथ मिलकर यही Unix का आम आर्काइव बनता है।

GZ

GZ है क्या

GZ एक स्ट्रीम फ़ॉर्मेट है, जो शुरू से आख़िर तक लिखा और पढ़ा जाता है। इसका इस्तेमाल वेब और सहेजना के लिए होता है।

एक्सटेंशन .gz है और पूरा नाम Gzip Archive। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

GZ आया कहाँ से

यह 1992 तक पीछे जाता है। विनिर्देश RFC 1952 है।

जो फ़ॉर्मेट इतने लंबे समय तक पढ़ा जाता रहा हो, उसे वह चीज़ सौंपी जा सकती है जो आपको दस साल बाद वापस चाहिए।

विनिर्देश सार्वजनिक है

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

कुछ भी फेंका नहीं जाता

GZ फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

यह ठीक एक फ़ाइल रखती है

GZ फ़ाइल एक ही धारा को कंप्रेस करती है और फ़ाइल के नाम या फ़ोल्डर जैसी कोई चीज़ नहीं जानती। इसीलिए यह इतनी बार TAR के साथ दिखती है, जो यही छूटा हुआ ढाँचा जोड़ देता है।

यह और क्या ले जा सकती है

GZ फ़ाइल ऐसी बनावट जिससे पूरा पहुँचने से पहले ही यह चलना शुरू कर सके रख सकती है।

यह ख़ास तौर पर बदलते समय मायने रखता है: लक्ष्य जो नहीं रख सकता वह गिरा दिया जाता है, अमूमन बिना किसी चेतावनी के।

इसका कंप्रेशन अनुपात आता कहाँ से है

यह एक बार में 32 KB पर काम करता है: दोहराव जितनी दूरी में फैला हो, उसे इसी दायरे के अंदर आना पड़ता है, तभी उसे दबाया जा सकता है।

यही एक संख्या एक आर्काइव फ़ॉर्मेट और दूसरे के बीच का ज़्यादातर फ़र्क़ समझा देती है। बड़ा दायरा ज़्यादा दोहराव ढूँढ़ लेता है और उसके लिए ज़्यादा वक़्त और ज़्यादा मेमोरी लेता है — पूरा सौदा बस इतना है।

अपनी हिफ़ाज़त के लिए यह क्या करती है

GZ फ़ाइल अपने साथ एक चेकसम, जिससे ख़राब हुई फ़ाइल चुपचाप ग़लत पढ़े जाने के बजाय पकड़ में आ जाए लाती है।

चेकसम कुछ ठीक नहीं करता। वह आपको बताता है कि फ़ाइल ख़राब है — और यही फ़र्क़ है अभी पता चलने में और उससे पता चलने में जिसे आपने वह फ़ाइल भेज दी थी।

GZ को खोलता कौन है

gzip, 7-Zip और Keka इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

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

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह सौंपने का फ़ॉर्मेट है

GZ सौंपने के लिए बना है, इसके अंदर काम करने के लिए नहीं। इसे बदलना मुमकिन है और शायद ही कभी सुखद; समझदारी का रास्ता मूल फ़ाइल से होकर और एक नए निर्यात से होकर जाता है।

इसके साथ ग़लत क्या होता है

बार-बार आने वाली शिकायतें: यह एक ही धारा सँभालता है और फ़ोल्डर बयान नहीं कर सकता।

इनमें से कोई भी फ़ॉर्मेट से दूर रहने की वजह नहीं है। ये वे बातें हैं जिन्हें इनमें से कोई आपको चौंकाए उससे पहले जान लेना चाहिए — यह अलग दावा है, और ज़्यादा काम का।

एक फ़ाइल भीतर, एक फ़ाइल बाहर, कोई आर्काइव नहीं

Gzip एक अकेली स्ट्रीम दबाता है। इसमें कोई डायरेक्टरी नहीं, नामों की सूची नहीं, कई फ़ाइलों की धारणा नहीं। notes.txt दबाने पर notes.txt.gz मिलती है — इसमें कुछ और नहीं, और खोलने पर ठीक एक फ़ाइल मिलती है।

यही वजह है कि .tar.gz सामान्य रूप है और एक्सटेंशन के दो हिस्से हैं। Tar एक डायरेक्टरी ट्री को एक स्ट्रीम में बाँधता है, gzip उस स्ट्रीम को दबाता है। बिना-लपेटी .gz खोलने पर वही एक फ़ाइल मिलती है जिसे दबाया गया था।

दुनिया की ज़्यादातर gzip कोई फ़ाइल नहीं है

यह एक HTTP रिस्पॉन्स है। लगभग हर वेब सर्वर HTML, CSS, JavaScript और JSON को भेजने से पहले gzip से दबाता है, ब्राउज़र इसे चुपचाप खोल लेता है, और कहीं भी .gz फ़ाइल नहीं लिखी जाती। यह रोज़ अरबों बार होता है और अदृश्य है।

यही वजह है कि gzip हर जगह है, और यही वजह है कि इसकी रफ़्तार इसके अनुपात से ज़्यादा मायने रखती है — सर्वर के पास मिलीसेकंड होते हैं, सेकंड नहीं।

DEFLATE, जो ZIP और PNG के भीतर भी है

Gzip DEFLATE इस्तेमाल करता है — 32 KB खिड़की के ख़िलाफ़ LZ77 मिलान, फिर Huffman कोडिंग। यही एल्गोरिद्म ZIP के भीतर हर फ़ाइल और हर PNG तस्वीर को दबाता है।

32 KB खिड़की ही सीमा तय करती है। इससे दूर की दोहराव नहीं मिल सकती, यही वजह है कि बड़ी फ़ाइलों पर gzip xz और 7z से काफ़ी पीछे रह जाता है — और यही वजह है कि इसे चलाना इतना सस्ता है।

यह एक पेटेंट के आस-पास से घुमाने के लिए लिखा गया था

Jean-loup Gailly और Mark Adler ने 1992 में gzip जारी किया, Unix compress की जगह लेने के लिए, जो LZW इस्तेमाल करता था — वही एल्गोरिद्म जिस पर Unisys के पेटेंट थे।

DEFLATE को बिना बंधन के डिज़ाइन किया गया और RFC 1951 के तौर पर प्रकाशित किया गया ताकि कोई भी इसे लागू कर सके। यही फ़ैसला है जिसने इसे ZIP, PNG, HTTP और अनगिनत प्रोटोकॉल में पहुँचाया।

लेवल, और तयशुदा सही क्यों है

Gzip लेवल 1 से 9 देता है। लेवल 1 तेज़ और ढीला है, 9 सबसे कड़ी खोज करता है, और 6 तयशुदा है। 6 और 9 के बीच फ़र्क़ आम तौर पर आकार में कुछ फ़ीसद के लिए समय में बड़ी बढ़ोतरी है।

Decompression की रफ़्तार लेवल से लगभग स्वतंत्र है और तेज़ है — सामान्य हार्डवेयर पर सैकड़ों मेगाबाइट प्रति सेकंड। यही असमानता फ़ॉर्मेट की पहचान है।

फ़ाइल के बारे में यह क्या सहेजता है

हेडर मूल फ़ाइल का नाम, modification timestamp और एक टिप्पणी रख सकता है, और आख़िर में बिना-दबाव डेटा का CRC32 चेकसम होता है। इससे decompress करते वक़्त ख़राबी पकड़ी जाती है, चुपचाप ग़लत नतीजा नहीं मिलता।

सहेजा गया नाम यही वजह है कि decompress करने पर कभी-कभी .gz के नाम से अलग नाम की फ़ाइल मिलती है — भेजने के लिए फ़ाइल का नाम बदलने के बाद भी मूल नाम रह सकता है।

यह जोड़ता है, जो असामान्य और उपयोगी है

दो gzip फ़ाइलों को सिर्फ़ फ़ाइल कॉपी से जोड़ने पर एक वैध gzip फ़ाइल मिलती है जिसमें दोनों क्रम में हैं। Decompressor बिना बताए इसे संभाल लेते हैं।

यही वजह है कि लॉग रोटेशन और स्ट्रीमिंग पाइपलाइन इस पर टिकी हैं — कोई प्रोसेस बिना पहले का दोबारा पढ़े दबे हुए टुकड़े जोड़ सकता है। न ZIP, न 7z यह कर सकते हैं।

जहाँ विकल्प जीत जाते हैं

xz टेक्स्ट पर लगभग तीस फ़ीसद ज़्यादा छोटा दबाता है और कहीं ज़्यादा समय लेता है। zstd gzip की रफ़्तार से xz के क़रीब दबाता है, और पैकेज फ़ॉर्मेट में gzip की जगह ले रहा है। Brotli वेब पर gzip को हराता है।

Gzip का बचा हुआ फ़ायदा यह है कि यह बिना इंस्टॉल, बिना समझाए हर जगह मौजूद है। नए सिस्टम के लिए अब आम तौर पर zstd बेहतर तयशुदा है।

इसे ZIP में कब बदलें

जब यह किसी मशीन के बजाय किसी व्यक्ति के पास जा रही हो। ZIP वह है जो साधारण Windows या macOS बिना मदद के खोलता है, और किसी ग़ैर-तकनीकी सहकर्मी को .tar.gz भेजना चुपचाप उन्हें एक समस्या सौंपना है।

तब न बदलें जब यह किसी Unix सिस्टम को वापस जा रही हो। ZIP में दोबारा पैक करना अनुमतियाँ, स्वामित्व और सिंबॉलिक लिंक हटा देता है जो tar ढोता था।

ज़रूरी जानकारी, एक जगह

GZ फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.gz, .tgz
मीडिया टाइपapplication/gzip
पहली बार प्रकाशित1992
विनिर्देशRFC 1952