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




symlink hardlink (17)

हार्ड लिंक उपयोगी हो सकते हैं, क्योंकि यह आपको कई अलग-अलग स्थानों से फ़ाइल तक पहुंचने में सक्षम बनाता है। यह सीधे इनोड का उपयोग करता है। कुछ प्रतिबंध हैं:

  1. हार्ड लिंक एक ही डिवाइस पर मौजूद होना चाहिए।
  2. हम निर्देशिकाओं के लिए हार्ड लिंक नहीं बना सकते हैं।
  3. मूल फ़ाइल के उपनामों की संख्या है। जब अंतिम नाम हटा दिया जाता है, तो सामग्री भी हटा दी जाती है।

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

जहां एक प्रतीकात्मक लिंक (जिसे सॉफ्ट लिंक भी कहा जाता है) सीधे इनोड से लिंक नहीं करता है लेकिन फ़ाइल के नाम पर। मुख्य नुकसान यह है कि जब मूल फ़ाइल हटा दी जाती है, तो प्रतीकात्मक लिंक अमान्य हो जाता है और कोई भी काम नहीं करता है लंबे समय तक।

इनोड पर कुछ जानकारी:

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

  1. डेटा ब्लॉक जहां फ़ाइल सामग्री संग्रहीत की जाती है
  2. निर्माण, पहुंच, और संशोधन दिनांक
  3. अनुमतियां
  4. फाइल मालिकों

जानकारी का एक महत्वपूर्ण हिस्सा इनोड में संग्रहीत नहीं है: नाम। नाम निर्देशिका में संग्रहीत हैं, और प्रत्येक फ़ाइल नाम जानता है कि कौन सी इनोड को आगे फ़ाइल जानकारी तक पहुंचने के लिए संबोधित करना है। यह जानना दिलचस्प है कि एक इनोड नहीं जानता कि इसका नाम कौन सा है; यह सिर्फ जानता है कि इनोड के साथ कितने नाम जुड़े हुए हैं। इन नामों को हार्ड लिंक के रूप में जाना जाता है। जब आप कोई फ़ाइल बनाते हैं, तो आप इसे एक नाम देते हैं। असल में, यह नाम एक कठिन लिंक है।

हाल ही में मुझे नौकरी साक्षात्कार के दौरान यह पूछा गया था। मैं ईमानदार था और कहा कि मुझे पता था कि एक प्रतीकात्मक लिंक कैसे व्यवहार करता है और कैसे एक बना सकता है, लेकिन एक कठिन लिंक के उपयोग को समझ में नहीं आता है और यह एक प्रतीकात्मक से अलग कैसे होता है।


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


सॉफ्ट लिंक :

मुलायम या प्रतीकात्मक मूल फ़ाइल में एक छोटा सा कट है .... यदि आप मूल को हटाते हैं तो शॉर्टकट विफल रहता है और यदि आप केवल शॉर्ट कट को हटाते हैं तो मूल के साथ कुछ भी नहीं होता है।

सॉफ्ट लिंक सिंटेक्स : ln -s Pathof_Target_file link

आउटपुट: link -> ./Target_file

सबूत: readlink link भी ls -l link आउटपुट में आप lrwxrwxrwx में पहले अक्षर को एल के रूप में lrwxrwxrwx जो संकेत है कि फ़ाइल एक मुलायम लिंक है।

लिंक हटाना: unlink link

नोट: यदि आप चाहें, तो आपका सॉफ्टलिंक वर्तमान डीआईआर से कहीं और स्थानांतरित करने के बाद भी काम कर सकता है। सुनिश्चित करें कि आप एक नरम लिंक बनाते समय पूर्ण पथ देते हैं और सापेक्ष पथ नहीं देते हैं। यानी (रूट / उपयोगकर्ता / target_file से शुरू करें और नहीं ./Target_file)

हार्ड लिंक:

हार्ड लिंक एक दर्पण प्रति या एक ही फ़ाइल में एकाधिक पथ से अधिक है। फ़ाइल 1 में कुछ करें और यह फ़ाइल 2 में दिखाई देता है। एक को हटाने से दूसरे को ठीक रहता है।

इनोड (या फ़ाइल) केवल तब हटा दिया जाता है जब सभी (हार्ड) लिंक या (समान फ़ाइल) इनोड के सभी पथ हटा दिए जाते हैं।

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

