हाँ, और कोई :-)
यूनिक्स में, एक फ़ाइल की सामग्री को उस फ़ाइल के लिए निर्देशिका प्रविष्टियों से भिन्न हैं। आप एक ही सामग्री पर एकाधिक निर्देशिका प्रविष्टियों को इंगित कर सकते हैं (यह कैसे काम करता है इसके वर्णन के लिए inode देखें) और, यहां मुश्किल बिट है:
ये सभी निर्देशिका प्रविष्टियां बराबर हैं। भले ही कोई पहले बनाया गया हो, फिर भी इसके बारे में कुछ खास नहीं है। यदि आप इसे हटाते हैं, तो सामग्री गायब नहीं होती है, केवल निर्देशिका प्रविष्टि। एक बार इनोड की शून्य निर्देशिका प्रविष्टियों को इंगित करने के बाद सामग्री गायब हो जाएगी (और सभी प्रक्रियाएं फ़ाइल को बंद करती हैं - मुझे केवल डिस्क फ़ाइलों को हटाने के लिए डिस्क स्थान को हटाने की कोशिश करके पहले काटा गया है, क्योंकि एक प्रक्रिया में अभी भी फ़ाइल है खुला, फ़ाइल सामग्री को पुनर्प्राप्त नहीं किया गया है, भले ही कोई निर्देशिका प्रविष्टियां उन्हें इंगित न करें)।
यह कठिन लिंक के लिए है।
सॉफ्ट लिंक थोड़ा सा ट्रिकियर हैं। वे लक्ष्य फ़ाइल के पथ वाले एक "फ़ाइल" प्रकार (एक अलग इनोड) बनाते हैं। और वे लिंक बराबर नहीं हैं। मूल को हटाने से आपको कहीं भी एक नरम लिंक के साथ छोड़ दिया जाएगा।
क्योंकि किसी दिए गए फाइल सिस्टम पर इनोड अद्वितीय हैं, हार्ड लिंक किसी भिन्न फाइल सिस्टम पर डेटा का संदर्भ नहीं दे सकते हैं।
सॉफ्ट लिंक में उस सीमा नहीं है क्योंकि वे लक्ष्य फ़ाइल के पथ को स्टोर करते हैं, न कि इसके इनोड में।
निम्नलिखित प्रतिलेख मदद मिल सकती है:
$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
hello
$ cat f2
hello
$ cat f3
hello
$ rm f1
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
cat: f1: No such file or directory
$ cat f2
hello
$ cat f3
cat: f3: No such file or directory
मैं केवल पिछले चार आईनोड संख्या के अंकों का उपयोग किया है प्रविष्टि कम रखने के लिए (और 43910096366994672
तरह आईनोड संख्या के साथ हिट नहीं), लेकिन आप देख सकते हैं कि f1
और f2
में सटीक वही इनोड है जबकि f3
अलग है।आप यह भी देख सकते हैं कि मूल रूप से बनाई गई फ़ाइल की सामग्री f1
इसके विलोपन से बचती है क्योंकि f2
अभी भी इसका संदर्भ दे रहा है।
हालांकि, क्योंकि f3
f1
नाम को इसके इनोड के बजाए संदर्भित कर रहा है, तो आपको इसका उपयोग करने का प्रयास करने में त्रुटि मिलती है।
एक तरफ: तुम होगा इसे प्यार किया है जब यूनिक्स इस तरह आप के साथ खिलौने: एक फ़ाइल बुलाया अंतरिक्षबैकस्पेसएक्स और फिर बनाने के रूप में
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
लगभग के रूप में ज्यादा मज़ा किसी को इसे हटाने का प्रयास करें :-)
'आरएम \'? मैं नहीं देखता कि बैकस्पेस (^?) इसे और अधिक जटिल बना देगा :) –
Unode