हार्ड लिंक और प्रतीकात्मक लिंक में क्या अंतर है?


487

जैसा कि शीर्षक कहता है, मैं हार्ड लिंक और कमांड द्वारा बनाए गए सॉफ्ट लिंक के बीच का अंतर जानना चाहूंगा ln। आदेश man lnजानकारी प्रदान करता है, लेकिन मेरे प्रश्न का पर्याप्त उत्तर नहीं देता है।

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


15
मतभेदों में से एक ... आपके पास कुछ फ़ाइल है, उदाहरण के लिए फ़ाइल परीक्षण। यदि आप ln टेस्ट हार्डलिंक बनाते हैं, तो ln -s टेस्ट सिमलिंक बनाते हैं और फिर फाइल टेस्ट को अन्य dir (या नाम बदलें) में स्थानांतरित करते हैं, सिंलिंक अभ्यस्त काम करते हैं। हार्डलिंक काम करेगा। अब फ़ाइल परीक्षण को हटाने का प्रयास करें। Hardlink अभी भी काम करेंगे वास्तव में आप अभी भी क्योंकि आइनोड की नहीं है 0. यही दायर करने के लिए hardlinks की संख्या जब तक फ़ाइल acces करने में सक्षम हो जाएगा, यह पुस्तिका में लिखा है ...
Denwerko

5
मैंने इसे फिर से खोल दिया है क्योंकि यह इस मुद्दे पर एक अच्छे सामान्य उत्तर के हकदार हैं (पिछले प्रश्न के विपरीत जो एक अस्पष्ट सी उदाहरण था)।
ओली

4
सबसे अच्छा जवाब: youtube.com/watch?v=aO0OkNxDJ3c
अभिषेक भाटिया

1
इसके अलावा काफी पूर्ण उत्तर: stackoverflow.com/questions/185899/…
एल्जो वलूगी

@AbhishekBhatia वीडियो उपलब्ध नहीं है
जोकर

जवाबों:


58

लिनक्स / यूनिक्स में, शॉर्टकट को लिंक के रूप में जाना जाता है


लिंक दो प्रकार के होते हैं: सॉफ्ट लिंक (प्रतीकात्मक लिंक) या हार्ड लिंक।

  1. नरम लिंक (प्रतीकात्मक लिंक)

    आप फ़ाइलों और निर्देशिकाओं के लिए लिंक बना सकते हैं, और आप अलग-अलग विभाजन पर लिंक और शॉर्टकट बना सकते हैं और मूल से अलग इनोड संख्या के साथ।

    यदि वास्तविक प्रतिलिपि हटा दी जाती है, तो लिंक काम नहीं करेगा

  2. कड़ी कड़ियाँ

    हार्ड लिंक केवल फाइलों के लिए हैं; आप एक अलग इनोड संख्या के साथ अलग विभाजन पर एक फ़ाइल से लिंक नहीं कर सकते।

    यदि वास्तविक प्रतिलिपि हटा दी जाती है तो लिंक काम करेगा , क्योंकि यह अंतर्निहित डेटा तक पहुंचता है असली प्रतिलिपि एक्सेस कर रहा था।


प्रश्न: मैं सॉफ्ट लिंक कैसे बनाऊं?

उत्तर: एक नरम लिंक के साथ बनाया जा सकता है ln -s; पहले आपको स्रोत को परिभाषित करने की आवश्यकता है और फिर आपको गंतव्य को परिभाषित करने की आवश्यकता है। (यह ध्यान रखें कि आपको स्रोत और गंतव्य दोनों के पूर्ण पथ को परिभाषित करने की आवश्यकता है, अन्यथा यह काम नहीं करेगा।)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

यहां छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं कि इसमें एक अलग इनोड है और इसे एक अलग विभाजन पर बनाया जा सकता है।


प्रश्न: मैं हार्ड लिंक कैसे बनाऊं?

