दो अलग-अलग लेकिन संबंधित कार्य हैं। बाइट स्ट्रीम में फाइलों के एक पेड़ (फाइलनाम, निर्देशिका संरचना, फाइल सिस्टम अनुमतियां, स्वामित्व और किसी भी अन्य मेटाडेटा सहित) को पैकिंग करना अभिलेखीय कहा जाता है
। एक बाइट स्ट्रीम में एक छोटी बाइट स्ट्रीम उत्पन्न करने के लिए अतिरेक को हटाने को संपीड़न कहा जाता है ।
यूनिक्स पर, दोनों ऑपरेशन अलग-अलग हैं, प्रत्येक के लिए अलग-अलग उपकरण हैं। अधिकांश अन्य प्लेटफार्मों पर (वर्तमान और ऐतिहासिक) संयुक्त उपकरण संग्रह और संपीड़न दोनों करते हैं।
(gzip और अन्य प्रोग्राम जो gzip के इंटरफ़ेस की नकल करते हैं, अक्सर संपीड़ित आउटपुट में मूल फ़ाइल नाम को संग्रहीत करने का विकल्प होता है, लेकिन यह, भ्रष्टाचार का पता लगाने के लिए CRC या अन्य चेक के साथ, एकमात्र मेटाडेटा है जिसे वे स्टोर कर सकते हैं।)
संग्रह से संपीड़न को अलग करने के फायदे हैं। संग्रह प्लेटफ़ॉर्म-विशिष्ट है (फाइल सिस्टम मेटाडेटा को संरक्षित करने की आवश्यकता व्यापक रूप से भिन्न होती है), लेकिन कार्यान्वयन सीधा है, मोटे तौर पर I / O- बाध्य, और समय के साथ थोड़ा बदलता है। संपीड़न प्लेटफ़ॉर्म-स्वतंत्र है, लेकिन कार्यान्वयन सीपीयू-बाउंड हैं और एल्गोरिदम लगातार बढ़े हुए संसाधनों का लाभ उठाने के लिए सुधार कर रहे हैं जो आधुनिक हार्डवेयर समस्या को सहन कर सकते हैं।
सबसे लोकप्रिय यूनिक्स अभिलेखागार है tar
, हालांकि इस तरह के रूप में अन्य मौजूद हैं cpio
और ar
। (डेबियन पैकेज ar
अभिलेखागार होते हैं , जबकि
cpio
अक्सर इनटल रामदिस्क के लिए उपयोग किया जाता है।) tar
को अक्सर compress
(.Z), gzip
(.gz),
bzip2
(.bz2) और xz
(.xz), जैसे सबसे पुराने से कम उम्र के संपीड़न उपकरणों के साथ जोड़ा जाता है। , और संयोग से सबसे खराब संपीड़न से नहीं।
एक tar
संग्रह बनाना और इसे संपीड़ित करना अलग चरण हैं: कंप्रेसर tar
फ़ाइल प्रारूप के बारे में कुछ नहीं जानता है । इसका मतलब यह है कि संपीड़ित tar
संग्रह से किसी एक फ़ाइल को निकालने के लिए पूर्ववर्ती फ़ाइलों के सभी डिकम्प्रेसिंग की आवश्यकता होती है। इसे अक्सर "ठोस" संग्रह कहा जाता है।
समान रूप से, चूंकि टार एक "स्ट्रीमिंग" प्रारूप है - इसके लिए एक पाइपलाइन में उपयोगी होना आवश्यक है - टार संग्रह में कोई वैश्विक सूचकांक नहीं है, और टार संग्रह की सामग्री को सूचीबद्ध करना उतना ही महंगा है जितना इसे निकालना।
इसके विपरीत, ज़िप और आरएआर और 7-ज़िप (आधुनिक विंडोज प्लेटफॉर्म पर सबसे लोकप्रिय आर्काइव) आमतौर पर प्रत्येक फ़ाइल को अलग-अलग संपीड़ित करते हैं, और मेटाडेटा को हल्के से संपीड़ित करते हैं। यह एक संग्रह में फ़ाइलों की सस्ती लिस्टिंग और व्यक्तिगत फ़ाइलों को निकालने की अनुमति देता है, लेकिन इसका मतलब है कि एक ही संग्रह में एक से अधिक फ़ाइलों के बीच अतिरेक का उपयोग संपीड़न बढ़ाने के लिए नहीं किया जा सकता है। सामान्य तौर पर पहले से संपीड़ित फ़ाइल को संपीड़ित करने से फ़ाइल का आकार कम नहीं होता है, कभी-कभी आपको ज़िप फ़ाइल के भीतर एक ज़िप फ़ाइल दिखाई दे सकती है: पहली ज़िपिंग ने बहुत सारी छोटी फ़ाइलों को एक बड़ी फ़ाइल में बदल दिया (संभवतः संपीड़न अक्षम) के साथ, जो दूसरी है zipping तो एक इकाई के रूप में संकुचित।
अलग-अलग प्लेटफार्मों और दर्शन के बीच क्रॉस-परागण है: gzip
अनिवार्य रूप से zip
इसके अभिलेखागार के बिना कंप्रेसर है, और xz
अनिवार्य रूप से 7-zip
इसके अभिलेखागार के बिना कंप्रेसर है।
अन्य, विशेष कम्प्रेसर हैं। पीपीएम वेरिएंट और उनके उत्तराधिकारी ZPAQ
संसाधन खपत के संबंध में अधिकतम संपीड़न के लिए अनुकूलित हैं। वे आसानी से सीपीयू और रैम को चबा सकते हैं जैसा कि आप उन पर फेंक सकते हैं, और विघटन संपीड़न के रूप में कर के रूप में है (इसके विपरीत, सबसे व्यापक रूप से उपयोग किए जाने वाले संपीड़न उपकरण
असममित हैं : डिकम्प्रेसिंग संपीड़ित करने से सस्ता है)।
स्पेक्ट्रम के दूसरे छोर पर lzo
, snappy
और LZ4
संपीड़न की लागत पर "प्रकाश" कम्प्रेसर अधिकतम गति और न्यूनतम संसाधन खपत के लिए डिज़ाइन किए गए हैं। वे व्यापक रूप से फाइलसिस्टम और अन्य ऑब्जेक्ट स्टोर के भीतर उपयोग किए जाते हैं, लेकिन स्टैंडअलोन टूल के रूप में कम।
तो आपको कौन सा चुनना चाहिए?
संग्रह:
जब से आप उबंटू पर हैं tar
, तब तक संग्रह करने के अलावा और कुछ भी उपयोग करने का कोई वास्तविक कारण नहीं है , जब तक कि आप उन फ़ाइलों को बनाने की कोशिश नहीं कर रहे हैं जो आसानी से कहीं और पढ़ने योग्य हैं।
zip
सर्वव्यापकता के लिए हराना कठिन है, लेकिन यह यूनिक्स-केंद्रित नहीं है और यह आपके फाइलसिस्टम की अनुमति और स्वामित्व की जानकारी नहीं रखेगा, और इसकी बेक्ड-इन कम्प्रिहेंशन पुरातन है। 7-ज़िप और आरएआर (और ZPAQ) में अधिक आधुनिक संपीड़न हैं, लेकिन यूनिक्स फाइल सिस्टम को संग्रहित करने के लिए समान रूप से अनुपयुक्त हैं (हालांकि कंप्रेशर्स के रूप में उनका उपयोग करके आपको रोकने के लिए कुछ भी नहीं है); आरएआर भी मालिकाना है।
संपीड़न:
अधिकतम संपीड़न के लिए आप एक बेंचमार्क पर नज़र रख सकते हैं, जैसे कि http://mattmahoney.net/dc/text.html पर विशाल । इससे आपको इसमें शामिल ट्रेडऑफ का बेहतर विचार देना चाहिए।
आप शायद अधिकतम संपीड़न नहीं चाहते हैं, हालांकि। यह बहुत महंगा है।
xz
आधुनिक यूनिक्स सिस्टम पर सबसे लोकप्रिय सामान्य-उद्देश्य संपीड़न उपकरण है। मेरा मानना है कि 7-ज़िप xz फ़ाइलों को भी पढ़ सकते हैं, क्योंकि वे निकटता से संबंधित हैं।
अंत में: यदि आप अल्पकालिक भंडारण के अलावा किसी अन्य चीज़ के लिए डेटा संग्रह कर रहे हैं, तो आपको बाद में सिरदर्द को कम करने के लिए कुछ खुले स्रोत और अधिमानतः व्यापक रूप से चुनना चाहिए।