निर्देशिका हार्डलिंक कई तरीकों से फाइल सिस्टम को तोड़ती है
वे आपको लूप बनाने की अनुमति देते हैं
एक निर्देशिका का एक कठिन लिंक खुद के माता-पिता से जुड़ सकता है, जो एक फाइल सिस्टम लूप बनाता है। उदाहरण के लिए, ये कमांड पीछे लिंक के साथ एक लूप बना सकते हैं l
:
mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l
डायरेक्टरी लूप वाली फाइलसिस्टम में अनंत गहराई है:
cd /tmp/a/b/l/b/l/b/l/b/l/b
इस तरह की निर्देशिका संरचना का पता लगाते समय एक अनंत लूप से बचना कुछ मुश्किल होता है (हालांकि उदाहरण के लिए POSIX को इससे find
बचने की आवश्यकता होती है)।
इस तरह के हार्ड लिंक के साथ एक फ़ाइल सिस्टम अब एक पेड़ नहीं है, क्योंकि एक पेड़ को परिभाषा से, लूप नहीं होना चाहिए।
वे मूल निर्देशिका की असंदिग्धता को तोड़ते हैं
एक फाइल सिस्टम लूप के साथ, कई मूल निर्देशिका मौजूद हैं:
cd /tmp/a/b
cd /tmp/a/b/l/b
पहले मामले में, /tmp/a
की मूल निर्देशिका है /tmp/a/b
।
दूसरे मामले में, /tmp/a/b/l
की मूल निर्देशिका है /tmp/a/b/l/b
, जो के रूप में ही है /tmp/a/b
।
तो यह दो मूल निर्देशिका है।
वे फ़ाइलें गुणा करते हैं
फ़ाइलों की पहचान पथों द्वारा की जाती है, सिमलिंक को हल करने के बाद। इसलिए
/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt
अलग-अलग फाइलें हैं।
फ़ाइल के आगे के कई पथ हैं। वे निश्चित रूप से अपने इनोड संख्या के संदर्भ में समान हैं। लेकिन अगर आप स्पष्ट रूप से छोरों की उम्मीद नहीं करते हैं, तो उसके लिए जांच करने का कोई कारण नहीं है।
एक निर्देशिका हार्डलिंक भी एक बच्चे निर्देशिका, या एक निर्देशिका है कि न तो बच्चा है और न ही किसी भी गहराई के माता पिता को इंगित कर सकते हैं। इस स्थिति में, एक फ़ाइल जो लिंक का एक बच्चा है उसे दो फ़ाइलों को दोहराया जाएगा, जिन्हें दो रास्तों से पहचाना जाएगा।
आपका उदाहरण
$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar
निर्देशिका के लिए नरम लिंक कैसे काम कर सकते हैं?
एक पथ जिसमें सॉफ्टलिंक्स और यहां तक कि सॉफ्ट लिंक्ड डायरेक्टरी लूप भी हो सकते हैं, अक्सर इसका उपयोग केवल फ़ाइल को पहचानने और खोलने के लिए किया जाता है। यह एक सामान्य, रैखिक पथ के रूप में उपयोग किया जा सकता है।
लेकिन अन्य परिस्थितियां हैं, जब फ़ाइलों की तुलना करने के लिए पथ का उपयोग किया जाता है। इस मामले में, पथ में प्रतीकात्मक लिंक को पहले हल किया जा सकता है, इसे न्यूनतम में परिवर्तित किया जा सकता है , और आमतौर पर एक कैनन पथ बनाने पर प्रतिनिधित्व पर सहमति व्यक्त की जाती है :
यह संभव है, क्योंकि नरम लिंक सभी को लिंक के बिना पथों तक विस्तारित किया जा सकता है। एक मार्ग में सभी नरम लिंक के साथ ऐसा करने के बाद, शेष पथ एक पेड़ का हिस्सा है, जहां एक मार्ग हमेशा असंदिग्ध होता है।
कमांड readlink
इसके विहित पथ के लिए एक मार्ग को हल कर सकती है:
$ readlink -f /some/symlinked/path
सॉफ्ट लिंक, फाइलसिस्टम के उपयोग से भिन्न होते हैं
एक सॉफ्ट लिंक सभी समस्या का कारण नहीं बन सकता क्योंकि यह फाइलसिस्टम के अंदर के लिंक से अलग है। इसे कठिन लिंक से अलग किया जा सकता है, और यदि आवश्यक हो तो सहानुभूति के बिना एक पथ पर हल किया जा सकता है।
कुछ अर्थों में, सिम्लिंक को जोड़ने से मूल फ़ाइल सिस्टम संरचना में परिवर्तन नहीं होता है - यह इसे रखता है, लेकिन एप्लिकेशन परत की तरह अधिक संरचना जोड़ता है।
से man readlink
:
NAME
readlink - print resolved symbolic links or canonical
file names
SYNOPSIS
readlink [OPTION]... FILE...
DESCRIPTION
Print value of a symbolic link or canonical file name
-f, --canonicalize
canonicalize by following every symlink in
every component of the given name recursively;
all but the last component must exist
[ ... ]