प्रतीकात्मक और कठिन लिंक के बीच अंतर क्या है?


55

आप एक दूसरे का उपयोग कब करेंगे?


5
मुझे अपने सर्वर गलती के जवाब की नकल करने का मन नहीं है: serverfault.com/questions/10543/…
dmckee

मुझे लगता है कि यह वीडियो इसे समझाने का एक अच्छा काम करता है youtube.com/watch?v=IyiuP6iqduo

जवाबों:


40

हार्ड और सॉफ्ट लिंक के बीच अलग-अलग शब्दार्थ उन्हें अलग-अलग चीजों के लिए उपयुक्त बनाते हैं।

कड़ी:

  • अन्य निर्देशिका प्रविष्टियों से अप्रभेद्य, क्योंकि प्रत्येक निर्देशिका प्रविष्टि हार्ड लिंक है
  • एक ही इनोड में अन्य हार्ड लिंक को तोड़े बिना "मूल" को स्थानांतरित या नष्ट किया जा सकता है
  • केवल एक ही फाइल सिस्टम में संभव है
  • अनुमतियाँ "मूल" पर ही होनी चाहिए (अनुमतियों को इनोड में संग्रहीत किया जाता है, निर्देशिका प्रविष्टि में नहीं)
  • केवल फाइलों के लिए ही किया जा सकता है , निर्देशिकाओं से नहीं

प्रतीकात्मक लिंक (सॉफ्ट लिंक)

  • बस एक और फ़ाइल पथ को इंगित करता है। ( ls -lदिखाएगा कि सिम्क्लिन पॉइंट किस पथ पर है)
  • मूल स्थानांतरित या हटाए जाने पर टूट जाएगा। (कुछ मामलों में यह एक लिंक के लिए वास्तव में वांछनीय है कि जो भी फ़ाइल वर्तमान में किसी विशेष स्थान पर स्थित है उसे इंगित करने के लिए)
  • एक अलग फाइल सिस्टम में एक फाइल को इंगित कर सकता है
  • एक निर्देशिका को इंगित कर सकते हैं
  • कुछ फ़ाइल सिस्टम प्रारूपों पर, सिम्लिंक के लिए संभव है कि वह जिस फ़ाइल को इंगित करता है, उसकी तुलना में अलग-अलग अनुमतियाँ हों (यह असामान्य है)

1
अच्छी सूची है। बस यह जोड़ना चाहता था कि आप सिम्क्लिन को स्थानांतरित करके एक रिश्तेदार पथ सिम्लिंक को भी तोड़ सकते हैं।
jw013

4
"[ई] बहुत निर्देशिका प्रविष्टि कड़ी है।" यह एक उत्कृष्ट बिंदु है जिसे मैंने पहले कभी नहीं देखा है, लेकिन मुझे चिंता है कि कोई व्यक्ति लिंक के चारों ओर अपना सिर लपेटने की शुरुआत कर रहा है। इस स्थिति में उन लोगों के लिए, यहाँ एक संकेत है: फ़ाइलों और निर्देशिकाओं का लेआउट जो आप देखते हैं कि ls कमांड को चलाने पर यह स्टोरेज सिस्टम के समान ही नहीं होता है जैसा कि यह प्रतिनिधित्व करता है। हार्ड लिंक स्टोरेज सिस्टम पर एक व्यक्तिगत फाइल के संदर्भ हैं। एक बार एक फ़ाइल संग्रहीत की जाती है। "इनोड्स" पर पढ़ें।
मारियो

@Mario: हाँ। प्रत्येक निर्देशिका प्रविष्टि एक नाम को एक इनोड में लिंक करती है। फ़ाइल नाम हटाने के लिए सिस्टम कॉल को कॉल भी किया जाता है unlink(2)। "सामान्य" फाइलें (1 की लिंक गणना के साथ) सिर्फ एक विशेष मामला है। यदि यह मदद करता है, तो आप इनोड्स को ऑब्जेक्ट के रूप में सोच सकते हैं, और रिफ-काउंटेड पॉइंटर्स के रूप में नाम (इनोड की लिंक गणना संदर्भ-गणना है)।
पीटर कॉर्ड्स

1
आप एक प्रतीकात्मक लिंक के रूप में एक पाठ फ़ाइल के रूप में सोच सकते हैं। यह फ़ाइल के लिए एक विशेष ध्वज के कारण एक प्रतीकात्मक लिंक के रूप में व्याख्या की गई है। हार्ड लिंक उदाहरण क्या आप जानते हैं ..और .
नेड64


