मैं लिनक्स में एक रिश्तेदार प्रतीकात्मक लिंक कैसे बनाऊं?


62

मुझे एक सिमलिंक की आवश्यकता है जो उस निर्देशिका के सापेक्ष हल करता है जिसे इसमें रखा गया है। ऐसी चीज़ बनाने के लिए किस कमांड का उपयोग किया जाता है?

जवाबों:


78
  1. उस निर्देशिका पर जाएं, जिसमें आप लिंक करना चाहते हैं
  2. कमांड चलाएं ln -s ../some/other/file linkname

आपके द्वारा प्रदान किया गया पथ फ़ाइल के साथ संग्रहीत है। जब आप फ़ाइल तक पहुँचते हैं तो संग्रहीत पथ को देखा जाता है और फ़ाइल के सापेक्ष विस्तारित होता है। यह नहीं पता कि लिंक बनाते समय आप किस निर्देशिका में थे।


23
नहीं, तुम नहीं। आपको बस यह सुनिश्चित करना है कि आप अपनी वर्तमान निर्देशिका के बजाय लिंक नाम के सापेक्ष स्थान निर्दिष्ट करें।
इग्नासियो वाज़केज़-अब्राम्स

5
समझने में मदद करने के लिए: आपके द्वारा प्रदान किया गया पथ फ़ाइल के साथ संग्रहीत है। जब आप फ़ाइल तक पहुँचते हैं तो संग्रहीत पथ को देखा जाता है और फ़ाइल के सापेक्ष विस्तारित होता है। यह नहीं पता कि लिंक बनाते समय आप किस निर्देशिका में थे।
मरिअन

2
बिल्कुल समतुल्य:ln -s ../some/other/file /some/dir/linkname
sehe

1
एक निर्देशिका और फिर से नीचे जाने के बजाय, आप अभी भी कर सकते हैं ln -s ./file linknameक्योंकि .वर्तमान निर्देशिका को संदर्भित करता है।
प्यूडरस्टेलर

1
ln -s somedir/original-dir link-nameकाम नहीं करता। यह नाम के साथ एक निर्देशिका बनाता link-nameहै जिसमें एक अमान्य लिंक होता है। जो आदेश काम करता है वह हैln -sr somedir/original-dir link-name
लोरेंज मेयर

28

GNU कोरुटिल्स के ln (> = 8.16) विकल्प के हालिया संस्करण --relative(या -r) विकल्प का समर्थन करते हैं, जिसका अर्थ है कि आप ln -s2 निरपेक्ष या रिश्तेदार (अपनी कार्यशील निर्देशिका के संबंध में) पथ के साथ कॉल कर सकते हैं और यह सही सापेक्ष पथ का पता लगाएगा जो होना है सिमिलिंक के लिए लिखा है।


2
धन्यवाद। -rजब आप पार संकलन कर रहे हैं और निर्माण मेजबान लेकिन निशाने पर संबंधित पथ पर पूर्ण पथ की जरूरत विकल्प उपयोगी है।
रॉबर्ट कैलहॉन 15

rdfind कुछ वास्तव में बुरे सिम्बलिंक का उत्पादन कर सकता है जो न केवल निरपेक्ष हैं, बल्कि बिना किसी कारण के निर्देशिकाओं से पीछे हट जाते हैं। ln -r -s targetfile myaliasआप इसे ठीक करने में मदद कर सकते हैं
रे फॉस

2

आपको जो समझने की आवश्यकता है वह मूल रूप से है कि एक सिमिलिंक एक टेक्स्ट फाइल की तरह है जिसमें एक डायरेक्टरी एंट्री होती है जिसमें एक फाइल होती है। तो फिर आप

echo ../poo >/file/name

तब यह काफी हद तक समान है

ln -s ../poo /file/name

सिस्टम परवाह नहीं करता है अगर /file/../pooसभी में मौजूद है, तो यह सिर्फ एक पाठ का टुकड़ा है जिसे सिमलिंक में डाल दिया जाता है। जब कोई सिम्बल को खोलने की कोशिश करता है , तो जब सिस्टम उसे हल करने की कोशिश करता है।

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


यह कुछ सिस्टम कॉल द्वारा दुर्व्यवहार किया जाता है - मुझे पता है कि बीएसडी आपको सिस्टम को आवंटित मेमोरी को बदलने के लिए किसी विशेष सिस्टम फ़ाइल को सिम्कलिंक करने की अनुमति देने के लिए उपयोग <करता है। बेशक <, उस निर्देशिका में कोई फ़ाइल नाम नहीं है , यह केवल एक बहुत ही छोटा फ़ाइल-जैसी चीज़ बनाने का एक सस्ता तरीका है जिसमें उस विशेष प्लेटफ़ॉर्म पर एक नियमित पाठ फ़ाइल पर कुछ आकर्षक गुण हैं।
त्रिकोणीय