हार्ड लिंक वाक्यविन्यास : ln Target_file link

आउटपुट: नाम लिंक वाले एक फ़ाइल को लक्ष्यफाइल के समान इनपुट नंबर के साथ बनाया जाएगा।

सबूत: ls -i link Target_file (उनके ls -i link Target_file जांच करें)

लिंक हटाना: rm -f link (लिंक को सामान्य फ़ाइल की तरह हटाएं)

नोट : प्रतीकात्मक लिंक फ़ाइल सिस्टम को फैला सकते हैं क्योंकि वे केवल एक और फ़ाइल का नाम हैं। जबकि हार्ड लिंक केवल उसी फ़ाइल सिस्टम के भीतर मान्य हैं।

प्रतीकात्मक लिंक में कुछ विशेषताएं हैं जो हार्ड लिंक गायब हैं:

  • हार्ड लिंक फ़ाइल सामग्री को इंगित करता है। जबकि सॉफ्ट लिंक फ़ाइल नाम को इंगित करता है।
  • जबकि हार्ड लिंक का आकार सामग्री का आकार है जबकि सॉफ्ट लिंक में फ़ाइल का नाम आकार है।
  • हार्ड लिंक एक ही इनोड साझा करते हैं। नरम लिंक नहीं करते हैं।
  • हार्ड लिंक फ़ाइल सिस्टम को पार नहीं कर सकते हैं। नरम लिंक करते हैं।
  • आप तुरंत जानते हैं कि हार्ड लिंक के साथ एक प्रतीकात्मक लिंक इंगित करता है, आपको एक ही इनोड साझा करने वाली फ़ाइलों को ढूंढने के लिए संपूर्ण फ़ाइल सिस्टम का पता लगाने की आवश्यकता होती है।
  • हार्ड लिंक निर्देशिकाओं को इंगित नहीं कर सकते हैं।

कारण हार्ड लिंक फ़ाइल सिस्टम या विभाजन को पार नहीं कर सकते हैं:

हार्ड डिस्क पर बहुत सारे क्षेत्र हैं।

कहें कि फ़ाइल इनोड (सेक्टर) 4001 पर शुरू होती है और 5000 पर समाप्त होती है। फ़ाइल "/export/home/john/mail.doc" है

फिर: 1. "mail.doc" के लिए एक कठिन लिंक जिसका नाम "हार्डलिंक टॉममेल" है, वह मान है: "4001"। 2. "mail.doc" का एक सॉफ्ट लिंक जिसका नाम "सॉफ्टलिंक टॉममेल" है, में यह मान है: "/export/home/john/mail.doc"।

1 में) हार्ड लिंक केवल उसी डिस्क पर इंगित कर सकता है। यह किसी अन्य ड्राइव को इंगित नहीं कर सकता है। सभी ड्राइवों में मूल्य "4001" का एक इनोड होता है, हार्ड डिस्क सभी डिस्क के बीच अंतर कैसे कर सकता है? कौन सा ड्राइव "4001" है?

2 में) मुलायम लिंक में एक स्ट्रिंग होती है। स्ट्रिंग किसी अन्य ड्राइव पर किसी अन्य फाइल सिस्टम को इंगित कर सकती है, क्योंकि पूर्ण पथ निर्दिष्ट है।


मैं आपको विकिपीडिया को इंगित करूंगा:

कुछ बिंदु:

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

जब मूल फ़ाइल चारों ओर स्थानांतरित हो रही है तो हार्ड लिंक उपयोगी होते हैं। उदाहरण के लिए, फ़ाइल को / bin से / usr / bin या / usr / local / bin से ले जाना। फ़ाइल में किसी भी सिम्लिंक को / bin में तोड़ दिया जाएगा, लेकिन एक हार्डलिंक, फ़ाइल के लिए सीधे इनोड पर एक लिंक होने पर, परवाह नहीं करेगा।

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

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

