पहला मुद्दा:
आपको उद्धृत करते हुए:
रचनाएँ और विलोपन ठीक काम करते हैं। लेकिन अपडेट काम नहीं करते। इस आदेश को पूरा करने के बाद, सिमलिंक अमान्य हो जाता है।
दी गई निर्देशिका संरचना के साथ समस्या:
~ / स्क्रिप्ट / परीक्षण / ~ / स्क्रिप्ट / परीक्षण / रिमोट_लोक / ~ / स्क्रिप्ट / परीक्षण / रिमोट_लोक / साइट 1 / ~ / स्क्रिप्ट / परीक्षण / रिमोट_लोक / साइट 1 / सामान 1 / ~ /test/remote_loc/site2/stuff2.txt ~ / स्क्रिप्ट / परीक्षण / रिमोट_लोक / साइट 2 / ~ / स्क्रिप्ट / परीक्षण / रिमोट_लोक / साइट 3 / stuff3.txt
और कमांड का उपयोग कर:
ln -s /remote_loc/site1 test_link
क्या यह आपके $ PWD में एक प्रतीकात्मक लिंक बनाता है, या वर्तमान वर्किंग डायरेक्टरी, जो / /, या root_loc / site1 पर /, या गैर-मौजूदा फ़ाइल को इंगित करता है।
यदि आपका पीडब्ल्यूडी ~ / लिपियों में है / तो आपको इसका उपयोग करना चाहिए:
ln -s remote_loc/site1 test_link
अन्यथा आप पूर्ण निरपेक्ष पथ का उपयोग कर सकते हैं:
ln -s /home/yourusername/remote_loc/site1 test_link
दूसरा अंक:
आपको उद्धृत करते हुए:
मैंने यहाँ और वहाँ पढ़ा है कि सिम्लिंक को अपडेट / ओवरराइड करना संभव नहीं है। तो नेट पर विरोधाभासी जानकारी है। कौन सही है? यदि एक सिमलिंक को अद्यतन / ओवरराइड किया जा सकता है, तो मैं इसे कैसे प्राप्त कर सकता हूं?
आपके प्रश्न का उत्तर देने के लिए "कौन सही है", मुझे यकीन नहीं है कि आप वास्तव में क्या पढ़ते हैं, या यह कैसे समझा गया था। लेकिन, निम्नलिखित को स्पष्ट करने में मदद करनी चाहिए:
- क्या अद्यतन किया जा सकता है, और
- उपयुक्त स्विच का उपयोग किए बिना क्या अद्यतन नहीं किया जा सकता है।
उन लक्ष्यों के साथ प्रतीकात्मक लिंक अपडेट करना जो निर्देशिका नहीं हैं।
ln -sf:
-f या --force मौजूदा गंतव्य फ़ाइलों को हटाते हैं, इसका उपयोग लिंक के लक्ष्य या गंतव्य को अद्यतन करने के लिए किया जाता है।
उदाहरण:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
लेकिन, जैसा कि आप देख सकते हैं, यह पूर्ण पथ देगा यदि पूर्ण पथ ln
तर्क में हैं। वर्तमान वर्किंग डाइरेक्टरी लिंक के पैरेंट डाइरेक्टरी से अलग होने पर पूरा रास्ता देना आवश्यक है।
सापेक्ष पथ:
ln -sfr:
-r या --relative लिंक के स्थान के सापेक्ष प्रतीकात्मक लिंक बनाता है।
उदाहरण:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
लेकिन, यदि किसी निर्देशिका का लक्ष्य है, तो किसी निर्देशिका की लिंक को अपडेट करना काम नहीं करेगा।
उदाहरण:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
जैसा कि आप देख सकते हैं, ln
-r विकल्प के बिना उपरोक्त तर्क में दिए गए पूर्ण पथ नामों का उपयोग करने के बावजूद , प्रतीकात्मक लिंक अभी भी लिंक के सापेक्ष है।
निर्देशिकाओं के लिए लिंक अपडेट करें:
ln -sfrn:
-n या --no-dereference एक लिंक को एक सामान्य फ़ाइल के रूप में एक निर्देशिका के लिए एक प्रतीकात्मक लिंक होने पर LINK_NAME को मानता है।
उदाहरण:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
इसके विपरीत:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
इसके बजाय उपयोग करने की सलाह देता हूंrm
। आपके साथunlink
कभी भी गलती से स्विच का उपयोग करके स्रोत निर्देशिका में किसी भी फाइल को खोने का जोखिम नहीं है।