उत्तर: एक कड़ी के साथ बनाया जा सकता है ln; पहले आपको स्रोत को परिभाषित करने की आवश्यकता है और फिर आपको गंतव्य को परिभाषित करने की आवश्यकता है। (यह ध्यान रखें कि आपको स्रोत और गंतव्य दोनों के पूर्ण पथ को परिभाषित करने की आवश्यकता है, अन्यथा यह काम नहीं करेगा।)

मान लीजिए कि मेरे पास /scriptनिर्देशिका नाम की स्क्रिप्ट है firefox

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें

ऊपर मैं जाँच करता हूँ कि लिंक काम कर रहा है, और फिर मूल फ़ायरफ़ॉक्स स्क्रिप्ट को हटा दें।


आप सवाल: यह अच्छा होगा यदि कोई व्यक्ति ऐसी सेटिंग प्रदान कर सकता है जहां एक प्रतीकात्मक लिंक पर हार्ड लिंक बेहतर हो सकता है।

उत्तर : डिस्क विभाजन लेआउट के आधार पर, हार्ड लिंक्स की सीमा होती है कि वे एक ही पार्टीशन (-1 पॉइंट) पर होनी चाहिए और केवल फाइल्स (-1 पॉइंट) से लिंक कर सकते हैं , लेकिन अगर ओरिजिनल लिंक को डिलीट किया जाता है तो +1 पॉइंट काम करेगा और यह मूल की तरह काम करता है।

दूसरी ओर, एक नरम लिंक निर्देशिका या फ़ाइलों (+1 बिंदु) को इंगित कर सकता है और कोई विभाजन सीमा (+1 बिंदु) नहीं है, लेकिन (-1 बिंदु) यदि स्रोत हटा दिया गया है तो लिंक काम नहीं करेगा।


क्या मैं एक हार्ड लिंक बना सकता हूं और स्रोत के रूप में इनोड प्रदान कर सकता हूं?
TMOTTM

324

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

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


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

319

"एक तस्वीर एक हजार शब्दों के बराबर होती है।" सचित्र प्रतिनिधित्व


और, "एक उदाहरण सौ पैराग्राफ के लायक है ..."

दो फ़ाइलें बनाएँ:

$ touch blah1   
$ touch blah2

उनमें कुछ डेटा दर्ज करें:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

और जैसा कि अपेक्षित था:

$cat blah1; cat blah2
Cat
Dog

चलो कड़ी और सॉफ्ट लिंक बनाते हैं:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

आइए देखें कि क्या हुआ:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Blah1 का नाम बदलने से कोई फर्क नहीं पड़ता:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

Blah1- हार्ड पॉइंट इनोड, कंटेंट, फाइल का - जो कि बदला नहीं गया था।

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

फ़ाइल की सामग्री नहीं मिल सकी क्योंकि नरम लिंक उस नाम को इंगित करता है, जिसे परिवर्तित किया गया था, और सामग्री को नहीं।
इसी तरह, अगर ब्लाह 1 हटा दिया जाता है, तो ब्लाह 1-हार्ड अभी भी सामग्री रखता है; अगर blah2 हटा दिया जाता है, तो blah2-soft एक गैर-मौजूदा फ़ाइल का एक लिंक है।


स्रोत: Blatantly इसे StackOverflow से कॉपी कर रहा है !


13
आप के लिए निष्पक्ष होने के लिए - आप शीर्ष पर सुंदर छवि को जोड़ दिया ... आह आप भी नकल! दो उत्तरों को मिलाना वास्तव में बहुत मददगार है :)
icc97

2
बेहतर समझाया, कहीं नहीं!
डेनिसबॉट

3
मैं 20 सेकंड के लिए छवि को घूरता रहा और फिर, अचानक, मुझे लगा। यह वास्तव में शानदार है।
मोहम्मद जोरेद

