जो काम नहीं करता है उसके लिए, यदि हम ls -l
परिणाम को देखते हैं, तो हमें निम्नलिखित मिलते हैं:
[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client
अब समझने के लिए कि यहाँ क्या चल रहा है। आइए आपके द्वारा बताई गई कमांड को देखें:
ln -s client build/client
मैन पेज के अनुसार, इस प्रारूप के लिए दो संभावित मैच हैं
SYNOPSIS
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
यह पहले फॉर्म (इसके पहले से) से मेल खाएगा। अब, "लक्ष्य नाम" या client
आपके मामले में, पूर्ण के अनुसार हो सकता हैln
मैनुअल के ) मनमाना तार हो सकता है। उन्हें अभी कुछ भी हल करने की आवश्यकता नहीं है, लेकिन भविष्य में कुछ करने का संकल्प कर सकते हैं। आप अपने आह्वान के साथ जो बना रहे हैं, वह एक "झूलता हुआ सिमलिंक" है और सिस्टम आपको इन्हें बनाने से रोकता नहीं है।
अब आपका दूसरा आह्वान ln -s ../client build/client
है जिसे "रिश्तेदार सिम्लिंक" कहा जाता है (जैसा कि आपने अपनी पोस्ट में उल्लेख किया है)। एक दूसरा प्रकार है और यह एक "पूर्ण सिमिलिंक" है जिसे करने से बुलाया जाएगाln -s /home/user/client build/client
।
यह कोई बग नहीं है। मैनुअल के अनुसार यह बताता है:
वर्तमान निर्देशिका की तुलना में किसी अन्य स्थान पर एक सापेक्ष सिम्लिंक बनाते समय, सिम्लिंक का रिज़ॉल्यूशन वर्तमान निर्देशिका से एक ही स्ट्रिंग के रिज़ॉल्यूशन से अलग होगा। इसलिए, कई उपयोगकर्ता पहले निर्देशिकाओं को उस स्थान पर बदलना पसंद करते हैं जहां रिश्तेदार सिमलिंक बनाया जाएगा, ताकि टैब-पूरा होने या अन्य फ़ाइल रिज़ॉल्यूशन को वही लक्ष्य मिल जाए जो सिमलिंक में रखा जाएगा।
- से info coreutils 'ln invocation'
उस ने कहा, आप लक्ष्य के सापेक्ष या निरपेक्ष पथ का उपयोग करना चाहिए ।