यह सिर्फ एक बुरा विचार है, क्योंकि हार्ड लिंक और मूल नाम के बीच अंतर बताने का कोई तरीका नहीं है।
निर्देशिकाओं के लिए हार्ड लिंक देने से फाइलसिस्टम की निर्देशित एसाइक्लिक ग्राफ संरचना टूट जाएगी, संभवतः डायरेक्टरी लूप्स और डैंगलिंग डाइरेक्टरी उपप्रकार बना देगा, जो fsck
किसी भी अन्य फाइल ट्री वॉकर एरर प्रोन को बनाएगा ।
सबसे पहले, इसे समझने के लिए, आइए इनोड्स के बारे में बात करते हैं। फाइलसिस्टम का डेटा डिस्क पर ब्लॉक में आयोजित किया जाता है, और उन ब्लॉकों को एक इनोड द्वारा एकत्र किया जाता है। आप इनकोड को फ़ाइल के रूप में सोच सकते हैं। इनोडेस में फ़ाइल नाम की कमी होती है, हालांकि। यहीं से लिंक आते हैं।
एक लिंक इनकोड में केवल एक संकेतक है। एक निर्देशिका एक इनोड है जो लिंक रखती है। एक डायरेक्टरी में प्रत्येक फ़ाइलनाम एक इनकोड का एक लिंक है। यूनिक्स में एक फ़ाइल खोलने से एक लिंक भी बनता है, लेकिन यह एक अलग प्रकार का लिंक है (यह एक नामित लिंक नहीं है)।
एक हार्ड लिंक सिर्फ एक अतिरिक्त निर्देशिका प्रविष्टि है जो उस इनोड की ओर इशारा करती है। जब आप ls -l
, अनुमतियों के बाद का नंबर नामित लिंक संख्या है। अधिकांश नियमित फ़ाइलों में एक लिंक होगा। एक फ़ाइल के लिए एक नया हार्ड लिंक बनाने से दोनों फ़ाइल नाम एक ही इनोड में आ जाएंगे। ध्यान दें:
% ls -l test
ls: test: No such file or directory
% touch test
% ls -l test
-rw-r--r-- 1 danny staff 0 Oct 13 17:58 test
% ln test test2
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
% touch test3
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
-rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
^
^ this is the link count
अब, आप स्पष्ट रूप से देख सकते हैं कि कड़ी कड़ी जैसी कोई चीज नहीं है। कड़ी कड़ी एक नियमित नाम के समान है। उपरोक्त उदाहरण में, test
या test2
, मूल फ़ाइल कौन सी है और हार्ड लिंक कौन सी है? अंत तक, आप वास्तव में नहीं बता सकते हैं (टाइमस्टैम्प द्वारा भी) क्योंकि दोनों नाम एक ही सामग्री की ओर इशारा करते हैं, एक ही इनोड:
% ls -li test*
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
14445892 -rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
-i
ध्वज के लिए ls
आप पंक्ति के आरंभ में आईनोड संख्या को दर्शाता है। ध्यान दें कि कैसे test
और test2
एक ही इनोड संख्या है, लेकिन test3
एक अलग है।
अब, यदि आपको निर्देशिकाओं के लिए ऐसा करने की अनुमति दी गई थी, तो फाइलसिस्टम में अलग-अलग बिंदुओं में दो अलग-अलग निर्देशिकाएं एक ही बात को इंगित कर सकती हैं। वास्तव में, एक उप-व्यक्ति अपने दादा-दादी के लिए एक लूप का निर्माण कर सकता है।
इस लूप की चिंता क्यों है? क्योंकि जब आप ट्रैवर्स कर रहे होते हैं, तो आपको पता लगाने का कोई तरीका नहीं होता है कि आप लूप कर रहे हैं (बिना इनवॉइस के आप ट्रैक को ट्रैक कर सकते हैं)। कल्पना कीजिए कि आप du
कमांड लिख रहे हैं , जिसे डिस्क के उपयोग के बारे में पता लगाने के लिए उपखंड के माध्यम से पुनरावृत्ति करने की आवश्यकता है। du
जब यह एक लूप से टकराएगा तो कैसे पता चलेगा? यह त्रुटि प्रवणता है और बहुत सारे बहीखाते जो du
इस सरल कार्य को करने के लिए करना होगा।
साइमलिंक एक पूरी तरह से अलग जानवर हैं, इसमें वे एक विशेष प्रकार की "फाइल" हैं, जो कई फाइल फाइल सिस्टम एपीआई स्वचालित रूप से पालन करते हैं। ध्यान दें, एक सिम्लिंक एक बिना किसी गंतव्य के इंगित कर सकता है, क्योंकि वे नाम से इंगित करते हैं, और सीधे एनोड में नहीं। यह अवधारणा हार्ड लिंक के साथ कोई मतलब नहीं रखती है, क्योंकि "हार्ड लिंक" के अस्तित्व का मतलब है कि फ़ाइल मौजूद है।
तो क्यों du
आसानी से और कड़ी नहीं सहानुभूति के साथ सौदा कर सकते हैं ? हम ऊपर देख पा रहे थे कि हार्ड लिंक सामान्य निर्देशिका प्रविष्टियों से अप्रभेद्य हैं। हालांकि, साइमलिंक, विशेष, पता लगाने योग्य और स्किप करने योग्य हैं!
du
सिम्लिंक एक सिम्लिंक है, और इसे पूरी तरह से छोड़ देता है!
% ls -l
total 4
drwxr-xr-x 3 danny staff 102 Oct 13 18:14 test1/
lrwxr-xr-x 1 danny staff 5 Oct 13 18:13 test2@ -> test1
% du -ah
242M ./test1/bigfile
242M ./test1
4.0K ./test2
242M .
..
इशारा करना चाहिए ? विशेष रूप से इस निर्देशिका के लिए कड़ी को हटाने के बाद, जिस निर्देशिका में इंगित किया गया है..
? इसे कहीं इंगित करने की आवश्यकता है।