TAR बनाम CPIO संग्रह फ़ाइल स्वरूपों में क्या अंतर है?


41

मैं जिज्ञासु हूं और थोड़ा बहुत पढ़ा भी है लेकिन फिर भी सवाल हैं।

CPIO TAR से अलग क्या है? मुझे एक और सवाल में बताया गया कि टार 1 फाइल को एक साथ 1 आर्काइव में खींचने के लिए है जो कि आमतौर पर gzip'd या bzip'd है।

मुझे यह भी बताया गया था कि TAR STDOUT से संपीड़ित नहीं हो सकता। मैं बैकअप के लिए ZFS स्नैपशॉट को संग्रहीत / संपीड़ित करना चाहता हूं। मैं सोच रहा था कि क्या मैं इस प्रभाव को प्राप्त करने के लिए CPIO को bzip2 के साथ जोड़ सकता हूं।

या मेरे पास पूरी तरह से गलत विचार है? क्या यह सीपीआईओ का उद्देश्य नहीं है?

यह उसी तरह का आदेश है जो मैंने ZFS स्नैपशॉट के समर्थन पर Oracle डॉक्स को पढ़ने के बाद आया है।

# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2

# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2

मत भूलना pax: पी
जानूस ट्रॉल्सन

जवाबों:


28

दोनों tarऔर cpioएक ही उद्देश्य है: एक ही स्ट्रीम में कई अलग-अलग फ़ाइलों को संक्षिप्त करें। वे डेटा को संपीड़ित नहीं करते हैं। (इन दिनों tarअपने रिश्तेदार सादगी के लिए और अधिक लोकप्रिय वजह से है - यह बजाय साथ मिलकर होने के तर्कों के रूप में इनपुट फ़ाइलें ले जा सकते हैं findके रूप में cpioहै।)

आपके मामले में, आपको इन उपकरणों की आवश्यकता नहीं है ; उनके पास कोई उपयोगी प्रभाव नहीं होगा, क्योंकि आपके पास कई अलग-अलग फाइलें नहीं हैंzfs sendपहले से ही वही tarकिया है जो किया होगा। इसलिए आपके पास कोई फाइल नहीं है , केवल एक नामहीन स्ट्रीम है।

स्नैपशॉट को संपीड़ित करने के लिए, आपको बस इतना करना होगा कि zfsएक संपीड़न प्रोग्राम के माध्यम से आउटपुट को पाइप किया जाए :

zfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz

gzip -dc ~/backups/20070607.gz | zfs receive media/mypictures@20070607

(आप स्थानापन्न कर सकते हैं gzipके साथ xzया bzip2, या किसी अन्य धारा संपीड़न उपकरण अगर आप चाहते हैं।)


ओह, मैं देख रहा हूं, इसलिए मेरा ZFS आउटपुट डेटा स्ट्रीम नहीं है? तो यह बताएगा कि ओरेकल के उदाहरणों में कमांड में TAR शामिल क्यों नहीं है।
ianc1215

1
@ सोलीग्निस: आप इसे इस तरह से सोच सकते हैं: zfs sendपहले से ही ऐसा ही करता tarहै।
ग्रिटिटी

62

व्यसन और पॉल द्वारा पहले जो कहा गया था उसके अलावा :

इतिहास

"पुराने दिनों" में, cpio ( -cउपयोग किए गए विकल्प के साथ ) का उपयोग करने का उपकरण था , जब यह फ़ाइलों को अन्य UNIX व्युत्पन्न में स्थानांतरित करने के लिए आया क्योंकि यह टार की तुलना में अधिक पोर्टेबल और लचीला था । लेकिन टार पोर्टेबिलिटी को 1980 के दशक के उत्तरार्ध से हल माना जा सकता है।

दुर्भाग्य से यह उस समय के बारे में था जब विभिन्न विक्रेताओं ने cpio के -cप्रारूप को तैयार किया (बस GNU cpio और विकल्प के लिए मैनुअल पृष्ठ देखें )। उस समय टार cpio की तुलना में अधिक पोर्टेबल हो गया था ... लगभग पूरे एक दशक तक लगे जब तक कि विभिन्न UNIX विक्रेताओं ने इसे हल नहीं किया। GNU टार और GNU cpio स्थापित होने के बाद सभी एडिंस के लिए जरूरी था जो अलग-अलग स्रोतों से टेपों से निपटना था (फिर भी आजकल मैं मानता हूं)।-H

प्रयोक्ता इंटरफ़ेस

