मूल निर्देशिका को / साइन द्वारा निरूपित क्यों किया जाता है?


95

मैंने Google पर इसके बारे में कुछ शोध किया है, लेकिन परिणाम बादल गए थे। /रूट निर्देशिका को निरूपित करने के लिए संकेत का उपयोग क्यों किया जाता है। क्या इसके पीछे कोई ठोस कारण हैं?


12
इसका कारण यह है कि '/' निर्देशिका विभाजक है और जबकि रूट निर्देशिका स्वयं नामहीन है, ठीक उसी तरह जैसे cd /homeकि खाली नाम के अंत में cd /home/जोड़ना /उस निर्देशिका तक पहुँच प्रदान करता है।
एसएफ।

2
आप इस पढ़ा है: en.wikipedia.org/wiki/Root_directory ?
केवदोग K K

11
यह नामहीन है, क्योंकि जब अंदर से देखा जाता है, तो यह दृश्य निर्देशिका ट्री की सीमा होती है। दृश्य निर्देशिका पदानुक्रम केवल एक बड़ी पदानुक्रम में एक उप-हो सकता है, जैसे कि जब पथनाम लुकअप को chroot()कॉल के माध्यम से संशोधित किया गया है , लेकिन जब अंदर से देखा जाता है, तो यह दूर है।
थॉमस न्यूमैन

14
क्योंकि खाली स्ट्रिंग एक भयानक विकल्प होता!
बकुरीउ

3
जो उल्लेख किया गया है, इसके अलावा / का उपयोग करने के लिए रूट को इंगित करने के लिए पूर्ण और सापेक्ष पथ नामों के संदर्भ में कुछ साइड इफेक्ट्स दिए गए हैं। /some/dirहमेशा का मतलब है, (root)/some/dirजबकि some/dirवर्तमान कार्यशील निर्देशिका के सापेक्ष हमेशा। यह सिद्धांत वेब-URL उपयोग के लिए भी हस्तांतरणीय है।
Tor Valamo

जवाबों:


108

फ़ॉरवर्ड स्लैश /परिसीमन वर्ण है जो यूनिक्स जैसे ऑपरेटिंग सिस्टम में पथों को अलग करता है। ऐसा लगता है कि यह चरित्र 1970 के दशक में किसी समय चुना गया था, और उपाख्यानों के अनुसार , कारण इस से संबंधित हो सकते हैं कि यूनिक्स के पूर्ववर्ती, मल्टीिक्स ऑपरेटिंग सिस्टम ने >चरित्र को पथ विभाजक के रूप में इस्तेमाल किया था , लेकिन यूनिक्स के डिजाइनर पहले से ही आरक्षित थे वर्ण >और <I / O पुनर्निर्देशन को शेल कमांड लाइन पर अच्छी तरह से इंगित करने से पहले कि उनके पास एक बहु-स्तरीय फाइल सिस्टम था। इसलिए जब फाइलसिस्टम को डिजाइन करने का समय आया, तो उन्हें पाथनाम तत्व पृथक्करण को दर्शाने के लिए एक और वर्ण ढूंढना पड़ा।

यहां ध्यान देने वाली बात यह है कि 1970 के दशक के दौरान आम उपयोग में लेयर-सीगलर ADM-3A टर्मिनल है, जिसमें से अन्य चीजों के~ अलावा चरित्र का उपयोग करने का अभ्यास घर निर्देशिका का प्रतिनिधित्व करता है , /कुंजी के बगल में है >:

Lear-Siegler ADM-3A टर्मिनल का कीबोर्ड लेआउट

जैसे कि रूट निर्देशिका को एकल द्वारा निरूपित क्यों किया जाता है /, यह एक सम्मलेन है जो इस तथ्य से सबसे अधिक प्रभावित होता है कि रूट निर्देशिका, पदानुक्रम की शीर्ष-स्तरीय निर्देशिका है, और जबकि अन्य निर्देशिका इसके नीचे हो सकती हैं, आमतौर पर ऐसा नहीं होता है। मूल निर्देशिका के बाहर किसी भी चीज़ को संदर्भित करने का कारण। इसी प्रकार निर्देशिका प्रविष्टि का कोई नाम नहीं है, क्योंकि यह दृश्य निर्देशिका ट्री की सीमा है।


2
"जबकि अन्य निर्देशिकाएं इसके नीचे हो सकती हैं, आमतौर पर रूट निर्देशिका के बाहर कुछ भी संदर्भित करने का कोई कारण नहीं है।" मुझे यह समझ में नहीं आता है। मुझे यकीन नहीं है कि आप किस दिशा में "नीचे" से मतलब है, लेकिन पदानुक्रम पर "बाहर" कुछ भी नहीं है/ । यूनिक्स फाइलसिस्टम एक अकेला पेड़ है, जिसमें विभिन्न ड्राइव्स के लिए आरोह बिंदु होते हैं।
एलेक्सिस