1
btw: हार्डलिंक का उपयोग करना git एक बुरा विचार है , बस किसी के मामले में (नरम लिंक पर निराश) आश्चर्य ... अन्य संस्करण प्रणालियों पर भी लागू हो सकता है।
फ्रैंक नॉक

1
क्या इसकी हार्डलिंक का कोई इनकोड है जो क्लाउड में संग्रहित किसी फ़ाइल के समान है जो इसे किसी भी उपकरण तक पहुँचाता है?
जोकर

89

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

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

आप बता सकते हैं कि आउटपुट के फाइल में कितने नाम हैं ls -l। फ़ाइल मोड के बाद पहला नंबर लिंक काउंट है। 1 से अधिक लिंक वाली फ़ाइल में कहीं अन्य नाम है, और इसके विपरीत, केवल 1 की लिंक गणना वाली फ़ाइल में कोई अन्य (अन्य) हार्ड लिंक नहीं है।


If you replace the named file, then the link still contains the same name, and so now it points to the new file- मुझे लगता है कि यह अच्छी तरह से समझाया नहीं गया है। क्या आपका मतलब है कि अगर मैं उस फ़ाइल को प्रतिस्थापित करता हूं जहां मुझे प्रतीकात्मक लिंक मिला है, तो नाम वाले लिंक अछूते रहते हैं। लेकिन यह केवल तब बदले हुए फ़ाइल को इंगित करेगा जब इसका फ़ाइल नाम (यानी नई फ़ाइल जो पुराने को बदल दिया गया है) प्रतिस्थापित (यानी पुरानी फ़ाइल जिसे नए द्वारा प्रतिस्थापित किया गया है) के समान है, सही है?
माइक

@ माइक, हाँ: प्रतीकात्मक लिंक मूल फ़ाइल नाम की ओर इशारा करता है, इसलिए उस फ़ाइल को बदलने का अर्थ है कि लिंक अब नई फ़ाइल को इंगित करता है।
psusi

Bbut केवल अगर यह एक ही नाम सही है? सहानुभूति को केले की ओर इंगित करता है और मैं फ़ाइल को नारंगी से बदल देता हूं, तो sy लिंक फ़ाइल केले को अब नहीं ढूंढ सकता है अर्थात यह काम नहीं करेगा
माइक

@Mike, दुनिया को बदलने का मतलब है यह एक ही नाम है, अन्यथा आप सिर्फ एक फ़ाइल को हटा रहे हैं और एक अन्य को जोड़ने;)
psusi

58

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

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


धन्यवाद, यह मुझे बताता है कि वे कैसे काम करते हैं, लेकिन वास्तव में हार्ड लिंक क्या करता है? और यह निर्देशिकाओं के लिए काम क्यों नहीं करता है?
चरण_कर लेखक

@knittl: तुम्हें यकीन है? ऐसा लगता है कि कुछ फ़ाइल सिस्टम से लेकर निर्देशिका तक हार्डलिंक की अनुमति है लेकिन केवल रूट ही उन्हें बना सकता है। -d, -F, --directoryस्विच देखें । और हाँ, मैं है में टिप्पणी देखा ln(1)पेज :)
0xC0000022L

1
@kniwor: हार्डलिंक का वर्णन करने का सबसे आसान तरीका "एक ही फ़ाइल (डिस्क पर डेटा) के लिए सिर्फ एक और नाम है"। और - मेरे सिस्टम पर कम से कम - lnनिर्देशिका में हार्डलिंक बनाने के लिए उपयोग नहीं किया जा सकता है। हालांकि, निर्देशिका में हार्डलिंक मौजूद हैं, सबसे प्रमुख उदाहरण है .और ..। मैं अपने मूल उत्तर में इसे शामिल नहीं करना चाहता था, क्योंकि यह केवल चीजों को जटिल करेगा।
knittl