टार एक टेप कॉन्फ़िगरेशन फ़ाइल का उपयोग कर सकता है जहां व्यवस्थापक सिस्टम से जुड़े टेप ड्राइव को कॉन्फ़िगर करेगा। उपयोगकर्ता तब सिर्फ "वेल आई विल टेप टेप ड्राइव 1" को कहने के बजाय टेप के लिए सटीक डिवाइस नोड को याद रखने के लिए (जो बहुत भ्रमित हो सकता है और विभिन्न UNIX प्लेटफार्मों में भी नहीं है।

लेकिन मुख्य अंतर यह है:

टार अपने आप निर्देशिकाओं को खोजने में सक्षम है और कमांड लाइन तर्कों से समर्थित होने के लिए फाइलों या निर्देशिकाओं की सूची लेता है।

cpio केवल उन फ़ाइलों या निर्देशिकाओं को संग्रहीत करता है, जिनके बारे में उसे बताया गया है, लेकिन यह उप-प्रकारों को पुन: खोज नहीं करता है। इसके अलावा केन्द्रीय लोक सूचना अधिकारी मदों से संग्रहीत करने की सूची हो जाता है stdin - यही कारण है कि यह लगभग हमेशा के साथ संयोजन में प्रयोग किया जाता है खोजने के

टार के साथ तुलना करने पर एक cpio कमांड अक्सर शुरुआत करने वाले को भयावह लगता है :

 $ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
 $ tar czvf myfiles.tar.gz myfiles

मुझे लगता है कि मुख्य कारण है कि ज्यादातर लोग टार का उपयोग आर्काइव फाइल बनाने के लिए करते हैं: साधारण कार्यों के लिए जैसे कि एक पूर्ण निर्देशिका को बांधना आसान है।

इसके अलावा GNU टार वह विकल्प प्रदान करता है -zजो आर्क को मक्खी पर GNU ज़िप के साथ संपीड़ित करने का कारण बनता है , जिससे चीजें और भी आसान हो जाती हैं।

दूसरी ओर एक के साथ निफ्टी बातें कर सकते हैं खोजने और केन्द्रीय लोक सूचना अधिकारी । वास्तव में यह एक अधिक यूनिक्स की तरह दृष्टिकोण है: क्यों निर्देशिका ट्री ट्री खोज को cpio में शामिल करें यदि पहले से ही एक उपकरण है जो लगभग सभी का ख्याल रखता है: के बारे में सोच सकते हैं । दिमाग में आने वाली चीजें केवल एक निश्चित तिथि की तुलना में नई फाइलों का बैकअप ले रही हैं, फाइलों को एक ही फाइल सिस्टम में रहने वालों तक सीमित कर देती हैं या grep -vकुछ फाइलों को बाहर करने के लिए खोज-आउटपुट को फ़िल्टर कर रही हैं ...

जीएनयू टार के लोगों ने बहुत सारी चीजों को शामिल करने के लिए बहुत सारे काम खर्च किए जो कि पहले केवल cpio के साथ संभव थे । वास्तव में दोनों उपकरण एक-दूसरे से सीखते हैं - लेकिन केवल cpio टार के प्रारूप को पढ़ सकता है - अन्य तरीके से नहीं।

टार और आउटपुट प्रसंस्करण

आपके द्वारा कही गई एक अंतिम सूचना:

मुझे यह भी बताया गया था कि TAR STDOUT से संपीड़ित नहीं हो सकता। मैं बैकअप के लिए ZFS स्नैपशॉट को संग्रहीत / संपीड़ित करना चाहता हूं। मैं सोच रहा था कि क्या मैं इस प्रभाव को प्राप्त करने के लिए CPIO को bzip2 के साथ जोड़ सकता हूं।

खैर, टार के हर संस्करण (GNU या नहीं) का उपयोग पाइप में किया जा सकता है। -संग्रह के नाम के रूप में केवल एक ऋण चिह्न ( ) का उपयोग करें:

 $ tar cvf - myfiles | bzip > myfiles.tar.bz

इसके अलावा GNU टार--to-command एक पोस्टप्रोसेसर कमांड को निर्दिष्ट करने का विकल्प प्रदान करता है - हालांकि मैं अभी भी पाइप को प्राथमिकता दूंगा। हो सकता है कि कुछ हार्डवेयर उपकरणों पर लिखते समय इसका उपयोग हो।


यह 'एसटीडीआईएन' से अलग होगा, बल्कि 'एसटीडीयूएसटी' से भिन्न होता है .. 'एसटीडीटी से' .. वास्तव में मेरे लिए कोई मतलब नहीं है
जोकिम एलोफसन

खैर, मैं केवल मूल प्रश्न का हवाला दे रहा था। विचार - यह कुछ हद तक गलत है, लेकिन मुझे लगता है कि एक बिंदु मिलता है।
21

3
"क्यों डायरेक्टरी ट्री सर्च को cpio में शामिल किया गया है अगर पहले से ही एक उपकरण है जो लगभग सभी का ख्याल रखता है" अच्छा सवाल, लेकिन फिर आपको इसे कॉपी ( cp), चाल ( mv) diff, आदि के लिए भी पूछना होगा ; - )
मेक्की

1
trombonehero कहा : BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar। आपने कहा है only cpio may read the format of tar:। यह एक विरोधाभास नहीं है?
n611x007

6

