हार्ड लिंक मूल के समान स्थान क्यों लेते हैं?


14

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

इसलिए, मैंने परीक्षण किया है कि मैंने कुछ फ़ाइल ("saluton_mondo.cpp" के साथ क्या सीखा है), एक कठिन और एक नरम लिंक और एक प्रतिलिपि बनाई।

jmcf125@VMUbuntu:~$ ls -lh soft hard copy s*.cpp
-rw-rw-r-- 1 jmcf125 jmcf125 205 Aŭg 27 16:10 copy
-rw-rw-r-- 2 jmcf125 jmcf125 205 Aŭg 25 13:34 hard
-rw-rw-r-- 2 jmcf125 jmcf125 205 Aŭg 25 13:34 saluton_mondo.cpp
lrwxrwxrwx 1 jmcf125 jmcf125  17 Aŭg 27 16:09 soft -> saluton_mondo.cpp

मुझे अजीब लगा कि हार्ड लिंक का मूल और, तार्किक रूप से, कॉपी के समान आकार है। यदि हार्ड लिंक और ओरिजिनल समान इनोड को साझा करते हैं, जिसमें डेटा है, और केवल फ़ाइल नाम से अलग है, तो क्या हार्ड लिंक को 205 बाइट्स के बजाय केवल अपने नाम का स्थान नहीं लेना चाहिए? या यह कि मूल फ़ाइल का आकार जो ls -lhरिटर्न करता है? लेकिन फिर मुझे कैसे पता चलेगा कि फ़ाइल नाम क्या जगह लेता है? यहाँ यह कहता है कि हार्ड लिंक का कोई आकार नहीं है। क्या उनका फ़ाइल नाम मूल फ़ाइल नाम के साथ रखा गया है? हार्ड लिंक का फ़ाइल नाम कहाँ संग्रहीत किया जाता है?

जवाबों:


17

एक फ़ाइल मेटा डेटा के साथ एक आईनोड है, जिसमें डेटा खोजने के लिए पॉइंटर्स की एक सूची है।

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

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

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

$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a

फ़ाइल संख्या 10486707 के ऊपर एक नियमित फ़ाइल है। वर्तमान निर्देशिका में दो प्रविष्टियाँ (एक नाम के साथ a, एक नाम के साथ b) इसके लिए लिंक। क्योंकि लिंक की संख्या 2 है, हम जानते हैं कि वर्तमान निर्देशिका या किसी अन्य निर्देशिका में उस फ़ाइल का कोई अन्य नाम नहीं है। फ़ाइल संख्या 10502404 एक और फ़ाइल है, इस प्रकार का सिम्कलिन वर्तमान निर्देशिका से दो बार जुड़ा हुआ है। इसकी सामग्री (लक्ष्य) सापेक्ष पथ "ए" है।

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

$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a

2:
total 92
10608674 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar

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

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


आह ... अब मैं देख रहा हूं। तो एक फाइल जिसे "hi" कहा जाता है और उसकी सटीक प्रति जिसे "ajhdmjdmjefsjmksgskgjkm exactlyna" कहा जाता है, अंतरिक्ष के बिल्कुल समान हैं; क्योंकि उनका नाम उस lstatसिस्टम कॉल के लिए नहीं माना जाता है जो उनके आकार को प्राप्त करता है।
JMCF125

@ JMCF125, हां उनके नाम से लिया गया आकार संबंधित निर्देशिकाओं में प्रविष्टि है, यह निर्देशिकाओं के फ़ाइल आकार में दर्ज है।
स्टीफन चेज़लस

धन्यवाद। क्या आप अपने उत्तर में इसे शामिल कर सकते हैं? रुको, मैं पहले अपना प्रश्न स्पष्ट करूँगा।
JMCF125

5

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

जहां तक ​​फाइलसिस्टम का सवाल है, हार्ड लिंक और ओरिजिनल एक ही चीज हैं, वे एक ही इनोड की ओर इशारा करते हैं इसलिए समान साइज की सूचना दी जाती है।


लेकिन हार्ड लिंक के नाम में जगह लेनी चाहिए, सही?
JMCF125

नीचे देखें @ चरणन का जवाब, वह इसे बेहतर बताते हैं।
terdon

2
@ JMCF125 हां, लेकिन वह स्थान निर्देशिका के अंदर है। यदि आप पर्याप्त फ़ाइलें बनाते हैं, तो आप देखेंगे कि निर्देशिका आकार बढ़ जाता है। किसी फ़ाइल का आकार उसके मेटाडेटा जैसे कि उसका नाम शामिल नहीं करता है।
गिलेस एसओ- बुराई को रोकना '

@Gilles, धन्यवाद, लेकिन @Stephane ने पहले ही उस जानकारी के साथ अपना जवाब अपडेट कर दिया है। इसके अलावा, अब मैं इसे बेहतर समझता हूं, इसका नाम /अपने आप में संग्रहित होना चाहिए, जैसे कि आप cd ..में /रहते हैं /
JMCF125
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.