मुझे यह भी लगता है कि एमएमएपी (2) और यहां तक ​​कि खुली (2) जैसी चीजें एक ही कार्यक्षमता का उपयोग करती हैं जैसे फ़ाइल के इनोड को सक्रिय रखने के लिए हार्डलिंक्स, ताकि फ़ाइल अनलिंक (2) एड हो जाए, फिर भी इनोड प्रक्रिया को जारी रखने की अनुमति देने के लिए बनी हुई है, और प्रक्रिया को बंद करने के बाद ही यह फ़ाइल वास्तव में दूर हो जाती है। यह अधिक सुरक्षित अस्थायी फ़ाइलों के लिए अनुमति देता है (यदि आप खुले और अनियमित होने के लिए अनलिंक कर सकते हैं, जिसके लिए एक POSIX API हो सकता है जिसके लिए मुझे याद नहीं है, तो आपके पास वास्तव में एक सुरक्षित अस्थायी फ़ाइल है) जहां आप पढ़ सकते हैं / लिख सकते हैं बिना किसी डेटा के इसे एक्सेस करने में आपका डेटा। खैर, यह सच था / proc ने सभी को आपके फ़ाइल वर्णनकर्ताओं को देखने की क्षमता दी, लेकिन यह एक और कहानी है।

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


बस, हार्ड लिंक: बस फ़ाइल में नया नाम जोड़ें, इसका मतलब है कि एक फ़ाइल में एक ही समय में कई नाम हो सकते हैं, सभी नाम एक-दूसरे के बराबर हैं, कोई भी पसंदीदा नहीं है, हार्ड लिंक का मतलब सभी सामग्रियों की प्रतिलिपि बनाना नहीं है फ़ाइल का और नई फाइल बनाना नहीं है, यह सिर्फ ज्ञात होने के लिए एक वैकल्पिक नाम बनाते हैं ..

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


इस जवाब में जब मैं एक फाइल कहता हूं तो मेरा मतलब स्मृति में स्थान है

सहेजे गए सभी डेटा को इनोड नामक डेटा संरचना का उपयोग करके स्मृति में संग्रहीत किया जाता है। प्रत्येक इनोड में एक इनोडेनंबर होता है। इनोड संख्या को इनोड तक पहुंचने के लिए उपयोग किया जाता है। फ़ाइल के सभी हार्ड लिंक के अलग-अलग नाम हो सकते हैं लेकिन समान इनोड नंबर साझा करते हैं। चूंकि सभी हार्ड लिंक में एक ही इनोडेनंबर होता है (जो एक ही इनोड तक पहुंच जाता है), वे सभी एक ही भौतिक स्मृति को इंगित करते हैं।

एक प्रतीकात्मक लिंक एक विशेष प्रकार की फाइल है। चूंकि यह एक फ़ाइल भी है, इसमें फ़ाइल का नाम और एक इनोड नंबर होगा। जैसा कि ऊपर दिया गया है, इनोड संख्या में एक इनोड acceses जो डेटा को इंगित करता है.अब क्या एक प्रतीकात्मक लिंक विशेष बनाता है प्रतीकात्मक लिंक में इनोडेनबॉर्स उन इनोड्स तक पहुंचते हैं जो किसी अन्य फ़ाइल को "पथ" इंगित करते हैं। अधिक विशेष रूप से प्रतीकात्मक लिंक में इनोड संख्या उन इनोड्स को acceses जो एक और हार्ड लिंक इंगित करते हैं।

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


इसके अलावा:

  1. हार्ड लिंक का प्रदर्शन प्रतीकात्मक लिंक (माइक्रो-प्रदर्शन) से बेहतर है
  2. प्रतीकात्मक लिंक की प्रतिलिपि बनाई जा सकती है, संस्करण-नियंत्रित, .. आदि। दूसरे शब्दों में, वे एक वास्तविक फाइल हैं। दूसरी तरफ, एक कठिन लिंक थोड़ा कम स्तर पर कुछ है और आप पाएंगे कि प्रतीकात्मक लिंक की तुलना में, कम उपकरण हैं जो कठोर लिंक के साथ हार्ड लिंक के रूप में काम करने के लिए साधन प्रदान करते हैं और सामान्य फ़ाइलों के रूप में नहीं

MSDN ,

MSDN

एक प्रतीकात्मक लिंक एक फ़ाइल-सिस्टम ऑब्जेक्ट है जो किसी अन्य फ़ाइल सिस्टम ऑब्जेक्ट को इंगित करता है। जिस वस्तु को इंगित किया जा रहा है उसे लक्ष्य कहा जाता है।

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

