यहां बहुत सारे सही उत्तर हैं, लेकिन मुझे नहीं लगता कि किसी ने वास्तव में मूल गलत धारणा से निपट लिया है। मूल प्रश्न मूल रूप से "जब मैं एक प्रतीकात्मक लिंक बनाता हूं, तो बाद में इसे पहचानना आसान होता है। लेकिन मैं यह पता नहीं लगा सकता कि हार्ड लिंक की पहचान कैसे करें।" और हां, उत्तर मूल रूप से "आप नहीं कर सकते हैं" को उबालते हैं, और अधिक या कम क्यों समझाते हैं, लेकिन किसी ने भी यह नहीं माना है कि वास्तव में, यह भ्रमित और अजीब है।
यदि आप यह सब पढ़ रहे हैं और आपको पता चल गया है कि क्या चल रहा है, तो आप अच्छे हैं; आपको मेरे छोटे से पढ़ने की जरूरत नहीं है। यदि आप अभी भी भ्रमित हैं, तो चलते रहें।
वास्तव में बहुत कम जवाब है कि एक कड़ी कड़ी वास्तव में एक कड़ी नहीं है, जिस तरह से एक प्रतीकात्मक लिंक नहीं है। यह निर्देशिका संरचना में एक नई प्रविष्टि है जो बाइट्स के उसी समूह को इंगित करता है जिसे मूल निर्देशिका प्रविष्टि ने किया था, और एक बार जब आप इसे बना लेते हैं, तो यह पहले के रूप में 'वास्तविक' और वैध है। आपकी ड्राइव की प्रत्येक 'सामान्य' फ़ाइल में कम से कम एक कड़ी है; इसके बिना, आप इसे किसी भी में नहीं देखेंगेनिर्देशिका, और इसे संदर्भित करने या इसका उपयोग करने में असमर्थ होगा। इसलिए यदि आपके पास एक फ़ाइल Fred.txt है, और आप इसके लिए Wilma.txt और Barney.txt को कड़ी से कड़ी करते हैं, तो तीनों नाम (और निर्देशिका प्रविष्टियाँ) एक ही फ़ाइल को संदर्भित करते हैं, और वे सभी समान रूप से मान्य हैं। OS के लिए यह बताने का कोई तरीका नहीं है कि आपके टेक्स्ट एडिटर में "सेव" हिट करने पर एक एंट्री बनाई गई थी, और अन्य "ln" कमांड से बनाए गए थे।
OS को इस बात पर नज़र रखनी होगी कि एक ही फ़ाइल में कितनी अलग-अलग प्रविष्टियाँ इंगित कर रही हैं। यदि आप Wilma.txt को हटाते हैं, तो कोई आश्चर्य नहीं कि आप अपने ड्राइव पर कोई स्थान खाली नहीं करते हैं। लेकिन अगर आप फ्रेडटेक्स्ट ('ओरिजिनल' फाइल) को डिलीट कर देते हैं, तो भी आप अपनी ड्राइव पर कोई जगह खाली नहीं करेंगे, क्योंकि फ्रेड के नाम से जानी जाने वाली ड्राइव का डेटा अभी भी Barney.txt है। केवल जब आप सभी निर्देशिका प्रविष्टियों को हटाते हैं , तो OS उस स्थान को आवंटित करेगा, जो डेटा स्वयं कैप्चर कर रहा था।
यदि बार्नी.टेक्स्ट एक प्रतीकात्मक लिंक था, तो फ्रेडटेक्स्ट को हटाकर स्थान को आबंटित कर दिया जाएगा, और बार्नी.टेक्स्ट अब एक टूटी हुई कड़ी होगी। इसके अलावा, यदि आप एक ऐसी फ़ाइल को स्थानांतरित करते हैं या उसका नाम बदल देते हैं, जिस पर एक सांकेतिक लिंक होता है, तो आप लिंक को तोड़ देंगे। लेकिन आप हार्ड-लिंक्ड फ़ाइल को स्थानांतरित कर सकते हैं या उसका नाम बदल सकते हैं, जो आप उस फ़ाइल / डेटा को इंगित करने वाली अन्य निर्देशिका प्रविष्टियों को तोड़े बिना, क्योंकि वे सभी निर्देशिका प्रविष्टियाँ हैं जो ड्राइव पर डेटा के एक ही ब्लॉक को संदर्भित करती हैं (उपयोग करके) इनकोड # उस डेटा का)।
[यह दो साल बाद है, और उस आखिरी बिट ने मुझे एक मिनट के लिए भ्रमित किया , इसलिए मुझे लगता है कि मैं स्पष्ट कर दूंगा। यदि आप "mv ./Wilma.txt ../elsewhere/Betty.txt" टाइप करते हैं, तो ऐसा लगता है कि आप फ़ाइल ले जा रहे हैं, लेकिन वास्तव में, आप नहीं हैं। आप वास्तव में जो कर रहे हैं वह आपकी वर्तमान निर्देशिका की निर्देशिका सूची से एक पंक्ति वस्तु निकाल रहा है, जो कहता है कि "विल्मा.टेक्स्ट" नाम उस डेटा से जुड़ा है जिसे इनोड ###### का उपयोग करके पाया जा सकता है #, "और निर्देशिका की निर्देशिका सूची में एक नई पंक्ति वस्तु जोड़ रहा है .. जो कहती है कि" "बेट्टी.टेक्स्ट" नाम उस डेटा के साथ जुड़ा हुआ है जिसे इनोड ####### के माध्यम से पाया जा सकता है। यही कारण है कि आप एक 2 गीगाबाइट फ़ाइल को '2 किलोबाइट फ़ाइल' के रूप में जल्दी से स्थानांतरित कर सकते हैं, जब तक आप उन्हें उसी ड्राइव पर किसी अन्य स्थान पर ले जा रहे हों।]
क्योंकि OS को इस बात पर नज़र रखनी है कि एक ही डेटा के कितने अलग-अलग निर्देशिका प्रविष्टियाँ इंगित कर रहे हैं, आप बता सकते हैं कि क्या किसी विशेष फ़ाइल को हार्ड लिंक से जोड़ा गया है, भले ही आप निश्चित रूप से यह नहीं बता सकते हैं कि निर्देशिका प्रविष्टि है या नहीं 'देख रहा है' मूल 'एक या नहीं है। एक तरीका है "ls" कमांड, विशेष रूप से "ls -l" (यह डैश के बाद एक लो-केस L है)
पहले का उदाहरण उधार लेने के लिए ...।
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
पहले अक्षर का पानी का छींटा, इसलिए यह एक निर्देशिका या कुछ और विदेशी नहीं है, यह एक 'नियमित' साधारण फ़ाइल है। लेकिन अगर यह वास्तव में सामान्य था, तो rwx-ish भाग के बाद की संख्या "1" होगी, जैसा कि, "डेटा के इस ब्लॉक की ओर इशारा करते हुए एक निर्देशिका प्रविष्टि है।" लेकिन यह कठिन लिंक के प्रदर्शन का हिस्सा है, इसलिए इसके बजाय यह "3" कहता है।
ध्यान दें कि यह संभवतः अजीब और रहस्यमय व्यवहार का कारण बन सकता है (यदि आपने अपने सिर को कड़ी से कड़ी के चारों ओर लपेट नहीं किया है, तो)। यदि आप अपने टेक्स्ट एडिटर में Fred.txt खोलते हैं और कुछ बदलाव करते हैं, तो क्या आप Wilma.txt और Barney.txt में समान बदलाव देखेंगे? शायद। शायद। यदि आपका पाठ संपादक मूल फ़ाइल को खोलकर और उसमें परिवर्तन लिखकर परिवर्तनों को सहेजता है, तो हाँ, तीनों नाम अभी भी उसी (नए परिवर्तित) पाठ की ओर इशारा करेंगे। लेकिन अगर आपका टेक्स्ट एडिटर एक नई फ़ाइल बनाता है (फ्रेड-न्यू-टेम्पे.टैक्स), तो आपका बदला हुआ संस्करण उस पर लिखता है, फिर फ्रेडटेक्स्ट को डिलीट कर देता है, फिर फ्रेड-न्यू-टेम्प्लेट का नाम बदलकर फ्रेड.टैक्स, विल्मा और बार्नी करेगा अभी भी मूल संस्करण की ओर संकेत किया जा रहा है, न कि नया परिवर्तित संस्करण। यदि आप कठिन लिंक नहीं समझते हैं, तो यह आपको थोड़ा पागल बना सकता है। :) [ठीक है, मैं वास्तव में व्यक्तिगत रूप से किसी का नहीं जानतापाठ संपादक जो नई फ़ाइल / नाम बदलने का काम करेंगे, लेकिन मुझे बहुत सारे अन्य कार्यक्रमों के बारे में पता है जो वास्तव में ऐसा करते हैं, इसलिए सतर्क रहें।]
एक अंतिम नोट: 'fsck' (फाइल सिस्टम चेक) चेक के लिए एक चीज यह है कि क्या आपके ड्राइव पर डेटा के ब्लॉक हैं जो किसी भी तरह अब किसी भी निर्देशिका प्रविष्टियों द्वारा संदर्भित नहीं हैं। कभी-कभी कुछ गलत हो जाता है, और एकमात्र निर्देशिका प्रविष्टि जो एक इनोड को इंगित करती है हटा दी जाती है, लेकिन ड्राइव स्थान को "उपलब्ध" के रूप में चिह्नित नहीं किया जाता है। तो fsck में से एक काम सभी निर्देशिका प्रविष्टियों के साथ सभी आवंटित स्थान का मिलान करना है ताकि यह सुनिश्चित किया जा सके कि कोई अप्रतिबंधित फ़ाइलें नहीं हैं। यदि यह कुछ पाता है, तो यह नई निर्देशिका प्रविष्टियाँ बनाता है और उन्हें "खोया + पाया" में डालता है।