जवाबों:
एक और मुद्दा मेरे दिमाग में आता है जहाँ 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को संरक्षित करता है । उदाहरण के लिए, यदि स्रोत फ़ाइल निष्पादन योग्य है, तो लक्ष्य फ़ाइल को निष्पादन योग्य बना देगा, लेकिन ऐसा नहीं होगा। cpcat
cpमूल की तरह ही एक फ़ाइलcatबनाता है , जबकि एक ही सामग्री के साथ एक नई फ़ाइल बनाता है।