18

दोनों प्रकार के लिंक का बिंदु एक ही समय में दो स्थानों पर एक फ़ाइल बनाने का एक तरीका प्रदान करना है। इसके बहुत सारे उपयोग हैं। 10 में से 9 बार आप प्रतीकात्मक लिंक का उपयोग करना चाहते हैं।

प्रतीकात्मक लिंक, या "सिमिलिंक" विंडोज शॉर्टकट की तरह काम करते हैं। सिम्लिंक की सामग्री फ़ाइल / निर्देशिका के वास्तविक स्थान के लिए एक संकेतक है। यदि आप वास्तविक फ़ाइल को हटाते हैं, तो सिमलिंक "लटक" जाएगा, और काम नहीं करेगा। सिमिंक को हटाने से असली फाइल डिलीट नहीं होती है। आप किसी एकल फ़ाइल (या यहां तक ​​कि अन्य सिम्लिंक) के जितने चाहें, उतने सिम्लिंक कर सकते हैं।

हालांकि विंडोज के विपरीत, वे फाइल सिस्टम स्तर पर काम करते हैं, शेल या एप्लिकेशन के स्तर पर नहीं, इसलिए बहुत अधिक कोई भी एप्लिकेशन अपेक्षा के अनुरूप सिम्लिंक को "फॉलो" करेगा। ls -alएक त्वरित तरीके के रूप में इस्तेमाल किया जा सकता है यह देखने के लिए कि सहानुभूति "बिंदु" कहां है।

हार्डलिंक निचले स्तर पर भी काम करते हैं। एक हार्डलिंक फ़ाइल की वास्तविक-ऑन-द-फाइल-सिस्टम-स्तरीय निर्देशिका प्रविष्टि है। तकनीकी रूप से, एक निर्देशिका प्रविष्टि एक हार्डलिंक है, इस प्रकार प्रत्येक फ़ाइल में कहीं निर्देशिका में कम से कम एक हार्डलिंक है। हार्डलिंक वे जिस फ़ाइल को इंगित करते हैं, उससे अलग नहीं हैं; यदि किसी फ़ाइल में अलग-अलग निर्देशिकाओं में कई हार्डलिंक हैं, तो हार्डलिंक को उपयोगिताओं के साथ हटाना जैसे rmकि वास्तव में फ़ाइल को हटा नहीं देगा, जब तक कि सभी हार्डलिंक नहीं चले जाते।

मैं ऐसी स्थिति के बारे में नहीं सोच सकता जहाँ हार्डलिंक्स का उपयोग आम है, या यहाँ तक कि जरूरत है, जब तक कि आप जानबूझकर फ़ाइलों को नष्ट होने से रोकना नहीं चाहते हैं या विभाजन या अन्य फाइल सिस्टम संबंधी चीजों के साथ कुछ अजीब निम्न स्तर के काम कर रहे हैं। संपादित करें: इस सवाल के अन्य उत्तर में महान विचार हैं, हालांकि!


इसके अलावा, सीमलिंक में सामान्य फ़ाइलों की तरह अनुमतियाँ होती हैं, लेकिन ऑपरेटिंग सिस्टम उनसे परामर्श नहीं करता है, यह व्यवहार को तय करने के बजाय अनुमत लक्षित फ़ाइल की अनुमति देता है। और, सहानुभूति की परिपत्र श्रृंखला न करें। बहुत बुरा।
लॉरेंस सी

3
क्या यह वास्तव में बहुत बुरा है? क्या होगा? सबसे अधिक उत्साह मैं फिर से बनाने में सक्षम हूं "त्रुटि लिंक के बहुत सारे स्तर" त्रुटि संदेश।
Mattdm

1
ls -lयह देखने के लिए पर्याप्त है कि सिमिलिंक द्वारा क्या जोड़ा जा रहा है, इसके लिए aखड़ा है --all, मैनपेज देखें। और यहां तक ​​कि अगर सहानुभूति फ़ाइल सिस्टम पर काम करती है, तो भी अनुसरण के बजाय फ़ाइलों के रूप में प्रतीकात्मक लिंक का उपयोग करने के लिए वैकल्पिक कार्य हैं।
D4RIO

