2011-12-22 37 views
6

वाह, मैं वास्तव में कभी नहीं सिमलिंक का उपयोग किया है कि ज्यादा से पहले, लेकिन यह वास्तव में boggling है:सिम्लिंक किसी अन्य निर्देशिका में लिंक होने पर काम नहीं कर रहा है?

bash-3.2$ echo "weird" > original.txt 
bash-3.2$ mkdir originals 
bash-3.2$ mv original.txt originals/ 
bash-3.2$ cat originals/original.txt 
weird 
bash-3.2$ mkdir copies 
bash-3.2$ ln -s originals/original.txt copies/copy.txt 
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory 
bash-3.2$ ls copies/copy.txt 
copies/copy.txt 
bash-3.2$ ls -l copies/copy.txt 
lrwxr-xr-x 1 zach staff 22 Dec 22 01:23 copies/copy.txt -> originals/original.txt 
bash-3.2$ cat originals/original.txt 
weird 
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory 
bash-3.2$ cd copies/ 
bash-3.2$ cat copy.txt 
cat: copy.txt: No such file or directory 

क्यों मैं बिल्ली प्रतियां निर्देशिका में सिमलिंक नहीं?

यदि मैं प्रतियों के अंदर से सिम्लिंक बना देता हूं, तो मैं इसे ठीक कर सकता हूं। अगर मैं वर्तमान निर्देशिका में सिम्लिंक बना देता हूं, तो मैं इसे ठीक कर सकता हूं। अगर मैं वर्तमान निर्देशिका में सिम्लिंक बना देता हूं और फिर इसे कॉपी/पर ले जाता हूं, तो मुझे "प्रतियां/copy.txt: ऐसी कोई फ़ाइल या निर्देशिका नहीं मिलती"।

उत्तर

15

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


कृपया लिंक के सापेक्ष पूर्ण पथ या पथ का उपयोग करें।

बदलें:

ln -s originals/original.txt copies/copy.txt 

करने के लिए:

# absolute 
ln -s /path/to/originals/original.txt copies/copy.txt 

# relative 
cd copies 
ln -s ../originals/original.txt copy.txt 
+0

आपको एक पूर्ण पथ का उपयोग करने की आवश्यकता नहीं है। जब तक आप अपने पथ को एक बिंदु के साथ पेश करते हैं (जिसका अर्थ है 'आप वर्तमान निर्देशिका पथ') तो आपको अच्छा होना चाहिए। – adamwong246

5

तुम भी इस लक्ष्य को हासिल करने के लिए रिश्तेदार पथ का उपयोग कर सकते हैं।

तरह
cd copies 
ln -s ../originals/original.txt copy.txt 

यह

काम जब आप प्रतीकात्मक कड़ी है जो यह प्रतियां निर्देशिका से फ़ाइल को संदर्भित करने की कोशिश करता खोलने के लिए और के बाद से जो मौजूद नहीं है आपको लगता है कि त्रुटि हो रही है जाएगा।

जब आप सापेक्ष या पूर्ण पथ का उपयोग करते हैं तो यह समस्या हल हो जाएगी।

+0

सिम्लिंक बनाता है जो एक स्क्रिप्ट लिखते समय, क्या यह निर्दिष्ट करने का कोई तरीका है कि कौन सी निर्देशिका से संबंधित सापेक्ष पथ बनाया जाना चाहिए? – user225643

+0

स्क्रिप्ट के साथ आपको पूर्ण पथ के लिए जाना चाहिए।प्रतीकात्मक लिंक रखने के लिए एक निश्चित निर्देशिका है और फिर निर्देशिका – Raghuram

+0

में किसी भी फ़ाइल से संबंधित लिंक बनाएं, सभी रिश्तेदार सिम्लिंक लिंक निर्देशिका में मौजूद निर्देशिका से संबंधित हैं। कोई आवश्यकता नहीं है कि एक लिंक को बनाए जाने पर मौजूदा फ़ाइल को इंगित करना चाहिए (जैसा कि आपने पाया है)। रिश्तेदार लिंक या पूर्णता की पसंद लिंक बनाने के विलुप्त होने पर नहीं बनाई जानी चाहिए, लेकिन गीलेर आप एक रिश्तेदार लिंक या एक पूर्ण चाहते हैं। याद रखें कि इसे बनाए जाने के बाद एक रिश्तेदार लिंक को स्थानांतरित करने से फ़ाइल के पूर्ण पथ को बदल दिया जाता है। रूपांतरण के लिए यहां देखें: http://stackoverflow.com/questions/2564634/bash-convert-absolute-path-into-relative-path-given-a-current- निर्देशिका –

1

एक उदाहरण पर विचार करें जहां आप अपने एप्लिकेशन लॉग को कहीं और सिंक्रनाइज़ करना चाहते हैं, जो एक निर्देशिका हो सकती है जो द्वितीयक निर्देशिका में माउंट की जाती है जिसका आकार आपके सर्वर को काम करना बंद कर देगा। अब आरोहित निर्देशिका आपके लिए लक्षित होगी और आपको अपनी लॉग निर्देशिका के लिए इस निर्देशिका में एक सिम्लिंक बनाना चाहिए।

मान लें कि आपकी एप्लिकेशन निर्देशिका/home/ubuntu/my_app है और एक बार जब आप अपना आवेदन शुरू करेंगे तो यह आपकी my_app निर्देशिका के अंदर एक लॉग निर्देशिका उत्पन्न करेगा। अब अंतिम लक्ष्य डिस्क उपयोग बोझ को घुड़सवार निर्देशिका में बदलना है और वर्तमान में हमारी ऐप निर्देशिका में हमारी लॉग निर्देशिका मौजूद नहीं है। तो बस आगे बढ़ो और नीचे दिए गए चरणों का पालन करें:

mkdir /path_to_mounted_directory/log 
ln -s /path_to_mounted_directory/log /home/ubuntu/my_app_log 

यह पहली घुड़सवार अनुभाग में एक नामी निर्देशिका लॉग पैदा करेगा और इस निर्देशिका में अपनी ऐप्लिकेशन लॉग नक्शा होगा। एप्लिकेशन लॉग फ़ोल्डर में जो भी फ़ाइल आप जोड़ते हैं, वह स्वचालित रूप से माउंटेड निर्देशिका से जुड़ा होगा और इस प्रकार आप मूल फाइल निर्देशिका से या घुड़सवार फ़ोल्डर से कहीं भी इन फ़ाइलों को पढ़ सकते हैं।