वह लिंक अब मर चुका है। Man.openbsd.org/OpenBSD-5.3/man5/malloc.conf.5 आज़माएं लेकिन यह भी देखें कि OpenBSD के अधिक हाल के संस्करणों में व्यवहार बहुत कम ... रंगीन है।
ट्रिपल

0

OS X पर मेरे लिए सापेक्ष लिंक मुश्किल थे

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

दोनों ने काम नहीं किया (कुछ बनाया गया था लेकिन यह एक निर्देशिका नहीं थी)। मैंने निरपेक्ष रास्तों का उपयोग करके वांछित लिंक बनाया ।

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin

यह एक व्यवहार्य समाधान है, इसलिए टिप्पणी करने की आवश्यकता नहीं है। यह एक अलग उत्तर के रूप में रह सकता है।
slhck

1
रिश्तेदार लिंक के साथ आपकी प्रारंभिक कोशिश सिर्फ सादा गलत है और यही कारण है कि यह काम नहीं कर रहा है। आपने गलत समझा कि रिश्तेदार लिंक कैसे काम करते हैं। इसके बारे में कुछ भी विशेष रूप से मुश्किल नहीं है (भले ही आप ओएस एक्स का उपयोग कर रहे हों)। जब आप लिंक बनाते हैं तो आप अपनी वर्किंग डायरेक्टरी को चेंज करने के बारे में बात करने वाले दूसरे उत्तरों से गुमराह हो जाते हैं। यह सिर्फ लिंक को सही तरीके से करना आसान बनाने के लिए था और किसी भी तरह से आवश्यक नहीं है। आप अपने वर्तमान डायर के सापेक्ष सापेक्ष पथ को परिभाषित नहीं करते हैं, लेकिन लिंक की निर्देशिका के लिए। यह वही है जो आप के बाद थे:ln -s Dropbox/git/codyhess/bin ~/bin
तिमो

साथ ही @slhck जब कोई विशेष रूप से पूछ रहा है कि कैसे दुनिया में रिश्तेदार लिंक बनाने के लिए एक कहावत है कि आप निरपेक्ष लिंक कर सकते हैं एक "व्यवहार्य समाधान" का गठन करता है? यह विशेष रूप से ओपी प्रश्न का उत्तर नहीं देता है और इसलिए समाधान के बिल्कुल विपरीत है, यह कोई समाधान नहीं है। यह एक टिप्पणी या उत्तर नहीं होना चाहिए, यह एक सवाल होना चाहिए "वास्तव में रिश्तेदार लिंक कैसे काम करते हैं (समझाया गया ताकि मैक उपयोगकर्ता इसे समझें)?"। मुझे उम्मीद है कि इस मैक उपयोगकर्ता ने अब इसे अच्छी तरह से समझाया है। :)
टिमो

@TimoLehto शायद आप मूल लेखक (कोडी हेस) को टिप्पणी को संबोधित करना चाहते हैं। मैंने केवल पोस्ट को कॉपी किया है।
slhck

@slhck, मैंने इसे आपके लिए निर्देशित किया, क्योंकि आपने समाधान को "व्यवहार्य" माना और आपकी टिप्पणी ने मुझे यह समझा कि यदि आप उत्तर को "उत्तर नहीं" के रूप में फ़्लैग करना चाहते हैं, तो आप उस व्यक्ति को मना लेंगे। झंडारोहण स्वीकार किया गया)।
तिमो

0

मैं आगे यह बताना चाहता था कि रिश्तेदार पथ (विस्तृत उदाहरण के साथ) का उपयोग करके एक सिमलिंक कैसे बनाया जाए।

जैसा कि इग्नासियो वाज़केज़-अब्राम्स ने टिप्पणियों में उल्लेख किया है, आपको फ़ाइल / फ़ोल्डर का स्थान निर्दिष्ट करना होगा जहां सिमिलिंक बनाया जाएगा, आपके वर्तमान निर्देशिका के सापेक्ष नहीं।

उदाहरण

आप में हैं /usr/share/nginx/html/_src/learn आप एक सिमलिंक बनाएगा codingमें/usr/share/nginx/html

सापेक्ष सिम्लिंक (सिद्धांत) बनाएँ:

sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

वास्तविक सापेक्ष सिमिलिंक बनाएँ:

sudo ln -s ./_src/learn/coding ../../coding

अधिक जानकारी (एक ही उदाहरण)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.