4
विंडोज शॉर्टकट वास्तव में सहानुभूति से काफी अलग हैं: वे अपने लक्ष्य का पालन करते हैं, और वे नियमित फाइलें भी हैं। (विंडोज में सीमलिंक भी हैं, लेकिन उनका ज्यादा इस्तेमाल नहीं किया गया है।) साइमलिंक विशुद्ध रूप से टेक्स्ट हैं, जब भी आप फाइल एक्सेस करते हैं तो टारगेट टेक्स्ट पढ़ा जाता है। क्या सहानुभूति अनुमतियाँ मामला OS और फाइल सिस्टम पर निर्भर करता है।
गिल्स एसओ- बुराई को रोकना '

AFAIK, एक सिमलिंक फ़ाइल की सामग्री सिम्लिंक बिंदुओं का पथ है, जिसे सिमलिंक फ़ाइल के आकार को देखते हुए देखा जा सकता है: ln -s /home 1; ls -l 1दिखाता है कि सिमलिंक 1 5 बाइट्स लंबा है, जबकि ln -s /usr/share/ 2; ls -l 2शोआस कि 2 बाइट 11 है।
डेनियल कुल्मन

13

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


5
शायद डिस्क-आधारित संस्करण नियंत्रण तंत्र? यदि आप किसी चीज़ को हार्डलिंक करते हैं, तो यह बैकअप नहीं है। यदि मूल फ़ाइल दूषित हो जाती है, तो उसका प्रत्येक हार्डलिंक भी दूषित हो जाता है।
194 में D4RIO

1
ऐप्पल की टाइम मशीन की तरह वृद्धिशील बैकअप सिस्टम के बारे में सोचें। (यह स्पष्ट होना चाहिए कि ये आपदा वसूली प्रकार बैकअप नहीं हैं, लेकिन "उफ़, मैंने दुर्घटना से उस फ़ाइल को हटा दिया है" बैकअप।) एक वृद्धिशील बैकअप में सभी अपरिवर्तित फ़ाइलें एक साथ हार्डलिंक की जाती हैं; जब फ़ाइल बदली जाती है, तो अगला वृद्धिशील पिछले संस्करण से लिंक करने के बजाय इसे कॉपी करता है।
गीकौसोर

धन्यवाद, तब वृद्धिशील बैकअप सिस्टम इस तरह संस्करण नियंत्रण प्रणाली के समान हैं = D
D4RIO

लेकिन वृद्धिशील बैकअप तंत्र एक फ़ाइल के "पुराने" संस्करण को कैसे संरक्षित करता है? 1) बैकअप ए बनाया, यह हार्ड फ़ाइल F; 2) फ़ाइल एफ संशोधित; 3) अगले दिन बैकअप बी बनाया ... लगता है कि मुझे कुछ नहीं मिला
दिमित्री पश्केविच

3

हार्ड लिंक सिर्फ एक ही डिस्क स्थान के संदर्भ हैं, 'आप' क्यों अन्य फाइलसिस्टम में कुछ हार्डलिंक नहीं कर सकते हैं।

Symlinks अन्य फाइलें (जैसे विंडोज शॉर्टकट) को लिंक करने वाली फाइलें हैं, शायद एक ही फाइल सिस्टम में, शायद नहीं।

संपादित करें: मैं कुछ और समझाऊंगा। मौजूद प्रत्येक फ़ाइल में न्यूनतम 1 कड़ी है। हार्ड लिंक फाइलसिस्टम के एक इनोइड की सामग्री को एक्सेस करने का तरीका है। आप किसी फ़ाइल की इनकोड संख्या प्राप्त कर सकते हैं ls -i, और statइस उदाहरण में निम्न के साथ हार्डलिंक की संख्या प्राप्त कर सकते हैं :

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

इस संदर्भ के लिए धन्यवाद @geekosaur:

कर्नेल को सिम्लिंक का विस्तार करने के लिए पथनाम-टू-इनोड अनुवाद (निर्देशिका ट्री का पता लगाना) को पुनरारंभ करना पड़ता है, जबकि हार्ड लिंक सभी एक ही इनोड का उपयोग करते हैं। (आप अक्सर इसे कर्नेल फ़ंक्शन के नाम से संदर्भित करते हैं, जो पारंपरिक यूनिक्स में ऐसा करता है।)

और यह (संपादित):