2
@STATUS_ACCESS_DENIED: ठीक है ... लेकिन यह आमतौर पर एक अच्छा विचार नहीं है। इसलिए मैंने अपने मूल उत्तर में »आमतौर पर« लिखा था। उदाहरणों के लिए मेरी पिछली टिप्पणी भी देखें।
knittl

इसलिए एक हार्ड लिंक एक ही फ़ोल्डर / फ़ाइल को अलग-अलग नामों से इंगित कर सकता है अर्थात अलग-अलग नाम जो एक ही इनोड से लिंक करते हैं?
चार्ली पार्कर

21

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

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

गिरी और फाइलसिस्टम में पारदर्शिता से सब कुछ शामिल है।

तो उस पर आधारित:

  • हार्ड-लिंक ही-फाइलसिस्टम लिंकिंग की अनुमति देता है। किसी भी मार्ग पर संकेत कर सकते हैं।
  • हार्ड-लिंक (अनिवार्य रूप से) निरपेक्ष डेटा को इंगित करते हैं। सामीलिंक सापेक्ष पथों (जैसे ../parent.file) को इंगित कर सकते हैं
  • विस्तार से, यदि आप हार्ड-लिंक के लक्ष्य पॉइंटर को आगे बढ़ाते हैं (जो, याद रखें, अपने आप में अनिवार्य रूप से केवल एक हार्ड-लिंक है जो इनोड में इंगित होता है), हार्ड-लिंक अभी भी काम करता है। सिम्लिंक के लक्ष्य को ले जाने से आमतौर पर सिम्लिंक टूट जाता है।
  • एक हार्ड-लिंक को हल करना तेजी से लेकिन बहुत संभव है। गति का वह महत्वहीन हिस्सा एक अनम्य फ़ाइल सिस्टम की लागत पर आता है।

मैं अपने आप को थोड़ा भ्रमित कर सकता हूं लेकिन विभिन्न चीजों के माध्यम से पढ़ना, मैं एक मानक फ़ाइल और हार्डलिंक के बीच अंतर खोजने के लिए संघर्ष कर रहा हूं। जिस तरह से मैं इसे पढ़ रहा हूं वह हर फाइल में एक हार्डलिंक (फ़ाइल नाम को संचयित करना) है, जो भौतिक डेटा को इंगित करने वाले एक एनोड को जोड़ता है।

हार्डलिंक जोड़ना अतिरिक्त फाइलसिस्टम-आधारित पॉइंटर के साथ सिर्फ एक इनकोड प्रदान करता है। क्या वह सही है?


5
मुझे लगता है कि आप सही हैं, प्रत्येक फाइल एक इनकोड के लिए एक पाथनेम है, और एक कठिन लिंक एक ही इनोड के लिए एक अतिरिक्त पथनाम है। तो एक हार्ड लिंक एक सामान्य फ़ाइल से अलग नहीं है।
enzotib

मैं इसे समझने की कोशिश कर रहा हूं ... लेकिन आप कहते हैं:> "प्रतीकात्मक-लिंक अलग-अलग फाइलें (अलग इनोड और डेटा सहित ) हैं जो एक फाइल के लिए एक फाइल सिस्टम पथ को संग्रहीत करते हैं।" क्या वास्तव में एक सिमलिंक के पास अलग से डेटा है? तो फिर यह ठीक है की एक प्रति की तरह यह लिंक करने के लिए, सही? ... और हर बार जब कुछ सिमिलिंक के लिए लिखा जाता है, तो उसे दो बार डिस्क पर लिखना पड़ता है? कुछ समझ नहीं आया।
मिनीगॉड

@MiniGod कोई सिमिंक डेटा के ब्लॉक के लिए एक इनोड नहीं है जो दूसरे इनोड (फ़ाइल नाम) के लिए पथ संग्रहीत करता है। हाँ, यह मैट्रिक्स की तरह भ्रामक है लेकिन एक बार आप इसे पाने के लिए, आप कभी नहीं भूलूँगा :)
ओली