4
वहाँ भी है chrootऔर इस तरह - आप नई जड़ के बाहर कुछ भी उपयोग नहीं कर सकते , लेकिन इसका मतलब यह नहीं है कि वे वहाँ नहीं हैं।
बोबसन

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

1
"चुरोट के बाद ऐसा नहीं है कि" आमतौर पर एक कारण नहीं है "सिस्टम रूट के बाहर जाने के लिए; यह असंभव है।" यह सादा गलत है। जिस समय chroot()यह शुरू किया गया था, तब इसके पास जेल जैसी कोई भी संपत्ति नहीं थी , यह केवल पथनाम संकल्प को प्रभावित करता था। आज भी, विशेषाधिकार प्राप्त प्रक्रियाएं डिजाइन द्वारा चेरोट से बाहर निकल सकती हैं । मैंने पूर्व टिप्पणीchroot() में भी उल्लेख किया है ।
थॉमस निमन

4
IIRC, मल्टिक्स कन्वेंशन न केवल >डायरेक्टरी सेपरेटर के रूप में उपयोग किया जाता है, बल्कि <पेरेंट डायरेक्टरी को भी संदर्भित करता है: <अपने आप में इसके समकक्ष था .., जबकि <fooइसके बराबर था ../foo। मैंने हमेशा पाया कि सौंदर्यवादी रूप से मनभावन।
मार्क रीड

55

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

एक फ़ाइल को नामित करने के लिए, आपको पेड़ की जड़ से पथ का वर्णन करने की आवश्यकता है। मल्टीिक्स ने पथ के नाम के लिए एक प्राकृतिक सिंटैक्स अपनाया, जहां अगर Pकिसी निर्देशिका का पथ है और Fकिसी फ़ाइल का नाम है, तो उस फ़ाइल के लिए सिंटैक्स है जिसे निर्देशिका के अंदर कहा जाता है ।P>FFP

उन समयों के लिए जब आप अपने आप को निर्देशिकाओं के साथ बोझ नहीं बनाना चाहते हैं, मल्टिक्स के पास काम करने वाली निर्देशिका की धारणा थी । एक निर्देशिका निर्देशिका के साथ एक नंगे फ़ाइल नाम को कार्यशील निर्देशिका में एक फ़ाइल के रूप में व्याख्या की जाती है।

इन नियमों को मिलाकर, fooकार्यशील निर्देशिका में एक फ़ाइल है; वर्किंग डायरेक्टरी foo>barकी चाइल्ड डायरेक्टरी में एक फाइल है foo, इत्यादि। ये नियम सापेक्ष पथों का वर्णन करते हैं, लेकिन रूट निर्देशिका से शुरू होने वाले पूर्ण पथ के निर्माण के लिए एक पूरक नियम की आवश्यकता होती है। यह देखते हुए कि बाएं से दाएं एक पथ का नाम पढ़ना जड़ से पेड़ की पत्तियों तक जाने से मेल खाता है, रूट को पथ नाम के बाईं ओर एक विशेष मार्कर द्वारा इंगित किया जाना चाहिए। चूंकि फ़ाइल नाम कभी खाली नहीं होते हैं (क्योंकि यह अक्सर भ्रमित होता है), कोई भी सापेक्ष पथ नाम कभी भी चरित्र से शुरू नहीं होता है >, जो इसे निरपेक्ष पथ नामों के लिए एक सुविधाजनक मार्कर बनाता है। इस प्रकार >fooफ़ाइल fooको रूट डायरेक्टरी में कहा जाता है, >foo>barवह फाइल जिसे barडायरेक्ट्री डाइरेक्टरी में कहा जाता हैfooरूट निर्देशिका में, और इसी तरह। यह रूट निर्देशिका को छोड़ देता है, जो खाली स्ट्रिंग हो सकता है; हालाँकि, अक्सर पथनाम के रूप में खाली स्ट्रिंग का उपयोग करना सुविधाजनक नहीं होता है, इसलिए इसके बजाय यह लिखा जाता है >, जिसका अतिरिक्त लाभ यह है कि एक पाथनाम निरपेक्ष है यदि और केवल यदि इसका पहला चरित्र है >

यूनिक्स ने मल्टिक्स से इस डिज़ाइन को अपनाया। चूंकि यूनिक्स ने पहले ही >अपने कमांड शेल में आउटपुट पुनर्निर्देशन के लिए चरित्र का उपयोग किया था , इसलिए इसके डिजाइनरों ने /पथ नामों में अलग निर्देशिकाओं के लिए एक अलग चरित्र चुना ।


11

यूनिक्स पर पथ नाम घटकों में, केवल दो वर्णों का उपयोग नहीं किया जा सकता है: अशक्त चरित्र, जो सी (तार की भाषा) और स्लेश में तार को समाप्त करता है, जो पथ विभाजक के रूप में आरक्षित है। इसके अलावा, पथ घटक खाली तार नहीं हो सकते।

इसलिए, एक पथ नाम में, हमारे पास केवल दो प्रकार के टोकन हैं: एक स्लैश, और एक घटक।

