'/ ’में' ..’ प्रविष्टि क्यों है?


81

इसने मुझे हमेशा हैरान किया है। मूल निर्देशिका में मूल निर्देशिका का संदर्भ क्यों होता है?

बॉब @ बॉब: / $ एलएस-ए
। घर का निर्माण करें lib32 mnt .rpmdb sys vmlinuz
.. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old
बिन देव initrd.img.old खोया + मिला सेलिनक्स यूएसआर
बूट आदि लिबास मीडिया रूट srv var

मैं समझता हूं कि निर्देशिकाओं को फाइलसिस्टम में कैसे प्रबंधित किया जाता है - प्रत्येक निर्देशिका में n + 2 पॉइंटर्स ही (n = निर्देशिका के अंदर उपनिर्देशिका की संख्या) है। प्रत्येक तात्कालिक उपनिर्देशिका के लिए, एक अपने माता-पिता के लिए, और एक अपने लिए।

लेकिन /माता-पिता क्या है ?

जवाबों:


73

/..के अंक /:

$ ls -id /
2 /
$ ls -id /..
2 /..

दोनों में समान इनोड संख्या है, जो इस प्रणाली पर 2 होती है। (सटीक मूल्य कोई फर्क नहीं पड़ता।)

यह संगति के लिए किया जाता है। इस तरह, यह जाँच करने के लिए कि यह वर्तमान में जब ..एक मार्ग में प्रक्रिया करता है तो कर्नेल में कोड नहीं होना चाहिए । आप cd ..हमेशा के लिए कह सकते हैं , और जड़ से अधिक गहराई तक कभी नहीं जा सकते ।


20
@ जॉर्ज मुझे लगता है कि कारनामों का लाभ लेने वाले रिश्तेदार पथ का उपयोग करते हैं; आप वर्तमान फ़ोल्डर लगता है की जरूरत नहीं है, तो आप सिर्फ करना../../../../../../../../../../../../../../../../etc/passwd
माइकल Mrozek

21
क्या फर्क पड़ता है कि सिर्फ / etc / passwd का उपयोग करने से?
जलीगेरे

9
@jlliagre: ऐसे प्रोग्राम हैं जो यह जांचते हैं कि क्या कोई फ़ाइल वर्तमान निर्देशिका के अंतर्गत है या नहीं यह परीक्षण करके /। बीच में ../(शुरुआत में जरूरी नहीं!) और प्रतीकात्मक लिंक, यह करना बहुत कठिन है, विशेष रूप से हमलावर को प्रोग्राम की नाक के नीचे चलती निर्देशिका पर विचार करना चाहिए।
गिल्स

4
मैं देखता हूं, उन्हें कम से कम canonicalize_file_name या realpath का उपयोग करना चाहिए।
जुलैग्रे

5
@ मुसिफिल: यह अच्छी बात है। माइकल सिर्फ इशारा कर रहा था कि यह एक ऐसी विशेषता है जिसका फायदा बुरे छोरों के लिए उठाया जा सकता है, अगर कोड को शोषण से निपटने के लिए नहीं लिखा गया है। अगर हम उन सभी सुविधाओं से छुटकारा पा लेते हैं जिनका शोषण किया जा सकता है, तो कंप्यूटर बहुत ही सुस्त चीजें होंगी।
वॉरेन यंग

38

यह वहां है क्योंकि यह यूनिक्स द्वारा की गई गारंटी है: प्रत्येक निर्देशिका में दो प्रविष्टियां होती हैं, .जो स्वयं को संदर्भित करती है, और ..जो माता-पिता को संदर्भित करती है।

वर्तमान नामस्थान की रूट डायरेक्टरी विशेष है, जो कि ..उसी चीज की ओर इशारा करती है ., लेकिन ओएस द्वारा कार्यक्रमों के लिए की गई गारंटी को तोड़ने के लिए इतनी खास नहीं है। जब वे अनुबंध टूट जाते हैं, तो चीजें गलत हो जाती हैं और हर कोई उंगलियां उठाता है।

रूट निर्देशिका जिसे आप डिस्क पर फाइल सिस्टम में देख सकते हैं, वास्तव में एक अलग मूल निर्देशिका है। माउंटेड नेमस्पेस में दिए गए फाइल सिस्टम का दृष्टिकोण वही है जो इसके लिए .. = .नियम लागू करता है /। इसलिए यदि आप chroot()जेल में हैं, तो आप देखेंगे /.. = /कि जेल के बाहर कोई व्यक्ति इसके बजाय /path/to/jail/..देखेगा /path/to


1
कितने कार्यक्रमों "अनुबंध" है कि इस पर निर्भर /है ..ही कि अंक? मुझे लगता है कि यह न के बराबर (या अधिक) स्वीकार्य /हो सकता है ..
मुशीफिल

क्या किसी के पास कोई स्रोत है जो इस सिद्धांत की पुष्टि करता है?
जूलियन होल्मन

1
ठीक है, man 5 dirएक बीएसडी सिस्टम पर आपको प्रलेखित एपीआई के माध्यम से चलना होगा, और एपीआई में बताए गए आइटम अनुबंध का हिस्सा हैं।
फिल पी।

1
खोज में एक अनुकूलन है जो n + 2 अनुबंध पर निर्भर करता है।
ctrl-alt-delor-

2
ओह, और यदि आप एक स्रोत चाहते हैं, तो बस विनिर्देश पढ़ें। POSIX में pubs.opengroup.org/onlinepubs/9699919799 खंड 4.12 में: "विशेष फ़ाइल नाम डॉट को उसके पूर्ववर्ती द्वारा निर्दिष्ट निर्देशिका के लिए संदर्भित करेगा। विशेष फ़ाइल नाम डॉट-डॉट अपने पूर्ववर्ती निर्देशिका की मूल निर्देशिका को संदर्भित करेगा। एक विशेष के रूप में। मामले में, रूट निर्देशिका में, डॉट-डॉट स्वयं रूट निर्देशिका को संदर्भित कर सकता है। "
फिल पी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.