जब आप किसी हार्ड लिंक को हटाते हैं तो क्या होता है?


59

यदि आप ऐसा करते हैं rm myFileजहां myFileएक कड़ी है, तो क्या होता है?

जवाबों:


109

यूनिक्स में सभी सामान्य फाइलें हार्डलिंक हैं। यूनिक्स में हार्डलिंक्स (और सबसे अधिक (सभी?)) फाइलसिस्टम का संदर्भ है जिसे ए कहा जाता है inodeinodeएक संदर्भ काउंटर है, जब आप फाइल करने के लिए एक "लिंक" (जो सामान्य काम करने का ढंग है) काउंटर 1. है जब आप एक दूसरे, तीसरे, चौथे, आदि लिंक बनाने के लिए है, काउंटर वृद्धि की जाती है (वृद्धि हुई) प्रत्येक एक बार से। जब आप rmएक लिंक को हटाते हैं ( ) तो काउंटर को एक से घटाया (घटाया) जाता है। यदि लिंक काउंटर 0 पर पहुंच जाता है, तो फाइल सिस्टम इसे हटा देता है inodeऔर उपयोग के लिए उपलब्ध जगह को चिह्नित करता है।

संक्षेप में, जब तक आप अंतिम लिंक को नहीं हटाते हैं तब तक फ़ाइल बनी रहेगी।

Edit:अंतिम लिंक हटा दिए जाने पर भी फ़ाइल बनी रहेगी । यह उन तरीकों में से एक है जो किसी फ़ाइल में मौजूद डेटा की सुरक्षा को सुनिश्चित करने के लिए किसी अन्य प्रक्रिया के लिए सुलभ नहीं है। फाइलसिस्टम से डेटा को पूरी तरह से हटाने का कार्य केवल तभी किया जाता है जब डेटा में इसके लिंक के रूप में इसकी मेटाडेटा में दिए गए लिंक और किसी भी प्रक्रिया द्वारा उपयोग नहीं किया जा रहा हो।

यह IMHO हार्ड-लिंक (और सॉफ्टलिंक से इसका अंतर) को समझने का अब तक का सबसे आसान तरीका है।


7
इसके अलावा, फ़ाइल को हटाने के लिए सिस्टम कॉल है unlink()
मौविसील

1
यह उस स्थिति को कवर नहीं करता है जहां अंतिम लिंक unlinkएड होने पर फ़ाइल खुली होती है ।
cjm

5
@OrangeDog, बिल्कुल नहीं, क्योंकि हार्डलिंक फाइल सिस्टम को पार नहीं कर सकता है, और /procएक अलग (आभासी) फाइल सिस्टम है।
cjm

2
/ proc भी कर्नेल की आंतरिक डेटा संरचनाओं को दिखाता है (यह लिनक्स कर्नेल के लिए एक निश्चित तरीका है कि कुछ डेटा को सभी की और बिना कर्नेल मेमोरी में सीधे पहुंच के बिना कुछ निश्चित रूप से अच्छी तरह से परिभाषित प्रारूप में उजागर करें)। इसलिए यह कहना अधिक सटीक है कि कर्नेल इस तथ्य पर नज़र रखता है कि फ़ाइल खुली है, और उस जानकारी को procfs के माध्यम से उजागर करता है।
बजे एक CVn

1
और हाँ, unlink()एक फ़ाइल को हटाने के लिए कॉल करने से मुझे कोई अंत नहीं हुआ, जब मैंने 1990 के दशक की पहली छमाही में कुछ समय पहले MS-DOS पर C प्रोग्रामिंग के साथ खेलना शुरू किया था। :)
बजे एक CVn

12

परीक्षण मेरे विचार से आसान था: मैंने एक पाठ फ़ाइल बनाई, फिर इसे कड़ी मेहनत से जोड़ा। हार्ड लिंक को हटाने से उस फ़ाइल को डिलीट नहीं किया जाता है जिसे हार्डलिंक किया जाता है और जिस फाइल को लिंक किया गया था वह वहीं रहती है।


1
यह सच है, लेकिन पूरी तस्वीर नहीं
xenoterracide

3
कुंजी यह है कि पाठ फ़ाइल बनाने से एक कड़ी भी जुड़ जाती है। * NIX फाइलसिस्टम में, सभी फाइलों (इनोड्स) को कम से कम एक बार डायरेक्टरी स्ट्रक्चर में हार्डलिंक किया जाना चाहिए।
ऑरेंजडॉग

0

आपकी डिस्क की सभी फाइलें वास्तव में आपके ड्राइव के वास्तविक डेटा की ओर इशारा करती हैं। यहाँ छवि विवरण दर्ज करें

जब आप उस फ़ाइल के लिए एक हार्डलिंक बनाते हैं तो हार्डलिंक-एड फ़ाइल उसी डेटा की ओर इशारा करती है जो मूल फ़ाइल इंगित कर रही थी।

यहाँ छवि विवरण दर्ज करें

इस उदाहरण में, a.txt उस ड्राइव में मौजूद फ़ाइल के डेटा (बाइट्स) की ओर इशारा कर रहा था, जब हार्डलिंक b.txt बनाया जाता है तो यह इंगित करेगा कि a.txt किस ओर इशारा कर रहा है।

इस प्रकार उनमें से एक को हटाने से दूसरे को प्रभावित नहीं किया जाएगा वे एक दूसरे से अलग हो गए हैं।

लेकिन, जब आप दोनों को हटाते हैं, तो सिस्टम यह देखेगा कि डिस्क पर मौजूद डेटा की ओर कोई फ़ाइल नहीं है, इसलिए सिस्टम इसे एक रिक्त स्थान के रूप में मानेगा और जब चाहे तब इसे अधिलेखित कर देगा।


2
मुझे लगता है कि यह महत्वपूर्ण है कि आप स्पष्ट करें कि FILE "A.txt"यह समान है LINK "B.txt", विशेष रूप से जैसा कि आपने एक FILEऔर एक दूसरे को बुलाया है LINK। लिंक वास्तव में काला तीर है।
रोइमा

हां, मैंने सोचा था कि यह स्पष्ट नहीं होगा कि b.txt एक हार्ड लिंक की गई फ़ाइल है ...
ZOLDIK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.