cd .. रूट फोल्डर पर


44

क्यों cd .., रूट फ़ोल्डर में टाइप किया गया, चेतावनी नहीं देता है या एक त्रुटि के साथ विफल रहता है?

मुझे अपेक्षा होगी:

/$ cd ..
-bash: cd: ..: No such file or directory

इसके बजाय, मुझे छोड़ दिया गया है /। बेशक, यह तब से ..मौजूद है /, और /बस की तरह है .। मुझे आश्चर्य है कि ऐसा क्यों है।


6
कोई जवाब नहीं, लेकिन यहाँ एक अच्छा पढ़ा हुआ है, जी पाइक ऑन जी + ने डॉटफाइल (ओं) की उत्पत्ति पर चर्चा की।
bsd

जवाबों:


53

ओपन ग्रुप के अनुसार (POSIX मानक के लिए जिम्मेदार):

प्रत्येक निर्देशिका में वास्तव में एक मूल निर्देशिका होती है जिसे पहली निर्देशिका में डॉट-डॉट नाम से दर्शाया जाता है । [...] फ़ाइल नाम डॉट-डॉट रूट निर्देशिका के सापेक्ष संदर्भित कार्यान्वयन-परिभाषित है। संस्करण 7 में यह स्वयं रूट निर्देशिका को संदर्भित करता है; यह POSIX.1-2008 में उल्लिखित व्यवहार है। कुछ संजाल प्रणालियों में निर्माण /../hostname/ का उपयोग किसी अन्य होस्ट की मूल निर्देशिका को संदर्भित करने के लिए किया जाता है, और POSIX.1 इस व्यवहार की अनुमति देता है।

(स्रोत)


29

आपको कोई त्रुटि नहीं मिलती है क्योंकि यहां तक ​​कि /निर्देशिका में वास्तव में के लिए एक वैध निर्देशिका प्रविष्टि है .., लेकिन अन्य निर्देशिकाओं के विपरीत यह स्वयं निर्देशिका को इंगित करता है और इस तरह समान व्यवहार करता है .:

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

पहले कॉलम आपको बताता है के रूप में, ., .., और /सभी एक ही आईनोड संख्या है और इस तरह एक ही फाइल सिस्टम प्रविष्टियां होती हैं।

तो भले ही आप के cd ..अंदर /आप बस रहें /


13
प्रश्न पूछता क्यों.. निर्देशिका प्रविष्टि नहीं है।
निक मैट्टो

3
मेरे दिमाग में आने का एकमात्र कारण यह है कि आप /किसी भी अन्य फ़ोल्डर की तरह ही इलाज करना चाहते हैं , जिसमें एक वैध प्रविष्टि भी शामिल है ..। अन्यथा आपको /सिस्टम के सभी अन्य फ़ोल्डरों की तुलना में अलग तरह से व्यवहार करना होगा ।
दोहन ​​जो

15

यह वहाँ है क्योंकि इसे हटाने से कर्नेल और सी लाइब्रेरी में विशेष-केस हैंडलिंग कोड बनाने की आवश्यकता होगी। अभी आप मान सकते हैं कि हमेशा '।' और '..' किसी भी डायरेक्टरी में जाएं।

केवल विशेष-केस कोड की आवश्यकता है अभी फाइलसिस्टम माउंटिंग कोड में है, जहां कोड माउंट बिंदु से निर्देशिका को इंगित करने के लिए '..' के इनोड मूल्य को ओवरराइड करता है, क्योंकि रूट निर्देशिका हमेशा रूट निर्देशिका नहीं होती हैं।


आखिर, किसी विशेष मामले से निपटने के लिए पेड़ की संरचनाओं में 'माता-पिता-रेफरल' का होना असंभव है, है न? मूल को परिभाषा द्वारा विशेष होना चाहिए, और मुखौटा बनाने का कोई भी प्रयास जो विशेष मामलों या भ्रम को कहीं और ले जाएगा।
मुसीफिल

@musiphil यूनिक्स में यहां के विशेष मामलों को mountकमांड और इसकी संबद्ध विशेष फाइल से अलग किया जाता है /etc/fstab
लूसर ड्रॉग

1

वास्तव में क्या .और क्या है, यह जांचने का एक और तरीका है:../

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

जैसा कि आप देख सकते हैं, .और ..इंगित किया गया है /


1

एक और कारण '..' में है कि अगर यह नहीं था तो यह एक और विशेष मामला पैदा करेगा: रूट निर्देशिका में अन्य सभी निर्देशिकाओं की तुलना में कम एक कड़ी होगी (सभी निर्देशिका नोड में n + 2 लिंक हैं, जहां n है अंदर प्रत्यक्ष उपनिर्देशिकाओं की संख्या)। यह निर्देशिका स्कैन के अनुकूलन के लिए विभिन्न कार्यक्रमों को तोड़ देगा।


0

यह अच्छा है कि यह वहां है, क्योंकि अन्यथा मैं ../../../../फ़ोल्डर से रूट पर जाने के लिए स्पैम नहीं कर पाऊंगा । यदि यह ..रूट पर अनुमति नहीं देता है , तो मैं काम कर रहे डायर के नीचे फ़ोल्डर्स की संख्या की गिनती करते हुए अटक जाऊंगा।


10
इसमें गलत क्या है cd /?
बाच

@ कभी-कभी, कीबोर्ड मैशिंग अधिक मजेदार है। इसके अलावा, कई परिस्थितियों में आप रूट पर जाने की कोशिश नहीं कर रहे हैं, ऐसे में ../बेहतर है। मैं PHP में बहुत सारे फ़ाइल संचालन भी करता हूं, जहां मैं /कई कारणों से नहीं कर सकता ।
स्काइलर इटनर

2
दूसरा पहलू यह है कि हो सकता है कि आप गलती से बहुत अधिक ../एस दर्ज कर लें और उस फ़ाइल को संचालित करें (या हटाएं) जिसे आपने बिना किसी त्रुटि के इरादा नहीं किया है।
jamesdlin

4
../आवश्यकता से अधिक बार दोहराते हुए और काम करने की इच्छा के अनुसार यह मेरे लिए एक (निष्क्रिय) तर्क त्रुटि जैसा दिखता है, भले ही फाइल सिस्टम स्पष्ट रूप से अनुमति देता हो।
मुसीफिल

कमांडों के बीच @musiphil टाइपिंग स्पेस - एक लॉजिक एरर है (यह मान लेना कि टेल -f | grep के बीच सभी स्पेस एक हैं)। अधिकांश यूनिक्स लोग इससे पीड़ित हैं। टाइपिंग '../ ..' एक विंडोज-लोक समस्या की तरह दिखता है (डिफ़ॉल्ट रूप से, X: \ Windows में cmd ​​शुरू होता है और आपको शुरू से ही स्पैम करना पड़ता है)। जब कोई बड़ी समस्या होती है तो छोटी समस्या को क्यों ठीक किया जाए? (रिक्त स्थान)
कगाली-सान २४'१४ को २०:०४
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.