अन्य सभी उत्तरों के अलावा मैं निम्नलिखित महत्वपूर्ण गुणों को इंगित करना चाहता हूं:
सॉफ्टलिंक एक सही संदर्भ है, अर्थात यह एक छोटी फ़ाइल है जिसमें एक पाथनाम होता है। सॉफ्टलिंक को हल करने से एप्लिकेशन को पारदर्शी रूप से घटित होता है: यदि कोई प्रक्रिया किसी फ़ाइल को खोलती है, तो यह कहें कि /this/path/here
सिमिलिंक है जो /that/other/path
तब खोलने /that/other/path
का पूरा प्रबंध ओएस द्वारा किया जाता है। इसके अलावा, यदि /that/other/path
स्वयं एक सिम्लिंक होता है, तो यह भी ओएस द्वारा निपटा जा रहा है। वास्तव में, OS कुछ और (जैसे एक नियमित फ़ाइल) या जब तक यह कई प्रविष्टियों तक नहीं पहुँचता SYMLOOP_MAX
(देखें sysconf(3)
) तक सिम्लिंक की श्रृंखला का अनुसरण करता है , जिस स्थिति में OS (अधिक सटीक: सिस्टम कॉल के अनुसार) एक त्रुटि देता है और सेट करता है errno
को ELOOP
। इस प्रकार, एक गोलाकार संदर्भ xyz -> xyz
प्रक्रिया को रोक नहीं पाएगा। (लिनक्स सिस्टम के path_resolution(7)
लिए पूर्ण विवरण देखें।)
ध्यान दें कि एक प्रक्रिया यह जांच सकती है कि एक पथनाम एक सिम्लिंक है या नहीं के उपयोग के माध्यम से lstat(2)
और अपनी फ़ाइल विशेषताओं (इनोड तालिका में संग्रहीत) को संशोधित कर सकता है lchown(2)
और अन्य ( symlink(7)
पूरी कहानी के लिए देखें )।
अब, अनुमति के संदर्भ में आप देखेंगे कि सहानुभूति हमेशा 777 ( rwxrwxrwx
प्रतीकात्मक संकेतन में) की अनुमति है। यह इस तथ्य के कारण है कि किसी भी अन्य अनुमतियों को वास्तविक फ़ाइल तक पहुंचने से वैसे भी बाईपास किया जा सकता है। इसके विपरीत, एक सहानुभूति के लिए 777 सिमिलिंक फ़ाइल को सुलभ नहीं बनाता है यदि यह पहली जगह में सुलभ नहीं है। उदाहरण के लिए, अनुमतियाँ 777 के साथ एक सिमलिंक, अनुमतियों के साथ एक फ़ाइल की ओर इशारा करते हुए 640 "फ़ाइल अन्य" (आम जनता) के लिए सुलभ नहीं है। दूसरे शब्दों में, एक फ़ाइल xyz
सिम्लिंक के माध्यम से सुलभ है यदि और केवल अगर यह सीधे पहुंच योग्य है, अर्थात बिना अप्रत्यक्ष। इस प्रकार, सीलिंक की अनुमतियों का कोई सुरक्षा प्रभाव नहीं है।
हार्डलिंक्स और सिमलिंक (उर्फ सॉफ्टलिंक) के बीच मुख्य रूप से दिखाई देने वाला अंतर यह है कि सिमिलिंक फाइलसिस्टम में काम करते हैं जबकि हार्डलिंक एक फाइलसिस्टम तक ही सीमित है। यानी, विभाजन A पर एक फ़ाइल को विभाजन B से सिम्लिंक किया जा सकता है, लेकिन इसे वहां से हार्डलिंक नहीं किया जा सकता है। यह इस तथ्य से स्पष्ट है कि हार्डलिंक वास्तव में एक निर्देशिका में एक प्रविष्टि है, जिसमें एक फ़ाइल नाम और एक इनोड संख्या होती है, और यह इनोड संख्या केवल फ़ाइल सिस्टम के अनुसार अद्वितीय होती है।
हार्डलिंक शब्द वास्तव में कुछ भ्रामक है। जबकि सिम्बलिंक स्रोत और गंतव्य स्पष्ट रूप से अलग-अलग हैं (इनकोड तालिका में सिमलिंक की अपनी प्रविष्टि है), यह हार्डलिंक के लिए सही नहीं है। यदि आप किसी फ़ाइल के लिए हार्डलिंक बनाते हैं, तो मूल प्रविष्टि और हार्डलिंक पहले क्या था, इसके संदर्भ में अप्रभेद्य हैं। (चूंकि वे एक ही इनोड को संदर्भित करते हैं, वे अपनी फ़ाइल विशेषताओं जैसे कि स्वामी, अनुमतियाँ, टाइमस्टैम्प आदि को साझा करते हैं) यह इस कथन की ओर जाता है कि प्रत्येक निर्देशिका प्रविष्टि वास्तव में एक हार्डलिंक है, और एक फ़ाइल को हार्डलिंक करने का अर्थ केवल एक दूसरा बनाना है ( या तीसरा, या चौथा ...) हार्डलिंक। वास्तव में, प्रत्येक इनोड हार्डकोड की संख्या के लिए एक काउंटर को स्टोर करता है।
अंत में, ध्यान दें कि सामान्य उपयोगकर्ता निर्देशिकाओं को हार्डलिंक नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि यह अत्यंत सावधानी के साथ किया जाना चाहिए: एक अनियंत्रित उपयोगकर्ता अन्यथा कड़ाई से पदानुक्रमित फ़ाइल ट्री में चक्र का परिचय दे सकता है, जो सभी सामान्य उपकरण (जैसे fsck
) और ओएस खुद से निपटने के लिए तैयार नहीं हैं।