जवाबों:
एक और मुद्दा मेरे दिमाग में आता है जहाँ cat
बनाम cp
एक महत्वपूर्ण अंतर होता है:
परिभाषा के अनुसार, बिल्ली विरल फाइलों का विस्तार करेगी, "वास्तविक" शून्य बाइट्स के साथ अंतराल में भरना, जबकि सीपी कम से कम छेदों को संरक्षित करने के लिए कहा जा सकता है।
विरल फाइलें वे फाइलें हैं जहां अंतरिक्ष को संरक्षित करने के लिए मेटाडेटा द्वारा शून्य बाइट्स के दृश्यों को बदल दिया गया है। आप dd के साथ एक बनाकर परीक्षण कर सकते हैं, और अपनी पसंद के टूल के साथ इसे डुप्लिकेट कर सकते हैं।
एक विरल फ़ाइल बनाएँ (मुसीबत से बचने के लिए / tmp को पहले से बदलकर - अंतिम नोट देखें):
15> cd /tmp
16> dd if=/dev/null of=sparsetest bs=512b seek=5
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
इसे आकार दें - इसे कोई स्थान नहीं लेना चाहिए।
17> du -sh sparsetest
0 sparsetest
इसे cp और चेक साइज़ के साथ कॉपी करें
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecp
अब इसे कैट और चेक साइज़ के साथ कॉपी करें
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecat
अपने व्यवहार पर जाँच करने के लिए अपने पसंदीदा उपकरण आज़माएँ
साफ करना मत भूलना।
सावधानी के अंतिम नोट: अगर आपके बैकअप सिस्टम में उनकी फाइल योजना का हिस्सा है, या सिस्टम की भलाई के लिए महत्वपूर्ण है, तो इस तरह के प्रयोग आपके स्थानीय sysadmin के साथ अपनी प्रसिद्धि को बढ़ाने का अंतर्निहित मौका है। बैकअप के लिए उपकरण की अपनी पसंद के आधार पर, वह कभी भी अधिक टेप मीडिया की आवश्यकता को समाप्त कर सकता है, क्योंकि उसने कभी भी उस 0-बाइट फ़ाइल का बैकअप लेना संभव नहीं समझा, जो कि जीरो के टेराबाइट्स तक विस्तारित हो जाती है।
अन्य फ़ाइलों को जो न तो बिल्ली के साथ कॉपी किया जा सकता है और न ही cp में डिवाइस-विशेष फाइलें शामिल होंगी, आदि। यह आपके कॉपी डिवाइस के कार्यान्वयन पर निर्भर करता है कि क्या यह डिवाइस नोड को डुप्लिकेट करने में सक्षम है, या यदि यह इसके बजाय इसकी सामग्री की नकल करेगा।
cp
विरल फाइलों पर अपने व्यवहार को नियंत्रित करने के लिए एक विकल्प है; जैसे, --sparse=never
कमांड लाइन पर निर्दिष्ट, cp
के रूप में के रूप में धीमी है cat
।
कीथ की टिप्पणी के अनुसार , cp
कुछ अनुमतियों को संरक्षित cat
करता है , और umask
संकेत के रूप में नई फ़ाइल बनाता है। तो $2
यह अनुमति सुरक्षित नहीं है जो $4/vmlinuz
बहुत साफ है, जबकि अगर कुछ अजीब अनुमति निर्धारित है $3
, तो $4/System.map
वह रखेगा।
cat
व्रत की विशेषता है ?
cat
तेजी से?
उन दोनों मामलों में दोनों की समान कार्यक्षमता है, लेकिन cp शुद्ध रूप से एक फ़ाइल ऑपरेशन है। "इस फाइल को ले लो और वहाँ पर इसकी एक प्रति बनाओ"।
दूसरी ओर, बिल्ली का इरादा सांत्वना के लिए एक फ़ाइल की सामग्री को डंप करने का है। "इस फ़ाइल को लें और इसे स्क्रीन पर प्रदर्शित करें" और फिर निन्जा पर स्क्रीन पर हमला करें और आउटपुट को कहीं और रीडायरेक्ट करें।
cp आम तौर पर अधिक कुशल होगा, क्योंकि केवल पुनर्निर्देशन नहीं हो रहा है, केवल स्थान A से स्थान B तक बाइट्स की एक सीधी नकल है।
बिल्ली होगी read bytes -> output to console -> intercept output -> redirect to new file
।
cat
वास्तव में output to console -> intercept output -> redirect to new file
, बिल्ली के लिए आउटपुट फ़ाइल stdout या एक सामान्य फ़ाइल हो सकती है, यह फ़ाइल के लिए सिर्फ आउटपुट देगा, जब तक कि इनपुट आउटपुट के समान नहीं होता।
cat
कंसोल से कोई लेना-देना नहीं है। दोनों cat
और cp
इनपुट फ़ाइल और आउटपुट फाइल करने के लिए लिखने से पढ़ें। साथ cat
, आउटपुट फ़ाइल खोल द्वारा खोला जाता है, के साथ जबकि cp
, आउटपुट फ़ाइल द्वारा खोला जाता है cp
; इससे प्रदर्शन में कोई फर्क नहीं पड़ता। cp
तेजी से हो सकता है, लेकिन एक पूरी तरह से अलग कारण के लिए: cp
स्रोत और लक्ष्य उपकरणों के आधार पर प्रदर्शन के लिए सही चंक आकार का अनुमान लगाने की कोशिश के कुछ कार्यान्वयन ; के कार्यान्वयन को cat
परेशान नहीं करेगा।
यह वास्तव में प्राथमिकता का विषय है, IMHO।
जब तक आप फ़ाइल स्वामित्व / समूह को संरक्षित करने के लिए -p स्विच के साथ cp कमांड का उपयोग नहीं करते हैं तब तक कोई वास्तविक अंतर नहीं है। अन्यथा, यह कार्यात्मक रूप से एक ही बात है। मार्क का उत्तर बहुत अधिक स्पष्ट रूप से स्पष्ट और सटीक है।
cp
बिना कुछ अनुमतियों -p
को संरक्षित करता है । उदाहरण के लिए, यदि स्रोत फ़ाइल निष्पादन योग्य है, तो लक्ष्य फ़ाइल को निष्पादन योग्य बना देगा, लेकिन ऐसा नहीं होगा। cp
cat
cp
मूल की तरह ही एक फ़ाइलcat
बनाता है , जबकि एक ही सामग्री के साथ एक नई फ़ाइल बनाता है।