जिस तरह से फाइलसिस्टम काम करता है, एक निर्देशिका वास्तव में फाइलों से युक्त फ़ोल्डर नहीं होती है, बल्कि एक निर्देशिका एक फाइल होती है जिसमें इनकोड पॉइंटर्स होते हैं जो "बच्चे" से जुड़े होते हैं। मतलब, फाइल सिस्टम के नजरिए से, एक फाइल एक फाइल होती है, लेकिन एक डायरेक्टरी सिर्फ एक फाइल होती है जिसमें कनेक्टेड फाइलों की सूची होती है।
तो कमांड लाइन के नजरिए से, ऐसा करना:
$ cp dir1 copyDir1
मूल रूप से नामित फ़ाइल की प्रतिलिपि बनाई जाएगी, जिसका नाम dir1एक नई फ़ाइल है copyDir1। और जहां तक फाइल सिस्टम का सवाल है, तो dir1यह सिर्फ एक फाइल है; तथ्य यह है कि यह एक "निर्देशिका" केवल तब स्पष्ट होगा जब फाइल सिस्टम वास्तव में dir1यह देखने के लिए जांचता है कि वास्तव में बिट्स का ढेर क्या है।
-rझंडा फ़ाइल / निर्देशिका वृक्ष नीचे रिकर्सिवली रोल करने के लिए फाइल सिस्टम बताता है और किसी भी और सभी सामग्री है कि एक नई जगह के लिए एक उस फ़ाइल की "बच्चा" हो सकता है नकल।
अब ऐसा क्यों है कि यह अतिरेक या अतिरेक लग सकता है, यह वास्तव में फ़ाइल सिस्टम से निपटने के ऐतिहासिक तरीकों के लिए आता है। साथ ही एक ऐसी प्रणाली का निर्माण करना जो सभी प्रकार की उपयोगकर्ता संबंधी त्रुटियों से सुरक्षित हो; आकस्मिक और साथ ही जानबूझकर।
मतलब, मान लीजिए कि आपके पास ~/binअपनी होम डायरेक्टरी में एक फाइल है जिसे आप कॉपी करना चाहते हैं लेकिन गलती से छोड़ दिया गया है ~-क्योंकि आप एक इंसान हैं और गलतियाँ करते हैं - तो बस /binइस तरह से:
cp /bin/ ~/copy_of_bin
झंडे /binकी आवश्यकता के साथ संयुक्त निर्देशिका होने के "सुरक्षा जाल" के साथ -rआप गलती से उस सिस्टम के पूरे बाइनरी रूट की नकल करने से बचेंगे जो आप अपने घर की निर्देशिका में हैं। यदि वह सुरक्षा जाल मौजूद नहीं था, तो एक मामूली या संभवतः बड़ी दुर्घटना होगी।
यहाँ तर्क दिया जा रहा है कि दिनों में पूर्व-जीयूआई (ग्राफिकल यूजर इंटरफेस) तार्किक / व्यवहारिक सम्मेलनों को सेट करने की आवश्यकता है ताकि उपयोगकर्ता द्वारा बनाई गई गलतियाँ हो सकती हैं जो सिस्टम को मार सकती हैं। और -rझंडे का उपयोग करना अब उनमें से एक है।
यदि वह अतिश्योक्तिपूर्ण लगता है, तो आधुनिक जीयूआई सिस्टम की तुलना में आगे कोई नहीं देख सकता है जो कि लिनक्स फाइल सिस्टम के ऊपर हो सकता है। एक जीयूआई बुनियादी उपयोगकर्ता मुद्दों को संबोधित करता है जैसे कि किसी को आसानी से फ़ाइलों और निर्देशिकाओं को खींचने और छोड़ने की अनुमति देता है।
लेकिन पाठ-आधारित इंटरफेस के दायरे के मामले में, उस दुनिया के भीतर "उपयोगकर्ता अनुभव" के बहुत सारे मूल रूप से तार्किक और hueristic- आधारित सड़क धक्कों हैं जो उपयोगकर्ता को जांच में रखने में मदद करते हैं ताकि संभावित आपदा को रोका जा सके।
इसी तरह लिनक्स / यूनिक्स फाइल सिस्टम में डिफ़ॉल्ट रूप से 777अनुमतियाँ और sudoअधिकार सेट नहीं होते हैं और जब उपयोगकर्ता 777अनुमतियाँ सेट करता है या वास्तविक sudoअधिकार प्राप्त करता है तो वास्तविक सिस्टम प्रशासक कैसे विचलित होते हैं। ये बुनियादी चीजें हैं जो सिस्टम को स्थिर और "उपयोगकर्ता प्रमाण" जितना संभव हो सके सुनिश्चित करने के लिए करती हैं; शॉर्ट-सर्किट के कारण उन सम्मेलनों में भाग लेने वाले किसी भी व्यक्ति को यह जानने के बिना भी उनके सिस्टम को नुकसान होगा।
अतिरिक्त जानकारी: यूनिक्स स्टैक एक्सचेंज साइट पर यहां एक और जवाब एक अच्छी व्याख्या देता है कि किसी निर्देशिका की गैर-पुनरावर्ती प्रतिलिपि समस्याग्रस्त क्यों है; जोर मेरा है।
खैर, -R फ्लैग के बिना, केवल फाइलों को कॉपी करना संभव है, क्योंकि यह असामान्य है कि कोई व्यक्ति गैर-पुनरावर्ती रूप से एक निर्देशिका की प्रतिलिपि बनाना चाहता है: एक गैर-पुनरावर्ती प्रतिलिपि का परिणाम सीधे निर्देशिका के लिए दूसरे नाम में होगा, सीधे इंगित करने के लिए। एक ही निर्देशिका संरचना।
क्योंकि शायद ही कभी लोग क्या चाहते हैं, और वास्तव में एक अलग कार्यक्रम है जो ऐसा करता है (ln), निर्देशिका की एक गैर-पुनरावर्ती प्रतिलिपि की अनुमति नहीं है।
इसलिए यदि कोई निर्देशिका वास्तव में एक फ़ाइल है जिसके अंदर इनोड आइटम हैं, तो उस फ़ाइल की एक सीधी प्रतिलिपि बनाने से यह बराबर होगा कि एक कड़ी कैसे काम करेगी। जो किसी को नहीं चाहिए।