टार और cpio में अनिवार्य रूप से एक ही फ़ंक्शन होता है, जो कि कई फ़ाइलों और निर्देशिकाओं के इनपुट से एक एकल सन्निहित फ़ाइल बनाना है। मूल रूप से यह परिणाम को टेप पर रखना था, लेकिन इन दिनों यह आमतौर पर एक संपीड़न उपयोगिता में फीड करने के लिए उपयोग किया जाता है जैसा कि आपने ऊपर दिया है। ऐसा इसलिए है क्योंकि एक बड़ी फ़ाइल को संपीड़ित करना बहुत सारी छोटी फ़ाइलों को संपीड़ित करने की तुलना में अधिक समय और स्थान दोनों कुशल है। आपको ध्यान देना चाहिए कि कई छवि प्रारूप (png, jpg आदि) पहले से ही बहुत संपीड़ित हैं, और वास्तव में थोड़ा बड़ा हो सकता है अगर संपीड़न उपयोगिता के माध्यम से डाला जाए।

न तो टार न ही cpio कोई कंप्रेशन खुद करते हैं। टार ने प्रभावी रूप से "जीत लिया" जो हम कुल फ़ाइलों को बनाने के लिए उपयोग करेंगे "युद्ध, लेकिन cpio को विभिन्न स्थानों में एक लुक प्राप्त होता है। मुझे एक के दूसरे किसी भी लाभ के बारे में पता नहीं है, टार अधिक सामान्यतः उपयोग किए जाने के माध्यम से जीतता है।

टार वास्तव में स्टडआउट और आउटपुट को स्टडआउट पर इनपुट ले सकता है - जिसे बाद में bzip2 में पाइप किया जाएगा जैसे कि आपके पास या कुछ समान है। यदि "z" विकल्प के साथ कहा जाता है, तो यह आउटपुट पर स्वतः ही gzip को आमंत्रित करेगा।


1
हाँ और -jbzip2 आह्वान नहीं है?
ianc1215

2
हाँ, -j bzip2 है और कुछ (अधिक नाराजगी?) संस्करण मिल गया है -J xv के रूप में, GNUtar थिसिस के लिए
जोकिम

4
जब आप विकल्प -a का उपयोग करते हैं, तो GNU टार के अधिकांश नवीनतम संस्करण संग्रह फ़ाइल नाम से वांछित संपीड़न प्रारूप का अनुमान लगा सकते हैं। तो यह: tar -caf myfiles.tar.xz myfiles/का उपयोग करके संपीड़ित होगा xzऔर इस tar -caf myfiles.tar.gz myfiles/का उपयोग कर संपीड़ित करेगा gzip
gerlos 17

5

मैंने ca में HP तकनीक सपोर्ट के लिए कहा। 1996 क्यों का उपयोग cpioअधिक tar

मुझे बताया गया कि टेप खिंचाव और बाहर पहनते हैं। जब tarटेप के एक अपठनीय हिस्से तक पहुँचता है तो यह विफल हो जाता है और त्रुटि संख्या देता है। जब cpioएक अपठनीय हिस्से तक पहुंचता है, तो यह अगले पठनीय ब्लॉक, रिसिनक्स और जारी रहता है।

मैंने कभी भी इसका समर्थन करने के लिए दस्तावेज़ीकरण नहीं देखा है, लेकिन हमेशा उपयोग किया जाता है cpio


पोस्ट के अनुसार, टार की बिटवाइज़ क्षति उस क्षेत्र / फ़ाइलों को स्थानीयकृत लगती है जो इसे प्रभावित करती है, जैसा कि आपने cpio के बारे में बताया था। oxfordrepo.blogspot.tw/2008/12/archive-file-resiliences.html
okwap

4

इसके अलावा ध्यान देने योग्य: पर (कम से कम) फ्रीबीएसडी और मैक ओएस एक्स, आप टार के साथ cpio फ़ाइलों में हेरफेर कर सकते हैं। BSD टार हुड के तहत libarchive का उपयोग करता है, इसलिए यह cpio, पैक्स, तेज संभाल सकता है ...

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


KTF कहा : only cpio may read the format of tar। आपने कहा है BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar:। यह एक विरोधाभास नहीं है?
n611x007

1
@ n611x007 यह उत्तर BSD टार के बारे में बात करता है। दूसरा शायद GNU टार के बारे में बात कर रहा है। वे अलग-अलग कार्यक्रम हैं।
नवीन

3

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

find . <predicates> | cpio -pdmv /destination/dir

समतुल्य tarकुछ इस तरह से शामिल होगा:

find . <predicates> | tar -T - -cf - | (cd /destination/dir; tar xvf -)

बेशक अन्य विकल्प हैं जैसे कि rsyncऔर दूसरे धागेcp --parents में चर्चा की गई है , लेकिन और के संयोजन द्वारा प्रस्तावित लचीलेपन के करीब कुछ भी नहीं आता है । अभिलेखागार बनाने के लिए सर्वव्यापी होने के साथ , यह एकमात्र कारण है जिसके लिए मैं अभी भी उपयोग करता हूं ।findcpiotarcpio

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