प्रतीकात्मक लिंक यूनिक्स ऑपरेटिंग सिस्टम के साथ प्रवासन और अनुप्रयोग संगतता में सहायता के लिए डिज़ाइन किए गए हैं। माइक्रोसॉफ्ट ने यूनिक्स लिंक की तरह काम करने के लिए अपने प्रतीकात्मक लिंक लागू किए हैं।

प्रतीकात्मक लिंक या तो पूर्ण या सापेक्ष लिंक हो सकते हैं। पूर्ण लिंक लिंक हैं जो पथ नाम के प्रत्येक भाग को निर्दिष्ट करते हैं; रिश्तेदार लिंक निर्धारित किए जाते हैं कि सापेक्ष-लिंक विनिर्देशक निर्दिष्ट पथ में हैं

पूर्ण प्रतीकात्मक लिंक का एक उदाहरण

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

सापेक्ष प्रतीकात्मक लिंक का एक उदाहरण

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

हार्ड लिंक

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

विंडोज़ में एक हार्ड लिंक बनाने के लिए, जहां लिंक बनाया जाना है वहां नेविगेट करें और यह आदेश दर्ज करें:

mklink /H Link_name target_path

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

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

संगम

एनटीएफएस जंक्शन नामक एक और लिंक प्रकार का समर्थन करता है। एमएसडीएन इसे निम्नानुसार परिभाषित करता है:

एक जंक्शन (जिसे मुलायम लिंक भी कहा जाता है) एक हार्ड लिंक से अलग होता है जिसमें भंडारण वस्तुओं का संदर्भ अलग-अलग निर्देशिका होते हैं, और एक जंक्शन एक ही कंप्यूटर पर विभिन्न स्थानीय वॉल्यूम्स पर स्थित निर्देशिकाओं को लिंक कर सकता है । अन्यथा, जंक्शन हार्ड लिंक के समान रूप से काम करते हैं।

हार्ड लिंक सेक्शन और जंक्शन सेक्शन में बोल्ड किए गए हिस्सों में दोनों के बीच बुनियादी अंतर दिखता है।

विंडोज़ में जंक्शन बनाने के लिए कमांड, नेविगेट करें कि लिंक कहां बनाया जाना है और फिर दर्ज करें:

mklink /J link_name target_path

हार्ड लिंक बनाम सॉफ्ट लिंक आसानी से इस छवि द्वारा समझाया जा सकता है।


प्रतीकात्मक लिंक हार्ड लिंक के समान तरीके से फ़ाइल में एक और नाम देते हैं। लेकिन शेष प्रतीकात्मक लिंक होने पर भी एक फ़ाइल हटा दी जा सकती है।


जैसा कह रहा है, एक तस्वीर हजारों शब्दों के लायक है। यहां बताया गया है कि मैं इसे कैसे कल्पना करता हूं:

यहां बताया गया है कि हम उस तस्वीर को कैसे प्राप्त करते हैं:

  1. फ़ाइल सिस्टम में myfile.txt नाम दें जो एक नए इनोड को इंगित करता है (जिसमें फ़ाइल के लिए मेटाडेटा होता है और डेटा के ब्लॉक में इंगित करता है जिसमें इसकी सामग्री होती है, यानी "हैलो, वर्ल्ड!" टेक्स्ट:

    $ echo 'Hello, World!' > myfile.txt
    
  2. फ़ाइल myfile.txt फ़ाइल के लिए my-hard-link हार्ड लिंक बनाएं, जिसका अर्थ है "एक फ़ाइल बनाएं जो उसी myfile.txt इंगित करे जो myfile.txt इंगित करें":

    $ ln myfile.txt my-hard-link
    
  3. फ़ाइल myfile.txt एक सॉफ्ट लिंक my-soft-link बनाएं, जिसका अर्थ है "फ़ाइल बनाएं जो फ़ाइल myfile.txt को इंगित करे":

    $ ln -s myfile.txt my-soft-link
    

देखें कि अब क्या होगा यदि myfile.txt हटा दिया गया है (या स्थानांतरित): my-hard-link अभी भी एक ही सामग्री को इंगित करता है, और इस प्रकार अप्रभावित है, जबकि my-soft-link अब कुछ भी इंगित नहीं करता है। अन्य उत्तरों प्रत्येक के पेशेवरों / विपक्ष पर चर्चा करते हैं।


प्रतीकात्मक लिंक पथ नाम से लिंक हैं। यह किसी सिस्टम के फ़ाइल पेड़ में कहीं भी हो सकता है, और लिंक बनने पर भी मौजूद नहीं होना चाहिए। लक्ष्य पथ सापेक्ष या पूर्ण हो सकता है।

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


उपरोक्त सभी उत्तरों को जोड़कर, हार्डलिंक और सॉफ्टलिंक फ़ाइल को ढूंढने में अंतर को नीचे समझा जा सकता है:

मेरे पास मेरी वर्तमान निर्देशिका में एक फ़ाइल f6 है, साथ ही टी 2 नाम की एक निर्देशिका है।

फ़ाइल f1 और ./t2/f2 f6 प्रतीकात्मक लिंक हैं।

फ़ाइल ./t2/f8 और ./t2/f8 f6 हार्ड लिंक हैं।

नरम और कड़ी लिंक खोजने के लिए हम इसका उपयोग कर सकते हैं:

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

केवल हार्डलिंक खोजने के लिए हम इसका उपयोग कर सकते हैं:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

चूंकि एक ही फ़ाइल सिस्टम पर -xdev बनाया जा सकता है, इसलिए हम उसी फ़ाइल-सिस्टम / माउंट-पॉइंट में -L विकल्प का उपयोग किए बिना -L विकल्प के साथ सभी -xdev खोज सकते हैं। यह विभिन्न माउंट पॉइंट्स में अनावश्यक खोज बचाता है।

तो हार्डलिंक को खोजना कुछ हद तक तेज़ है, फिर सॉफ्टलिंक खोजना (अगर मैं गलत हूं या स्पष्ट नहीं हूं तो कृपया सुधारें)।


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

उदाहरण के तौर पर, एक फ़ाइल A.txt बनाएं, एक हार्ड लिंक B.txt बनाएं, और A.txt हटाएं। जब आपने A.txt बनाया, तो कुछ डेटा बनाया गया था, और एक निर्देशिका प्रविष्टि A.txt। जब आपने हार्ड लिंक बनाया, तो एक और निर्देशिका प्रविष्टि B.txt बनाया गया था, जो सटीक उसी डेटा को इंगित करता था। जब आप A.txt को हटाते हैं, तो आपके पास अभी भी सभी डेटा और एक निर्देशिका निर्देशिका B.txt है, ठीक उसी तरह जैसे आपने पहली बार फ़ाइल B.txt बनाई थी।

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


वृद्धिशील बैकअप करते समय हार्ड लिंक बहुत उपयोगी होते हैं। उदाहरण के लिए, rsnapshot देखें। विचार हार्ड लिंक का उपयोग कर कॉपी करना है:

  • एन + 1 में बैकअप नंबर एन कॉपी करें
  • बैकअप एन - 1 से एन कॉपी करें
  • ...
  • बैकअप 1 में बैकअप 0 कॉपी करें
  • किसी भी बदली हुई फ़ाइलों के साथ बैकअप 0 अपडेट करें।

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


फ़ाइल सिस्टम फ़ाइलों के नीचे इनोड्स द्वारा प्रतिनिधित्व किया जाता है (या यह एकाधिक इनोड्स निश्चित नहीं है)

फ़ाइल सिस्टम में एक फ़ाइल मूल रूप से एक इनोड के लिए एक लिंक है।
एक कठिन लिंक तब एक ही अंतर्निहित इनोड के लिंक के साथ एक और फ़ाइल बनाता है।

जब आप कोई फ़ाइल हटाते हैं तो यह अंतर्निहित इनोड में एक लिंक हटा देता है। इनोड को हटा दिए जाने पर इनोड केवल हटा दिया जाता है (या हटाया जा सकता है / अधिक लिखने योग्य)।

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

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

नोट: हार्ड लिंक केवल उसी फ़ाइल सिस्टम के भीतर मान्य हैं। प्रतीकात्मक लिंक फ़ाइल सिस्टम को फैला सकते हैं क्योंकि वे बस किसी अन्य फ़ाइल का नाम हैं।





hardlink