हार्ड-लिंक ऐप्पल की टाइम मशीन की तरह डिस्क-आधारित वृद्धिशील बैकअप तंत्र के लिए बहुत उपयोगी हैं , क्योंकि आपके पास फ़ाइलों के लिए स्थान साझा करते समय प्रत्येक बैकअप के लिए एक पूर्ण निर्देशिका ट्री हो सकता है - जो परिवर्तित नहीं हुआ है और फाइल सिस्टम संदर्भ गिनती का ट्रैक रखता है, इसलिए जब किसी दिए गए संस्करण का अंतिम संदर्भ चला जाता है क्योंकि बैकअप समाप्त हो गया था / अंतरिक्ष कारणों से हटा दिया गया था, तो इसका उपयोग किया गया स्थान स्वचालित रूप से पुन: प्राप्त हो गया है। कुछ मेल क्लाइंट एक ही कारण के लिए, कई फ़ोल्डरों को भेजे गए संदेशों के लिए भी इसका उपयोग करते हैं।

चियर्स


हार्ड लिंक का उपयोग करने के लिए प्रदर्शन लाभ हैं? या, आप कभी सिमिलिंक की जगह हार्ड लिंक का उपयोग क्यों करेंगे?
ripper234

कर्नेल को सिम्लिंक का विस्तार करने के लिए पथनाम-टू-इनोड अनुवाद (निर्देशिका ट्री का पता लगाना) को पुनरारंभ करना पड़ता है, जबकि हार्ड लिंक सभी एक ही इनोड का उपयोग करते हैं। (आप इसे अक्सर nameiपारंपरिक यूनिक्स में ऐसा करने वाले कर्नेल फ़ंक्शन के नाम से संदर्भित करते हैं ।)
geekosaur

@ ripper234: हार्डलिंक डिस्क्सस्पेस-सेविंग समाधान हैं। आपको सिम्लिंक बनाने के लिए फाइल सिस्टम के बारे में जानने की आवश्यकता नहीं है, लेकिन आपको सिम्बल बनाने से पहले सोचने की ज़रूरत है क्योंकि आप एक लूप या एक लंबा रिज़ॉल्यूशन पाथ बना सकते हैं, इसलिए फ़ंक्शंस statविफल हो जाएंगे।
D4RIO

@geekosaur: मैं आपका जवाब मेरे साथ जोड़ रहा हूं क्योंकि यह बहुत उपयोगी है
D4RIO

कोई दिक्कत नहीं है। मैंने वास्तव में इसे आपकी टिप्पणी के रूप में लिखना शुरू किया था, लेकिन टिप्पणियाँ बहुत कम हैं।
गीकॉशर

3

एक नरम लिंक दूसरे pathname की ओर इशारा करता है। वह पाथनाम वास्तव में मौजूद हो भी सकता है और नहीं भी। पथ को तब तक नहीं देखा जाएगा जब तक कि आप सिमलिंक तक नहीं पहुंच जाते। यदि आप इसे एक्सेस करने का प्रयास करते समय पथ मौजूद नहीं है, तो आपके पास एक टूटा हुआ सिमलिंक है।

एक कड़ी के साथ, आपके पास कई नामों वाली एक फ़ाइल है। आप यह नहीं कह सकते हैं कि उनमें से एक "वास्तविक" फ़ाइल है और अन्य केवल इसके लिए एक लिंक हैं। वे सभी समान हैं। वहाँ एक टूटी कड़ी कड़ी के रूप में वहाँ कोई बात नहीं है जिस तरह से टूटे हुए सीमलिंक हैं।

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

जब आप किसी लिंक की गई फ़ाइल को हटाते हैं तो एक और बड़ा अंतर होता है। यदि आप एक जोड़ी हार्डलिंक फ़ाइलों को हटाते हैं, तो उसी नाम से एक नई फ़ाइल बनाएं, आपके पास दो अलग-अलग फाइलें होंगी (लिंक हट गया है)। यदि आप एक सिमलिंक के लक्ष्य को हटाते हैं और उसी नाम से एक नई फ़ाइल बनाते हैं, तो लिंक नई फ़ाइल को इंगित करेगा।


3

"हार्ड" लिंक समान आईनोड को साझा करते हैं

$ touch foo
$ ln foo foolink # Creates a hard  link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink

अगर मैं या तो फू या एडिट करता हूं तो केवल एक फाइल है और इसे अपडेट किया जाएगा। यदि मैं केवल एक फ़ाइल नाम को हटाता हूं, तो इनोड और डेटा जारी रहेगा, मूर्खता बच जाएगी।

$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink

अगर मैं एक ही बनाने के लिए था, लेकिन एक "सॉफ्ट" या प्रतीकात्मक लिंक के साथ, तो एक फ़ाइल, एक इनोड, और एक नई फ़ाइल है जिसमें पहले की ओर इशारा करते हुए एक ही फाइल है।

$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo

