मुझे पता है कि कड़ी क्या हैं, लेकिन मैं उनका उपयोग क्यों करूंगा? एक कड़ी की उपयोगिता क्या है?
मुझे पता है कि कड़ी क्या हैं, लेकिन मैं उनका उपयोग क्यों करूंगा? एक कड़ी की उपयोगिता क्या है?
जवाबों:
हार्ड लिंक का मुख्य लाभ यह है कि, सॉफ्ट लिंक की तुलना में, कोई आकार या गति दंड नहीं है। नरम लिंक सामान्य फ़ाइल एक्सेस के शीर्ष पर अप्रत्यक्ष की एक अतिरिक्त परत है; जब आप फ़ाइल को खोलते हैं तो कर्नेल को लिंक को रोकना पड़ता है, और इसमें बहुत कम समय लगता है। लिंक के पाठ को रखने के लिए लिंक डिस्क पर बहुत कम जगह लेता है। ये दंड कठोर लिंक के साथ मौजूद नहीं हैं क्योंकि वे फाइल सिस्टम की बहुत संरचना में निर्मित हैं।
मुझे यह देखने का सबसे अच्छा तरीका है:
$ ls -id .
1069765 ./
$ mkdir tmp ; cd tmp
$ ls -id ..
1069765 ../
इसे बनाने का -i
विकल्प ls
आपको फाइल का इनकोड नंबर देता है। सिस्टम पर जहां मैंने ऊपर उदाहरण तैयार किया है, मैं एक निर्देशिका में इनोड नंबर 1069765 के साथ हुआ, लेकिन विशिष्ट मूल्य कोई फर्क नहीं पड़ता। यह केवल एक विशिष्ट मूल्य है जो किसी विशेष फ़ाइल / निर्देशिका की पहचान करता है।
यह क्या कहता है कि जब हम एक उपनिर्देशिका में जाते हैं और एक अलग फाइलसिस्टम प्रविष्टि को बुलाते हैं ..
, तो उसमें वही इनोड नंबर होता है जो हमें पहले मिला था। यह इसलिए नहीं हो रहा है क्योंकि शेल ..
आपके लिए व्याख्या कर रहा है, जैसा कि एमएस-डॉस और विंडोज के साथ होता है। यूनिक्स फाइलसिस्टम ..
पर एक वास्तविक निर्देशिका प्रविष्टि है; यह पिछली निर्देशिका की ओर इशारा करते हुए एक कड़ी है।
हार्ड लिंक वे टेंडन हैं जो फाइलसिस्टम की डायरेक्टरी को एक साथ जोड़ते हैं। एक बार, यूनिक्स के पास हार्ड लिंक नहीं थे। उन्हें यूनिक्स की मूल फ्लैट फाइल प्रणाली को पदानुक्रमित फाइल सिस्टम में बदलने के लिए जोड़ा गया था ।
(इस पर अधिक जानकारी के लिए, देखें कि '/' में '..' प्रविष्टि क्यों है? )
यह एक ही निष्पादन योग्य द्वारा कई अलग-अलग कमांडों को लागू करने के लिए यूनिक्स प्रणालियों पर कुछ हद तक सामान्य है। यह लिनक्स पर किसी भी मामले में प्रतीत नहीं होता है, लेकिन उन प्रणालियों पर जो मैंने अतीत में इस्तेमाल किया था cp
, mv
और rm
सभी एक ही निष्पादन योग्य थे। यदि आप इसके बारे में सोचते हैं तो यह समझ में आता है: जब आप वॉल्यूम के बीच किसी फ़ाइल को स्थानांतरित करते हैं, तो यह प्रभावी रूप से एक कॉपी है जिसके बाद इसे हटा दिया जाता है, इसलिए mv
पहले से ही अन्य दो कमांड के कार्यों को लागू करना होगा। निष्पादन योग्य यह पता लगाने के लिए कि किस ऑपरेशन को प्रदान करना है क्योंकि यह उस नाम से पारित हो जाता है जिसे यह कहा जाता था।
एक और उदाहरण, एम्बेडेड लिनक्स में सामान्य, बिजीबॉक्स है , एक एकल निष्पादन योग्य है जो दर्जनों आदेशों को लागू करता है ।
मुझे ध्यान देना चाहिए कि अधिकांश फाइल सिस्टम पर, उपयोगकर्ताओं को निर्देशिकाओं के लिए हार्ड लिंक बनाने की अनुमति नहीं है। .
और ..
प्रविष्टियों को स्वचालित रूप से फाइल सिस्टम कोड है, जो आम तौर पर गिरी का हिस्सा है द्वारा प्रबंधित कर रहे हैं। प्रतिबंध मौजूद है क्योंकि यदि आप कैसे बनाते हैं और निर्देशिका हार्ड लिंक का उपयोग करते हैं, तो सावधानी बरतने के लिए गंभीर फाइलसिस्टम समस्याओं का कारण संभव है। यह कई कारणों में से एक है नरम लिंक मौजूद हैं; वे समान जोखिम नहीं उठाते।
हार्डलिंक का एक उपयोग जो अत्यंत उपयोगी है, rsync के साथ संयुक्त वृद्धिशील बैकअप में है। यह बहुत सारे स्थान बचाता है और बहाली प्रक्रिया को वास्तव में आसान बनाता है। मैं अपने सर्वर में बैकअप के लिए उस दृष्टिकोण का उपयोग करता हूं।
इस स्पष्टीकरण को पढ़ने के लिए कुछ समय लें ।
यदि उस विकिपीडिया पृष्ठ को पढ़ने के बाद आपका प्रश्न "मैं कभी उनका उपयोग क्यों करूंगा" तो आप समझ नहीं पाते हैं कि क्या कड़ी हैं।
एक लिंक एक निर्देशिका प्रविष्टि है जो डिस्क पर ब्लॉक करने के लिए इंगित करता है। दूसरे शब्दों में आपके सिस्टम की हर फाइल में कम से कम एक लिंक होता है। जब आप rm
किसी फ़ाइल को वास्तविक सिस्टम कॉल करते हैं unlink()
। यह निर्देशिका प्रविष्टि को निकालता है। डिस्क पर ब्लॉक नहीं बदले हैं, लेकिन लिंक चला गया है, इस प्रकार फ़ाइल निर्देशिका लिस्टिंग से चली गई है।
आप व्यक्तिगत रूप से कभी हार्ड लिंक का उपयोग नहीं कर सकते हैं, लेकिन वे आपके सिस्टम पर हैं। उदाहरण के लिए:
$ ls -li /bin | grep 53119771
53119771 -rwxr-xr-x 3 root root 26292 2010-08-18 10:15 bunzip2
53119771 -rwxr-xr-x 3 root root 26292 2010-08-18 10:15 bzcat
53119771 -rwxr-xr-x 3 root root 26292 2010-08-18 10:15 bzip2
आप देख सकते हैं bunzip2
, bzcat
और bzip
सभी एक ही इनोड का उपयोग करते हैं। संक्षेप में, यह तीन नामों वाली एक फाइल है। आपके पास फ़ाइल की तीन प्रतियां हो सकती हैं, लेकिन क्यों? यह केवल डिस्क स्थान का अनावश्यक रूप से उपयोग करेगा।
/bin
, मुझे लगता है कि यह भ्रम के स्रोतों में से एक है। कभी-कभी निष्पादन योग्य लोगों को सहानुभूति क्यों दी जाती है और कभी-कभी हार्डलिंक?
जितने भी उपयोग हैं। मैं फ़ाइल-आधारित ताले बनाने के लिए उनका उपयोग करता हूं। अधिकांश अन्य सिस्टम कॉल के विपरीत लिंक (2) सिस्टम कॉल परमाणु है।
एक और उपयोग rsnapshot के भीतर होता है, जहां डिस्क स्थान की मात्रा को कम करने के लिए हार्ड-लिंक का उपयोग करके समय के साथ बैकअप लिया जाता है। यदि कोई फ़ाइल नहीं बदली गई है, तो फ़ाइल फ़ाइल के पुराने उदाहरणों से हार्ड-लिंक की गई है, जो फाइलें बदली गई हैं वे नए सिरे से कॉपी की गई हैं।
मैं उनका उपयोग सर्वर पर कॉन्फिग फाइलों को स्वैप करने के लिए भी करता हूं: rm file.cfg && ln ~/tmp/file.cfg file.cfg
फिर ~ / tmp / * फाइलें सुरक्षित रूप से डिलीट की जा सकती हैं।
ln
और rm
बदले में सिर्फ एक mv
?
पहले से मौजूद कई अच्छी चर्चाओं को जोड़ने के लिए ...
(inode, name)
जोड़े का मतलब hardlinks (करने के लिए फाइल सिस्टम में पर कोई अतिरिक्त कीमत नहीं है कि अच्छी तरह से है, जब तक हम से निर्देशिका के लिए hardlinke अनुमति न देने (अन्य द्वारा चक्र को रोकने के रूप में .
और ..
(यह किसी और को लिस्प की तरह लग रहा है?))इसलिए हम उन्हें मुफ्त में देते हैं।
मुझे शायद कड़ी के परिदृश्य को कवर करना चाहिए । एक हार्ड लिंक एक अलग नाम और / या एक अलग स्थान के साथ एक ही फ़ाइल होगी जब तक मूल लिंक की गई फ़ाइल मौजूद है । फ़ाइल को "मूल" के रूप में सोचना भी सही नहीं है: दोनों अपने आप में निर्देशिका प्रविष्टियाँ हैं, और दोनों (या अधिक) सभी समान समकक्ष हैं। लंबे समय तक रहने वाली फ़ाइलों के लिए, यह एक आशीर्वाद हो सकता है, लेकिन अगर जोड़ी में से एक को हटा दिया जाता है और फिर बनाया जाता है, तो एक ही नाम और सामग्री के साथ भी, फाइलें अलग हो जाएंगी।
मान लीजिए आपने एक हार्डलिंक /foo/myfile
लिंकिंग से बनाया है /repo/myfile
। दोनों एक ही फ़ाइल डेटा के संकेत हैं; एक को बदलो, दूसरे को बदलो। लेकिन मान लीजिए कि /repo
एक गिट रिपॉजिटरी रखने के लिए होता है। यदि आप ऐसी शाखा की जांच करते हैं myfile
, जिसमें वह नहीं है , तो उसे /repo/myfile
हटा दिया जाता है। इस समय, की /foo/myfile
एक सरल प्रतिलिपि बन जाती है /repo/myfile
, क्योंकि यह उस समय था जब जोड़ी के दूसरे हिस्से को अनलिंक किया गया था। यह भी आसान नहीं है जब आप उन शाखाओं के बीच फ्लिप करते हैं जो प्रदर्शनों की सूची को बदल देती हैं, लेकिन, जब आप मूल शाखा की जांच करते हैं, तो एक नई फ़ाइल/repo/myfile
Git द्वारा बनाया गया है। यदि आपने ध्यान नहीं दिया, तो आपको आश्चर्य होगा कि अब दोनों फाइलों में अलग-अलग सामग्री क्यों है, हालांकि यह करना आसान है, क्योंकि फाइलों के बीच की कड़ी लिंक का उनके नामों के बारे में कोई पता नहीं है। एक नरम लिंक, इसके विपरीत, इस नष्ट-चक्र के माध्यम से बच जाएगा।
दूसरी ओर, हार्ड लिंक का उपयोग करने वाला सॉफ्टवेयर इस बारे में पूरी तरह से जागरूक है, और Git इसका प्रमुख उदाहरण है। Git क्लोनिंग रिपॉजिटरी को उसी फाइल सिस्टम पर लगभग मुफ्त में क्लोन करता है, क्योंकि यह फाइलों को कॉपी करने के बजाय डिफ़ॉल्ट रूप से हार्ड लिंक का उपयोग करता है। Git के लिए हार्ड लिंक एक सही उपयोग का मामला है, क्योंकि इसकी ऑब्जेक्ट और पैक फाइल्स कभी नहीं बदलती हैं, इसलिए रिपॉजिटरी का एक क्लोन दूसरे को कभी भी संशोधित नहीं करेगा (Git हार्ड-लिंक मोडिफाइबल फाइल्स को नहीं जानता है), और कोई भी क्लोन हो सकता है बिना किसी एहतियात के नष्ट कर दिया गया: किसी को ट्रैक करने की आवश्यकता नहीं है कि कौन सा "मूल" है और वास्तव में फाइलें हैं: किसी भी हार्ड लिंक का एक समान भागीदार है और पूरी फाइल को "समाहित" करता है। सॉफ्ट लिंक सिर्फ यहाँ काम नहीं करेगा।
हार्ड लिंक का एक अन्य लाभ यह है कि किसी भी लिंक को फ़ाइल सामग्री तक पहुंच के बिना स्थानांतरित किया जा सकता है। मुलायम लिंक के साथ, मूल फ़ाइल को स्थानांतरित करने से यह लटकने वाले सभी नरम लिंक को प्रस्तुत करता है।
लब्बोलुआब यह है कि कई उपयोग मामलों में या तो लिंक प्रकार समान रूप से अच्छी तरह से काम करता है, लेकिन कुछ एक या दूसरे प्रकार में लाभप्रद है। दक्षता, यहाँ कई उत्तरों में उल्लिखित है, शायद आधुनिक मशीनों और फाइल सिस्टम के साथ बहुत कम चिंता का विषय है, जब तक कि आप एक दंडित एम्बेडेड नियंत्रक के फ्लैश चिप पर एक फाइल सिस्टम को मैला नहीं कर रहे हैं। कार्यात्मक अंतर अधिक महत्वपूर्ण हैं, और आमतौर पर इंजीनियरिंग की कमी और अंतिम विकल्प हुक्म:
इसके अलावा, मुझे कहना होगा कि लाइब्रेरी कॉल जो एक फ़ाइल को हटा देती है, उसे unlink()
एक कारण के लिए कहा जाता है ! हर निर्देशिका प्रविष्टि सिर्फ एक शुरुआत में अपनी कड़ी कड़ी कड़ी है।