मैं किसी एकल फ़ाइल को टारगेट क्यों करूंगा?


101

मेरी कंपनी में, हम एक db.dump.tar.gzफ़ाइल के रूप में एक स्थानीय विकास डेटाबेस स्नैपशॉट डाउनलोड करते हैं । संपीड़न समझ में आता है, लेकिन टारबॉल में केवल एक फ़ाइल ( db.dump) होती है।

क्या किसी एकल फ़ाइल को संग्रहित करने का कोई मतलब है, या .tar.gzकेवल इतनी सामान्य मुहावरा है? सिर्फ क्यों नहीं .gz?


5
मेरी राय में यह सिर्फ सम्मेलन का विषय है। जब लोग gz एक्सटेंशन वाली फ़ाइल देखते हैं, तो उनकी डिफ़ॉल्ट सोच का उपयोग करना होता है tar -zxvf। लेकिन जो लोग फ़ाइल नाम को देखते हैं और देखते हैं उनके पास .tgzविस्तार के रूप में नहीं है , db डंप फ़ाइल को gzip करना पूरी तरह से ठीक है। चूँकि मुझे संपीड़न एल्गोरिदम के बारे में विस्तार से पता नहीं है, इसलिए मुझे यकीन नहीं है कि अगर टार डीबी डंप जैसी विरल फाइलों पर कोई संपीड़न करता है, लेकिन सादे पाठ फ़ाइलों के लिए, फ़ाइल के प्रत्यक्ष gzip में पहले और gzip टारगेट करने पर बहुत छोटे आकार का लाभ होता है फ़ाइल को
अंतर्ग्रहण करें

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

अतीत में जब विभिन्न संपीड़न विधियों की कोशिश कर रहा था, तो मैं .tar.gzअन्य सबसे सामान्य तरीकों से बेहतर पाया गया। मुझे याद है कि यह सिर्फ बेहतर था, .tarलेकिन याद नहीं कर सकते कि क्या यह सिर्फ से बेहतर था .gz। विडंबना है कि विंडो का .cabप्रारूप मेरे द्वारा आजमाए गए तरीकों में से सबसे अच्छा था, जो बहुत अप्रत्याशित था।
फराप

@ प्रेस tarएक संपीड़न एल्गोरिथ्म नहीं है, यह एक संग्रह प्रारूप है
गार्डहेड

1
@gardenhead खैर, यह समझाता है कि यह बहुत अच्छी तरह से काम क्यों नहीं किया।
छपरा

जवाबों:


163

.tar.gzइसके बजाय उपयोग करने के लाभ .gzहैं

  • tarकी तुलना में अधिक मेटा-डेटा (UNIX अनुमतियां आदि) संग्रहीत करता है gzip
  • कई फ़ाइलों को संग्रहीत करने के लिए सेटअप को अधिक आसानी से विस्तारित किया जा सकता है
  • .tar.gz फाइलें बहुत ही आम हैं, केवल-gzipped फाइलें कुछ उपयोगकर्ताओं को पहेली बना सकती हैं। (cf. MelBurslans टिप्पणी )

उपयोग करने tarका ओवरहेड भी बहुत छोटा है।

अगर वास्तव में जरूरत नहीं है, मैं अभी भी एक फ़ाइल को टार करने की अनुशंसा नहीं करता हूं। कई उपयोगी उपकरण हैं जो संपीड़ित एकल फ़ाइलों को सीधे एक्सेस कर सकते हैं (जैसे zcat, zgrepआदि - के लिए भी मौजूदा bzip2और xz)।


35
मैंने मेटा-डेटा पहलू पर विचार नहीं किया। बहुत अच्छा बिंदु
बाग़

5
अगर मैं देखूं .gz, तो मेरी पहली वृत्ति है tar -zxf foo.gz। यह याद रखना कि gzip और भी कुछ सेकंड लगते हैं।
bgStack15

