एक फ़ाइल मेटा डेटा के साथ एक आईनोड है, जिसमें डेटा खोजने के लिए पॉइंटर्स की एक सूची है।
किसी फ़ाइल तक पहुंचने में सक्षम होने के लिए, आपको इसे एक निर्देशिका से जोड़ना होगा (निर्देशिकाओं को फोन निर्देशिकाओं के रूप में समझें, फ़ोल्डर्स नहीं), जो उस फ़ाइल के साथ एक नाम को जोड़ने के लिए एक से अधिक निर्देशिकाओं में से एक या एक से अधिक प्रविष्टियाँ जोड़ें ।
वे सभी लिंक, वे फ़ाइल नाम उसी फ़ाइल की ओर इशारा करते हैं। ऐसा नहीं है कि मूल और अन्य लिंक हैं। वे सभी डायरेक्टरी ट्री में एक ही फाइल (एक ही इनोड) के एक्सेस प्वाइंट हैं। जब आपको फ़ाइल का आकार ( 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
। अर्थात्, आप फ़ाइलों को नहीं हटाते हैं, आप उन्हें उन निर्देशिकाओं से अनलिंक करते हैं जिन्हें वे संदर्भित करते हैं। एक बार अंतिम निर्देशिका से हटाए जाने के बाद, जिसमें किसी फ़ाइल में प्रविष्टि होती है, तो वह फ़ाइल तब तक नष्ट हो जाती है (जब तक कोई प्रक्रिया नहीं होती है खुल गया)।
lstat
सिस्टम कॉल के लिए नहीं माना जाता है जो उनके आकार को प्राप्त करता है।