अगर मैं या तो फू या को संपादित करता हूं तो अभी भी केवल एक फ़ाइल है और इसे अपडेट किया जाएगा।

यदि मैं केवल सिमलिंक हटाता हूं, तो इनोड और डेटा कायम रहेगा। अगर मैं फू को हटाता हूं, तो डेटा चला जाएगा, सिम्लिंक बना रहेगा लेकिन एक गैर-मौजूद फ़ाइल की ओर इशारा करता है।

$ rm foo
removed `foo'
$ ls -l foo foolink 
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo

1
लेकिन इसके लिए एक व्यावहारिक उपयोग-मामला क्या है?
ewwhite

1
एक उपयोग, एक "शॉर्ट कट" के रूप में, एक और उपयोग, एक सिस्टम पर एक एप्लिकेशन के कई संस्करण होने से एक को स्थापित करने, नए संस्करण का परीक्षण करने, पूर्ण पथ द्वारा एप्लिकेशन निर्दिष्ट करने की अनुमति मिलती है, जबकि उत्पादन के लिए बिन बिंदुओं में सिमलिंक। नए संस्करण में पूर्ण परिवर्तन सिम्लिंक का परीक्षण करने के बाद, पुराने संस्करण को उन उपयोगकर्ताओं के लिए छोड़ दें जिनके पास संस्करण निर्भर कोड है। पर्ल, अजगर आदि के बारे में सोचें
bsd

1
हार्ड लिंक के लिए व्यावहारिक उपयोग के मामले। अपने फाइल सिस्टम पर वर्तमान में मुझे बड़ी संख्या में / usr / share / zoneinfo में बड़ी संख्या में हार्डलाइन मिलीं। टाइमज़ोन का प्रतिनिधित्व करने वाली सभी नामित फ़ाइलों के बारे में सोचें, जो सभी ईएसटी के समान हैं। हम फाइल सिस्टम को सहेजते हैं, निरर्थक प्रतियाँ नहीं होने से और पैकेज को स्थापित / हटाए जाने के रूप में सिमिलिंक के प्रबंधन ओवरहेड के बिना आसान पैकेज प्रबंधन के लिए अनुमति देते हैं। यहां तक ​​कि अगर एक हटा दिया जाता है तो मूल डेटा संरक्षित है। क्षमा करें, मेरे पास अधिक पांडित्यपूर्ण स्पष्टीकरण के लिए समय नहीं था।
bsd

1

हार्ड लिंक एक ही फ़ाइल के लिए अतिरिक्त निर्देशिका प्रविष्टियाँ हैं। इसका मत

  • एक फ़ाइल के सभी हार्ड लिंक एक ही फाइल सिस्टम पर होने चाहिए (क्योंकि एक निर्देशिका प्रविष्टि एक अलग फ़ाइल सिस्टम पर एक फ़ाइल को इंगित नहीं कर सकती है), लेकिन जरूरी नहीं कि एक ही निर्देशिका में हो।
  • मूल निर्देशिका प्रविष्टि और नई हार्ड लिंक के बीच कोई अंतर नहीं है; ऑपरेटिंग सिस्टम के दृष्टिकोण से, वे एक ही फ़ाइल में केवल दो निर्देशिका प्रविष्टियाँ हैं। एक फ़ाइल को केवल तभी हटाया जाता है जब सभी हार्ड लिंक हटा दिए जाते हैं (और इसके अलावा, ऐसी कोई प्रक्रिया नहीं बची है, जिसमें वह फ़ाइल अभी भी खुली हो)।
  • यदि आप "मूल" को स्थानांतरित / नाम देते हैं, तो जब तक आप इसे किसी अन्य फ़ाइल सिस्टम में स्थानांतरित नहीं करते हैं, अन्य हार्ड लिंक प्रभावित नहीं होते हैं; वे अभी भी उसी फ़ाइल को इंगित करते हैं।
  • कई संपादक बचत करते समय एक ही फ़ाइल में नई सामग्री नहीं लिखते हैं, बल्कि निम्न प्रक्रिया करते हैं:

    1. नई सामग्री को नई फ़ाइल पर लिखें ।
    2. पुरानी फ़ाइल का बैकअप नाम पर नाम बदलें (या, यदि पिछले फ़ाइल संस्करण का बैकअप नहीं रखा गया है, तो बस इसे हटा दें)।
    3. पिछली फ़ाइल के नाम पर नई लिखित फ़ाइल का नाम बदलें।

    इस योजना का अर्थ है कि एक ही फ़ाइल के अन्य हार्ड लिंक अब वर्तमान फ़ाइल को इंगित नहीं करेंगे, लेकिन पिछले संस्करण के लिए (यह सच है कि अगर संपादक पुरानी फ़ाइल को हटा देता है, क्योंकि यूनिक्स के तहत, एक फ़ाइल को "हटाना" बस इसका लिंक हटाने का मतलब है; केवल हटाए गए लिंक ही एकमात्र लिंक है जो वास्तविक फ़ाइल हटा दी जाती है)।

  • चूँकि हार्ड लिंक सीधे फाइल में जाता है, आप उस फ़ाइल तक पहुँच सकते हैं, भले ही आपके पास उस फ़ाइल के मूल स्थान तक पहुँच न हो (उदाहरण के लिए, क्योंकि निर्देशिका में मूल प्रविष्टि है पर आपके पास कोई अनुमति नहीं है) । आपकी पहुंच का निर्धारण करने वाले एकमात्र अधिकार फ़ाइल के एक्सेस अधिकार हैं (जो फ़ाइल से संबद्ध हैं, लिंक के साथ नहीं; आप एक ही फ़ाइल के लिए अलग-अलग अनुमतियों के साथ हार्ड लिंक नहीं कर सकते हैं) और हार्ड लिंक के पथ के एक्सेस अधिकार में निहित है (मूल रूप से, जिस निर्देशिका में लिंक है, और किसी भी प्रत्यक्ष और अप्रत्यक्ष मूल निर्देशिका को निष्पादित अधिकार)।

दूसरी ओर, प्रतीकात्मक लिंक, pathname (फ़ाइल का नाम - या इसके निर्देशिका प्रविष्टि - संभवतः इसके पथ, जैसे /bin/shया subdir/foo.bar) सहित - किसी अन्य फ़ाइल को संग्रहीत करते हैं । यदि पथनाम सापेक्ष है, तो यह हमेशा उस निर्देशिका के सापेक्ष व्याख्या किया जाता है जो लिंक में निहित है। इसका मतलब है:

  • एक प्रतीकात्मक लिंक एक अलग फ़ाइल सिस्टम पर फ़ाइलों का उल्लेख कर सकता है (यहां तक ​​कि एक फ़ाइल सिस्टम के लिए जो स्वयं हार्ड या सॉफ्ट लिंक का समर्थन नहीं करता है, जैसे बैट)।

  • यदि मूल फ़ाइल हटा दी जाती है, तो प्रतीकात्मक लिंक फ़ाइल सामग्री को संरक्षित नहीं करता है। जब तक एक ही फाइल के अन्य हार्ड लिंक नहीं होंगे, फाइल कंटेंट चला जाएगा। प्रतीकात्मक लिंक को फिर झूलना छोड़ दिया जाएगा (जो कि एक पथनाम का संदर्भ देता है जो निर्देशिका प्रविष्टि के अनुरूप नहीं है)। दूसरी ओर, प्रतीकात्मक लिंक को हटाने से मूल फ़ाइल प्रभावित नहीं होती है, क्योंकि यह केवल इसके पथनाम को संदर्भित करता है।

  • यदि मूल फ़ाइल को स्थानांतरित या नाम दिया गया है, तो प्रतीकात्मक लिंक अपडेट नहीं किया गया है, लेकिन लटकना छोड़ दिया गया है। यदि आप प्रतीकात्मक लिंक को स्थानांतरित करते हैं, तो यह केवल टूट जाता है यदि इसमें एक सापेक्ष पथ शामिल है, और पथ अब नई स्थिति से मान्य नहीं है।

  • यदि मूल फ़ाइल को उसी नाम से एक नई फ़ाइल द्वारा प्रतिस्थापित किया जाता है (जैसा कि ऊपर वर्णित संपादक परिदृश्य में है), लिंक नई फ़ाइल को संदर्भित करता है।

हार्ड लिंक के अधिकांश उपयोग मूल रूप से फाइल की सामग्री को दो बार संग्रहित किए बिना फ़ाइल की एक प्रति रखने का एक तरीका है। यह सबसे अच्छा काम करता है यदि फाइलें फिर से कभी नहीं बदली जाती हैं, क्योंकि अन्यथा लिंक को गलती से तोड़ना आसान है (ऊपर संपादक का परिदृश्य देखें)। बेशक, ऐसे मामले हैं जहां आप लिंक को तोड़ना चाहते हैं , जैसे कि कई बैकअप रखने के मामले में: नई बैकअप में बदल गई फ़ाइलों के लिए, आप नहीं चाहते कि पुराने बैकअप में कॉपी भी बदल जाए।

आम तौर पर यदि आप एक लिंक चाहते हैं, तो आप एक प्रतीकात्मक लिंक का उपयोग करेंगे। एक उदाहरण तब होता है जब आप किसी निर्देशिका को किसी अन्य विभाजन में स्थानांतरित करते हैं (क्योंकि वह जिस पर पूर्ण हो जाता है), आप पुरानी स्थिति से नए पर एक नरम लिंक सेट कर सकते हैं, इसलिए कोई भी प्रोग्राम पुराने स्थान पर निर्देशिका तक पहुंचने का प्रयास करेगा। इसके बजाय नई जगह पर पहुंचें। यह कठिन लिंक के साथ संभव नहीं होगा। हालाँकि, यह ध्यान रखें कि स्थानांतरित निर्देशिका में प्रतीकात्मक लिंक टूट सकते हैं यदि उनमें सापेक्ष पथ होते हैं जो स्थानांतरित निर्देशिका से बाहर निकलते हैं।


1

हार्ड लिंक (केवल फाइलें) बनाम सॉफ्ट लिंक (फाइलें या निर्देशिका) बनाम बिन्द (निर्देशिकाएँ के लिए हार्ड लिंक)

इस छवि को पहले पोस्टिंग के बाद देखें
(स्रोत: freesoftwareservers.com )

जबकि daxelrod का जवाब सवाल को अच्छी तरह से समझाता है, मैंने सोचा कि इस मामले में तस्वीर ने एक बड़ा बदलाव किया, खासकर शुरुआती लोगों के लिए जो अभी तक इनोड और जटिल लिनक्स शब्दजाल को नहीं समझते हैं।

इस बारे में सोचें, यदि आपने अपनी ड्राइव से सबकुछ "डिलीट" कर दिया है, तो आप डेटा को पुनर्स्थापित करने के लिए सॉफ़्टवेयर चला सकते हैं, क्योंकि 1 और 0 अभी भी हैं, आपने अभी-अभी सभी हार्ड लिंक को डिलीट किया है। रिकवरी सॉफ़्टवेयर का उद्देश्य 0 और 1 की समझ बनाने के लिए हार्ड लिंक्स का पुनर्निर्माण करना है

मैंने एक महान "वन लाइनर" पढ़ा, जिसने यह सब बना दिया और मैं साझा करना चाहता था!

लिनक्स में सभी फाइलें 0 और डिस्क पर 1 के लिए "हार्ड लिंक" हैं। जब आप कोई डेटा बनाते हैं (0 & 1 का) तो OS हार्ड ड्राइव पर उस स्थान को संदर्भित करने के लिए फ़ाइल ट्री में एक हार्ड लिंक बनाता है।

हार्ड लिंक 2 बनाएँ और हार्ड लिंक 1 मूल फ़ाइल को हटाएँ :

आप एक और हार्ड लिंक बना सकते हैं और मूल फ़ाइल को हटा सकते हैं, और आपके पास अभी भी नई बनाई गई हार्ड लिंक तक पहुंच है।

हटाएं फ़ाइल (हार्ड लिंक 1) जो कि इससे जुड़ा हुआ है:

यदि आपने हार्ड लिंक 1 को हटा दिया है, तो क्या आपको लगता है कि सॉफ्ट लिंक काम करेगा? नहीं, OS वापस रिपोर्ट करेगा कि HARD LINK 1 मौजूद नहीं है।

हार्ड लिंक को HARD LINK तक हटाएं:

इसके विपरीत, यदि आप सॉफ्ट लिंक को हटाते हैं, तो क्या हार्ड लिंक काम करेगा? हाँ। जब तक OS में एक HARD LINK फ़ाइल है, यह रिपोर्ट करेगा कि भरण को हटाया नहीं गया है।

- इसके अलावा शोध / ध्यान देने योग्य है BIND, दो निर्देशिकाओं को सहानुभूति देने की तरह दो निर्देशिकाओं को बांधने का एक तरीका है, लेकिन यह OS के लिए पारदर्शी है (OS के बता सकते हैं कि जब आप Symlink और कुछ मौसम के संबंध में नियम हैं तो वे Symlinks का पालन कर सकते हैं)। यह माउंट का उपयोग करता है, एलएस का नहीं और एफएसटीएबी के माध्यम से कॉन्फ़िगर किया जा सकता है।

BIND माउंट क्या है


1
यह काफी महत्वाकांक्षी प्रयास है, विशेष रूप से पहली पोस्ट के लिए। दुर्भाग्य से, मेरा मानना ​​है कि "बाइंड" पर सामग्री को जोड़ना (जिसके लिए नहीं पूछा गया था) सिर्फ मामलों को भ्रमित करता है; खासकर जब से आपको लगता है कि "बाइंड" बढ़ते को समझाने का प्रयास नहीं किया गया है । इसके अलावा, मैं कठिन और नरम / प्रतीकात्मक लिंक को बहुत अच्छी तरह से समझता हूं, और मैं मुश्किल से आपकी तस्वीर को समझता हूं। मुझे बहुत आश्चर्य होगा अगर एक शुरुआत करने वाला इससे कुछ भी सीख सकता है।
जी-मैन

जब आप निर्देशिकाओं को सहिष्णु कर सकते हैं, तो यह फ़ाइल सिस्टम में सिम्लिंक के रूप में दिखाता है, यदि आप बाइंड करते हैं, तो यह ओएस के लिए पारदर्शी है। एक फ़ाइल की तरह दिखाता है।
FreeSoftwareServers 8

1
(1) वास्तव में, लिनक्स के कम से कम कुछ संस्करणों पर, आप किसी फ़ाइल को माउंट कर सकते हैं। (2) जबकि बाइंड माउंट्स हार्ड लिंक के समान दिखते हैं, यह कहते हुए कि "बाइंड केवल हार्ड लिंक के समान है (सिवाय आप एक लिंक को लिंक नहीं कर सकते हैं)" बस गलत है।
जी-मैन

@ G-Man, सहमत और हटा दिया गया, बस एक नोट के साथ BIND का उल्लेख है
FreeSoftwareServers

@ वास्तव में सॉफ्ट लिंक एक फ़ाइल नाम (हार्ड लिंक 1) को इंगित करता है ; योजनाबद्ध, यह स्पष्ट करना चाहिए।
जेबी

0

एक हार्ड लिंक डिस्क पर एक फ़ाइल रखेगा, जब तक कि सभी हार्ड लिंक, यहां तक ​​कि पहले (एक "फ़ाइलनाम" तकनीकी रूप से एक कठिन लिंक नहीं है) को हटा दिया गया है। एक नरम लिंक को "झूलने" के लिए छोड़ दिया जा सकता है जब तक कि फ़ाइल को इंगित नहीं किया जाता है।


0

यह एक बहुत पुराना प्रश्न है, लेकिन मेरे पास एक उपयोग का मामला है जो मुझे कठिन लिंक का उपयोग करने की आवश्यकता है।

मैं एक संगीतकार हूं और इसलिए मेरे पास मेरे मैक से जुड़ी कई हार्ड ड्राइव पर बहुत सारी और बहुत सारी और विभिन्न प्रकार की ऑडियो फाइलें हैं। टेराबाइट्स लायक। मैंने उन्हें ज्यादातर सिम्लिंक निर्देशिकाओं के साथ बहुत अच्छी तरह से व्यवस्थित किया है ताकि मैं उन्हें सामग्री प्रकाशक, शैली / ध्वनि और अन्य मानदंडों के आधार पर पा सकूं कि मैं उस समय कैसे सोच रहा हूं। दुर्भाग्य से एक प्रोग्राम जो मैं उपयोग करता हूं, एब्लेटन लाइव, यह एलियास या इसके फ़ाइल ब्राउज़र से सहानुभूति देखने में पूरी तरह से असमर्थ है। एकमात्र समाधान जो मैंने पाया है वह है निर्देशिकाओं की कड़ी बनाना जो मैं चाहता हूं कि यह देखने में सक्षम हो, और फिर सब कुछ बढ़िया काम करता है।

तो, यह एक और मामला है जब आपको हार्ड लिंक का उपयोग करने की आवश्यकता हो सकती है, जो कि दूसरों को नहीं हुई होगी।


मैं एबलटन लाइव के लिए एक बग रिपोर्ट दर्ज करूंगा। शायद वे इसे ठीक करने में सक्षम हों।
aventurin

हाँ, इस मुद्दे के बारे में पहले से ही वर्षों से सक्षम मंचों पर बहुत सारी शिकायतें हैं ... वे इसे संबोधित करने के लिए कोई प्रयास नहीं कर रहे हैं, हालांकि मुझे पता नहीं है कि क्यों नहीं।
जोनाथन वैन क्लूट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.