2
@ bgStack15 FWIW आप z(या -उस बात के लिए) की जरूरत नहीं है , सबसे आधुनिक tarएस स्वचालित रूप से फ़ाइल विघटित होने की जरूरत का पता लगाने जाएगा।
18

2
डिफ़ॉल्ट रूप gzipसे मूल फ़ाइल नाम और समय स्टाम्प संग्रहीत करेगा। आप -Nउन्हें पुनर्स्थापित करने के लिए विघटित होने पर विकल्प का उपयोग कर सकते हैं।
रॉस रिज

@RossRidge धन्यवाद, मैंने मूल फ़ाइल नाम के बारे में फिर से पाठ हटा दिया।
जोफेल

63

आप वास्तव में केवल आधे सवाल पूछ रहे हैं। दूसरा सवाल यह है, "मैं gzip के साथ एक टार फाइल को क्यों संकुचित करूंगा?"। और जवाब सिर्फ इतना नहीं है कि gzipफ़ाइल को छोटा किया जाता है (ज्यादातर मामलों में):

tar:

  • फ़ाइल नाम और अन्य मेटाडेटा को संग्रहीत करता है : मोड, स्वामी आईडी, समूह आईडी, फ़ाइलें, संशोधन समय
  • एक चेकसम स्टोर करता है (केवल हेडर के लिए)

gzip:

  • मूल फ़ाइल नाम को संग्रहीत कर सकते हैं, लेकिन यह वैकल्पिक है
  • मूल डेटा पर CRC-32 चेकसम है
  • यह फ़ाइल को संपीड़ित करता है

केवल इसके साथ tarआप यह सुनिश्चित नहीं कर सकते कि आपका डेटा दूषित नहीं था। केवल gzipआप उपयोगकर्ता / समूह आईडी, संशोधन समय और मूल फ़ाइल नाम संभव नहीं को पुनर्स्थापित नहीं कर सकते।

संयोजन व्यक्तिगत कमंड / प्रारूप प्रदान करने की तुलना में अधिक शक्तिशाली है, क्योंकि वे एक-दूसरे की सुविधाओं के पूरक हैं


स्पष्ट करने के लिए धन्यवाद! जब मैं tarविकिपीडिया पृष्ठ को पढ़ रहा था , तो मैंने इस विवरण को गलत समझा कि चेकसम पूरी फाइल के लिए था।
गार्डेनहेड

यह मुझे सही उत्तर की तरह लगता है। मैं कुछ और कारण भी जोड़ूंगा, जिन्हें आप सहमत होने पर संपादित करना चाहते हैं। 1) .tgz के लिए व्यवस्थापक के लिए कोई अतिरिक्त लागत नहीं है। DB बैकअप इनमें से सिर्फ एक है। वे एक ही वर्कफ़्लो, टूल और कमांड का उपयोग कर सकते हैं चाहे एक या एक से अधिक फ़ाइलों का बैकअप ले रहे हों; तो क्यों गज़िप कमांड के सिंटैक्स का उपयोग करते हुए स्पेशलकेस, उस मामले के लिए जहां एक फ़ाइल है?
डेवी मॉर्गन

30

केवल gzipped पाठ फ़ाइलों का उपयोग करने के लिए एक बहुत बड़ा लाभ है - सामग्री को सीधे कमांड लाइन टूल जैसे less, zgrepऔर zcat


दिलचस्प बात है, लेकिन सवाल एक डेटाबेस स्नैपशॉट के बारे में है, एक पाठ फ़ाइल होने की संभावना नहीं है, और केवल-गज़ैप्ड नहीं है।
अंडरस्कोर_ड