@ मैं भ्रमित हो सकता हूं, लेकिन जब आप कहते हैं: "अलग इनोड और डेटा सहित ", तो आपका मतलब है कि सहकर्मी के पास डेटा है !?
मिनीगॉड

1
@MiniGod हाँ। साइमलिंक डेटा (केवल एक सामान्य फ़ाइल की तरह) की ओर इशारा करता है और यह डेटा एक पथ है। यह उस से थोड़ा अधिक चतुर है - सहानुभूति के माध्यम से पारदर्शी उपयोग की अनुमति देने के लिए - लेकिन यह अनिवार्य रूप से वे सभी हैं।
ओली

15

सॉफ्ट लिंक का उपयोग कब करें:

फाइलसिस्टम के साथ लिंक: यदि आप फाइलसिस्टम के पार फाइल को लिंक करना चाहते हैं, तो आप केवल सीमलिंक / सॉफ्ट लिंक का उपयोग कर सकते हैं।

निर्देशिकाओं के लिए लिंक: यदि आप निर्देशिकाओं को लिंक करना चाहते हैं, तो आपको सॉफ्ट लिंक्स का उपयोग करना होगा, क्योंकि आप किसी निर्देशिका के लिए हार्ड लिंक नहीं बना सकते हैं।

हार्ड लिंक का उपयोग कब करें:

स्टोरेज स्पेस: हार्ड लिंक में अंतरिक्ष की बहुत ही नगण्य मात्रा होती है, क्योंकि हार्ड लिंक बनाते समय कोई नए इनोड नहीं बनते हैं। सॉफ्ट लिंक्स में हम एक फाइल बनाते हैं, जिसमें स्पेस की खपत होती है (फाइल सिस्टम के आधार पर आमतौर पर 4KB)

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

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


ध्यान दें कि पथनाम आकार 64 बाइट्स के लिए एक तेज़ प्रतीकात्मक लिंक भी है। यह अभी भी एक इनकोड लेता है, लेकिन 4kb ब्लॉक स्पेस का उपभोग नहीं करता है।
10

8

जब आप "फ़ाइल नाम" और एक हार्ड लिंक के बीच अंतर खोजने की कोशिश करते हैं तो भ्रम पैदा होता है क्योंकि कोई भी नहीं है।

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

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

Symlinks, जैसा कि पहले बताया गया था, आपको बस " <targetname>फ़ोल्डर नाम की एक फ़ाइल है <targetfolder>"। वे कड़ी कड़ी की ओर इशारा करते हैं। वे नहीं जानते कि डेटा कहाँ है। हार्ड लिंक जानता है कि।


0

यह बहुत सरल है। फ़ाइलें (और निर्देशिका!) ब्लॉक डिवाइस (HDD या जो भी हो) के पते पर संग्रहीत की जाती हैं। आम तौर पर आपके पास एक पते पर एक ही नाम मैप किया जाता है, और इसी तरह आपको अपनी फ़ाइल मिलती है। एक कड़ी एक ही पते पर मैप की गई दूसरी, तीसरी आदि नाम है। इसके बजाय एक प्रतीकात्मक लिंक प्रतीक को संदर्भित करता है - नाम - और इसलिए पहले नाम के लिए मैप किया गया दूसरा नाम है। जहां तक ​​कर्नेल का संबंध है, एक बार जब यह प्रतीकात्मक लिंक लक्ष्य को पढ़ता है तो यह रुक जाता है और लक्ष्य मान के साथ शुरुआत में वापस चला जाता है क्योंकि फ़ाइल नाम (अधिक या कम) इसलिए सापेक्ष सीलिंक संभव है लेकिन बेतहाशा अपवित्र। अगर यह स्पष्ट रूप से यूजर्स कोड में क्वियर किया गया हो तो सिवाय टार्म्स के नाम को फाइल सिस्टम लेवल के ऊपर इस्तेमाल नहीं किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.