मान लीजिए कि, बिना किसी नए टोकन को जोड़े , हम दो तरह के रास्तों का समर्थन करना चाहेंगे, रिश्तेदार और निरपेक्ष। इसके अलावा, हम मूल निर्देशिका का उल्लेख करने में सक्षम होना चाहते हैं, जिसका कोई नाम नहीं है (इसका कोई माता-पिता नहीं है जो इसे एक नाम देगा)।

केवल स्लैश का उपयोग करके हम कैसे संबंधित पथों, निरपेक्ष रास्तों का प्रतिनिधित्व कर सकते हैं और रूट डायरेक्टरी का उल्लेख कर सकते हैं?

भाषा का विस्तार करने का सबसे स्पष्ट तरीका (नए टोकन की शुरूआत के अलावा) नया वाक्यविन्यास बनाना है: अमान्य सिंटैक्स वाले टोकन के संयोजन को नया अर्थ दें।

पथ जो एक स्लैश के साथ शुरू होते हैं, इससे कोई मतलब नहीं है, इसलिए एक मार्कर के रूप में एक प्रमुख स्लैश का उपयोग क्यों न करें जो इंगित करता है कि "यह पथ सापेक्ष के बजाय पूर्ण है"।

एक पथ जिसमें कुछ भी नहीं है, लेकिन एक स्लैश भी अमान्य है, इसलिए इसे "रूट निर्देशिका" का अर्थ क्यों न निर्दिष्ट करें।

ये दो अर्थ एक साथ जुड़ते हैं क्योंकि एक पूर्ण मार्ग मूल निर्देशिका में खोजना शुरू करता है। दूसरे शब्दों में एक प्रमुख स्लैश का अर्थ माना जा सकता है:

  • मूल निर्देशिका पर जाएँ, और स्लैश वर्ण का उपभोग करें।
  • यदि पथ में अधिक सामग्री है, तो इसे एक सापेक्ष पथ के रूप में संसाधित करें, अन्यथा आप कर रहे हैं।

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

सिंटैक्स के ऊपर यह सब होने के साथ, हमारे पास अभी भी एक बिना मतलब का सिंटैक्स है: डबल स्लैश, ट्रिपल स्लैश और आगे।

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

एक और महत्वपूर्ण विचार यह है कि केवल स्ट्रिंग अभ्यावेदन का उपयोग करके पथ के आसान जोड़तोड़ संभव हैं। उदाहरण के लिए, हम एक नए मूल निर्देशिका के लिए पूर्ण पथ को "पुनः रूट" कर सकते हैं:

OLD_PATH=/old/path
NEW_HOME=/new/home

NEW_PATH="$NEW_HOME$OLD_PATH"  /new/home/old/path

यह काम नहीं करेगा अगर हम किसी अन्य तरीके से निरपेक्ष रास्तों को इंगित करें, जैसे एक प्रमुख डॉलर संकेत या जो कुछ भी:

OLD_PATH=^old/path  # ^ means absolute path
NEW_HOME=^new/home

# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"

यूनिक्स शैली के रास्तों से निपटने के दौरान कुछ मामलों में इस प्रकार की कोडिंग की आवश्यकता होती है, लेकिन इसमें कम है।


8
"स्लैश को टाइप करना आसान है, बिना किसी बदलाव के।" हो सकता है कि आप तालाब के पार वहां से आसानी से निकल जाएं, लेकिन यहां फिनलैंड में हमें न केवल पाली को दबाना है, बल्कि सभी को पंक्ति संख्या तक भी पहुंचाना है । ; पी
थॉमस निमन

1
@ThomasNyman ऐसा हो सकता है कि केन थॉम्पसन के लिए विदेशी कीबोर्ड लेआउट संभवतः एक चिंता का विषय नहीं थे। स्लैश यूनिक्स डेवलपर्स और उनके शुरुआती उपयोगकर्ताओं के लिए टाइप करना आसान था।
कज़

1
काफी उचित। यद्यपि मैं ज्यादातर मजाक कर रहा था, मुझे यह दिलचस्प लगता है (और कभी-कभी मनोरंजक) कि कैसे लंबी विरासत के साथ सॉफ्टवेयर में कुछ ख़ासियत को समकालीन हार्डवेयर में विशिष्टताओं द्वारा समझाया जा सकता है ।
थॉमस निमन

@ThomasNyman हाहा, मुझे आश्चर्य है कि अगर बिल जॉय स्वयं लॉग इन करते हैं और उस ADM-3A पृष्ठ में {उद्धरण-लेख} भागों को अपडेट करते हैं, तो कुछ "विकीडिकहेड" करेंगे, फिर इस लेख में "इस लेख में मूल शोध शामिल हैं"। :)
कज़

@ThomasNyman, अब मेरा मानना ​​है कि "पेडल" कीबोर्ड हैं जिससे आप /अपने दाहिने पैर का उपयोग कर टाइप कर सकते हैं । जैसे कोई पियानो बजा रहा हो।
पचेरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.