9
मेरे सभी डेटाबेस डंप (ज्यादातर mysql और pgsql) के @underscore_d आंशिक रूप से पाठ डंप हैं, क्योंकि वे कुछ अधिक खराब होते हैं, अगर आंशिक रूप से डंप को दूषित करने के लिए कुछ होता है, और आंशिक रूप से क्योंकि मैं सामान्य टूल के साथ किसी भी पुनर्स्थापना को पूर्व कर सकता हूं (sed , awk, perl, आदि) अगर मुझे ज़रूरत है बाइनरी डंप की तुलना में अधिक विश्वसनीय और अधिक उपयोगी। व्यापार-बंद यह है कि पाठ-डंप बड़ा होता है (जो परवाह करता है? डिस्क स्थान सस्ता है और हमारे पास अच्छा संपीड़न है) और पुनर्स्थापना काफी धीमी है (लेकिन यदि आप एक लेनदेन में पुनर्स्थापना को लपेटते हैं तो कम है)।
कैस

1
सादे उपकरण में एक डीकंप्रेसर के आउटपुट को पाइप करने से इन उपकरणों का क्या फायदा है?
कोडइन्चोएज

21

मैं कहूंगा कि यह संभावना है कि लोगों को यह एहसास नहीं है कि वे टार के बिना gzip / bzip2 / xz का उपयोग कर सकते हैं । वे एक से आते हैं शायद क्योंकि डॉस / विंडोज पृष्ठभूमि जहां यह संपीड़न और संग्रह करने के लिए सामान्य एक भी प्रारूप (में एकीकृत किया जा रहा है ज़िप , RAR , आदि)।

जबकि मेटाडेटा के भंडारण या अतिरिक्त फ़ाइलों को जोड़ने की क्षमता के कारण कुछ स्थितियों में टार का उपयोग करने के लिए मामूली फायदे हो सकते हैं, इसके नुकसान भी हैं। एक सादे gzip / bzip2 / xz फ़ाइल के साथ आप इसे डिकम्प्रेस कर सकते हैं और विघटित डेटा को सीधे दूसरे टूल (जैसे कि आपके डेटाबेस) में डिस्क पर फाइल के रूप में विघटित डेटा को स्टोर किए बिना सीधे पाइप कर सकते हैं। टारबॉल के साथ यह कठिन है।


2
जीएनयू टार के साथ, यह स्टडआउट के आउटपुट के लिए बस -ओ स्विच लेता है, इसलिए मैं यह नहीं कहूंगा कि यह बहुत कठिन है!
हाइड

5
पहला पैराग्राफ tgzविस्तार का उपयोग करके फ़ाइलों के लिए पर्याप्त रूप से प्रशंसनीय लगता है । हालांकि, ओपी का मामला उपयोग करता है tar.gz- और अगर ये काल्पनिक पूर्व-विजेता / डॉस उपयोगकर्ता कुछ भी हैं जैसे मैं था, तो ऐसी फ़ाइल को देखते समय पहली बात वे कहते हैं: 'इसमें 2 एक्सटेंशन क्यों हैं?'। फिर वे इसे Google करते हैं और जल्दी से उत्तर प्राप्त करते हैं, जो विशेष रूप से बताते हैं कि tarऔर संपीड़न अलग हैं। ;-)
अंडरस्कोर_ड

17

एक महत्वपूर्ण अंतर है जो tarकुछ परिस्थितियों में महत्वपूर्ण का उपयोग कर सकता है: "मेटाडेटा" के अलावा जो @jofel ने अपने उत्तर में उल्लेख किया है, संग्रह में tar फ़ाइल नाम को रिकॉर्ड करता है । जब आप इसे निकालते हैं, तो आपको मूल फ़ाइल नाम मिलता है, भले ही संग्रह को क्या कहा जाता है।

आपके मामले में टार आर्काइव और उस फ़ाइल में संबंधित नाम हैं db.dump.tar.gzऔर db.tar, लेकिन मान लीजिए कि आप टार फाइल का नाम बदल कर 20-Apr-16.dump.tgzया जो भी हो। इस के साथ tar xvfz, और आपको मिलता है db.dump। तुलना के लिए, खोल दो 20-Apr-16.dump.gzऔर तुम्हें मिल गया है 20-Apr-16.dump। (संपादित करें: जैसा कि टिप्पणियों में बताया गया है, gzip फ़ाइल नाम का रिकॉर्ड भी बनाता है; लेकिन आमतौर पर इसका उपयोग तब नहीं किया जाता है) एक tarसंग्रह में एक सापेक्ष पथनाम भी हो सकता है जो निकाले गए फ़ाइल को एक उपनिर्देशिका में रखता है।

आपका उपयोग मामला तय करेगा कि क्या इस तरह के फ़ाइल नाम की दृढ़ता की आवश्यकता है, या यहां तक ​​कि वांछित है , या वास्तव में अवांछनीय है। लेकिन निश्चित रूप से, संपीड़न की परवाह किए बिना, एक tarसंग्रह एक नियमित फ़ाइल से अलग तरीके से यात्रा करता है।


6
gzip मूल फ़ाइल नाम भी दर्ज करता है।
psusi

8
हाँ। नाम gzip हैडर में वैकल्पिक है- जाहिर है कि कोई एक नहीं होगा यदि आप किसी कमांड की स्ट्रीमिंग आउटपुट को कंप्रेस्ड करते हैं - और अधिकांश टूल इसे डिफ़ॉल्ट रूप से पुनर्स्थापित नहीं करेंगे (उदाहरण के लिए, आपको gzip --nameडिकम्प्रेसिंग के समय स्पष्ट रूप से उपयोग करना होगा ), लेकिन फ़ाइल नाम की दृढ़ता प्राप्त करने के लिए आपको टार का उपयोग करने की आवश्यकता नहीं है।
मील्स

यह इंगित करने के लिए धन्यवाद, मुझे यह ज्ञात नहीं था। फिर भी, क्योंकि यह डिफ़ॉल्ट व्यवहार नहीं है, बिंदु खड़ा है: टार प्रारूप में एक फ़ाइल वितरित करना मूल फ़ाइल नाम (और संभवतः रिश्तेदार पथ) को संरक्षित करता है, प्राप्तकर्ता के हस्तक्षेप के बिना। (छ) ज़िपित फ़ाइल वितरित नहीं करता है।
एलेक्सिस

8

अन्य सभी उत्तरों के अलावा, मैंने हाल ही में एक स्क्रिप्टिंग स्थिति पर हमला किया है जहां केवल एक फ़ाइल की उम्मीद थी, लेकिन एक पिछले कर्मचारी ने एक से अधिक फ़ाइल उत्पन्न होने की संभावना के साथ स्क्रिप्ट लिखी थी। इसलिए फाइलों को तार-तार कर दिया गया और फिर स्थानांतरित कर दिया गया और उनका विस्तार किया गया।

जब प्रक्रिया उस बिंदु तक बढ़ गई, जिसने 4.3 जीबी फ़ाइल बनाई, तो यह लुढ़का और एक .dump फ़ाइल के अलावा एक .dump.001 फ़ाइल बनाई। सभी स्क्रिप्ट बस काम करती रहीं।

यह सक्रिय sysadmin आलस्य परिभाषित है!


2

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

तारडाउन हो या न हो, डाउनलोड को तेज़ बनाने के लिए फ़ाइल को संपीड़ित करना मानक अभ्यास है - और डिस्क से बाहर चलने से बचें।


-1

टार विशेष रूप से कई फाइलों के लिए उपयोगी है जो एक औपचारिक फाइल सिस्टम के लिए नहीं लिखे गए हैं, यह हमेशा रहा है। यदि किसी कारण से कोई अवसर है, तो केवल 1 फ़ाइल को लिखा जाना है, यह कोई वास्तविक परिणाम नहीं है। मैं विभाजन या फ़ाइल सिस्टम की परवाह किए बिना सीधे अपने .tar.gz / dev / sdx पर dd कर सकता हूं। यह टेप भी हो सकता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.