आप एक दूसरे का उपयोग कब करेंगे?
आप एक दूसरे का उपयोग कब करेंगे?
जवाबों:
हार्ड और सॉफ्ट लिंक के बीच अलग-अलग शब्दार्थ उन्हें अलग-अलग चीजों के लिए उपयुक्त बनाते हैं।
कड़ी:
प्रतीकात्मक लिंक (सॉफ्ट लिंक)
ls -l
दिखाएगा कि सिम्क्लिन पॉइंट किस पथ पर है)unlink(2)
। "सामान्य" फाइलें (1 की लिंक गणना के साथ) सिर्फ एक विशेष मामला है। यदि यह मदद करता है, तो आप इनोड्स को ऑब्जेक्ट के रूप में सोच सकते हैं, और रिफ-काउंटेड पॉइंटर्स के रूप में नाम (इनोड की लिंक गणना संदर्भ-गणना है)।
..
और .
।
दोनों प्रकार के लिंक का बिंदु एक ही समय में दो स्थानों पर एक फ़ाइल बनाने का एक तरीका प्रदान करना है। इसके बहुत सारे उपयोग हैं। 10 में से 9 बार आप प्रतीकात्मक लिंक का उपयोग करना चाहते हैं।
प्रतीकात्मक लिंक, या "सिमिलिंक" विंडोज शॉर्टकट की तरह काम करते हैं। सिम्लिंक की सामग्री फ़ाइल / निर्देशिका के वास्तविक स्थान के लिए एक संकेतक है। यदि आप वास्तविक फ़ाइल को हटाते हैं, तो सिमलिंक "लटक" जाएगा, और काम नहीं करेगा। सिमिंक को हटाने से असली फाइल डिलीट नहीं होती है। आप किसी एकल फ़ाइल (या यहां तक कि अन्य सिम्लिंक) के जितने चाहें, उतने सिम्लिंक कर सकते हैं।
हालांकि विंडोज के विपरीत, वे फाइल सिस्टम स्तर पर काम करते हैं, शेल या एप्लिकेशन के स्तर पर नहीं, इसलिए बहुत अधिक कोई भी एप्लिकेशन अपेक्षा के अनुरूप सिम्लिंक को "फॉलो" करेगा। ls -al
एक त्वरित तरीके के रूप में इस्तेमाल किया जा सकता है यह देखने के लिए कि सहानुभूति "बिंदु" कहां है।
हार्डलिंक निचले स्तर पर भी काम करते हैं। एक हार्डलिंक फ़ाइल की वास्तविक-ऑन-द-फाइल-सिस्टम-स्तरीय निर्देशिका प्रविष्टि है। तकनीकी रूप से, एक निर्देशिका प्रविष्टि एक हार्डलिंक है, इस प्रकार प्रत्येक फ़ाइल में कहीं निर्देशिका में कम से कम एक हार्डलिंक है। हार्डलिंक वे जिस फ़ाइल को इंगित करते हैं, उससे अलग नहीं हैं; यदि किसी फ़ाइल में अलग-अलग निर्देशिकाओं में कई हार्डलिंक हैं, तो हार्डलिंक को उपयोगिताओं के साथ हटाना जैसे rm
कि वास्तव में फ़ाइल को हटा नहीं देगा, जब तक कि सभी हार्डलिंक नहीं चले जाते।
मैं ऐसी स्थिति के बारे में नहीं सोच सकता जहाँ हार्डलिंक्स का उपयोग आम है, या यहाँ तक कि जरूरत है, जब तक कि आप जानबूझकर फ़ाइलों को नष्ट होने से रोकना नहीं चाहते हैं या विभाजन या अन्य फाइल सिस्टम संबंधी चीजों के साथ कुछ अजीब निम्न स्तर के काम कर रहे हैं। संपादित करें: इस सवाल के अन्य उत्तर में महान विचार हैं, हालांकि!
ls -l
यह देखने के लिए पर्याप्त है कि सिमिलिंक द्वारा क्या जोड़ा जा रहा है, इसके लिए a
खड़ा है --all
, मैनपेज देखें। और यहां तक कि अगर सहानुभूति फ़ाइल सिस्टम पर काम करती है, तो भी अनुसरण के बजाय फ़ाइलों के रूप में प्रतीकात्मक लिंक का उपयोग करने के लिए वैकल्पिक कार्य हैं।
ln -s /home 1; ls -l 1
दिखाता है कि सिमलिंक 1 5 बाइट्स लंबा है, जबकि ln -s /usr/share/ 2; ls -l 2
शोआस कि 2 बाइट 11 है।
डिस्क-आधारित बैकअप तंत्र के लिए हार्ड लिंक बहुत उपयोगी होते हैं, क्योंकि आपके पास फ़ाइलों के लिए स्थान साझा करते समय प्रत्येक बैकअप के लिए एक पूर्ण निर्देशिका ट्री हो सकता है - और फाइल सिस्टम संदर्भ गिनती का ट्रैक रखता है, इसलिए अंतिम संदर्भ के लिए एक दिया गया संस्करण चला जाता है क्योंकि बैकअप की समय सीमा समाप्त हो गई थी / अंतरिक्ष कारणों से हटा दिया गया था, जिस स्थान का उपयोग किया गया था वह स्वचालित रूप से पुनः प्राप्त हो गया है। कुछ मेल क्लाइंट एक ही कारण के लिए, कई फ़ोल्डरों को भेजे गए संदेशों के लिए भी इसका उपयोग करते हैं।
हार्ड लिंक सिर्फ एक ही डिस्क स्थान के संदर्भ हैं, 'आप' क्यों अन्य फाइलसिस्टम में कुछ हार्डलिंक नहीं कर सकते हैं।
Symlinks अन्य फाइलें (जैसे विंडोज शॉर्टकट) को लिंक करने वाली फाइलें हैं, शायद एक ही फाइल सिस्टम में, शायद नहीं।
संपादित करें: मैं कुछ और समझाऊंगा। मौजूद प्रत्येक फ़ाइल में न्यूनतम 1 कड़ी है। हार्ड लिंक फाइलसिस्टम के एक इनोइड की सामग्री को एक्सेस करने का तरीका है। आप किसी फ़ाइल की इनकोड संख्या प्राप्त कर सकते हैं ls -i
, और stat
इस उदाहरण में निम्न के साथ हार्डलिंक की संख्या प्राप्त कर सकते हैं :
$ stat plantilla-disenos.odt
File: «plantilla-disenos.odt»
Size: 12367 Blocks: 32 IO Block: 4096 fichero regular
Device: 803h/2051d Inode: 319875 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ d4rio) Gid: ( 1000/ d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300
इस संदर्भ के लिए धन्यवाद @geekosaur:
कर्नेल को सिम्लिंक का विस्तार करने के लिए पथनाम-टू-इनोड अनुवाद (निर्देशिका ट्री का पता लगाना) को पुनरारंभ करना पड़ता है, जबकि हार्ड लिंक सभी एक ही इनोड का उपयोग करते हैं। (आप अक्सर इसे कर्नेल फ़ंक्शन के नाम से संदर्भित करते हैं, जो पारंपरिक यूनिक्स में ऐसा करता है।)
और यह (संपादित):
हार्ड-लिंक ऐप्पल की टाइम मशीन की तरह डिस्क-आधारित वृद्धिशील बैकअप तंत्र के लिए बहुत उपयोगी हैं , क्योंकि आपके पास फ़ाइलों के लिए स्थान साझा करते समय प्रत्येक बैकअप के लिए एक पूर्ण निर्देशिका ट्री हो सकता है - जो परिवर्तित नहीं हुआ है और फाइल सिस्टम संदर्भ गिनती का ट्रैक रखता है, इसलिए जब किसी दिए गए संस्करण का अंतिम संदर्भ चला जाता है क्योंकि बैकअप समाप्त हो गया था / अंतरिक्ष कारणों से हटा दिया गया था, तो इसका उपयोग किया गया स्थान स्वचालित रूप से पुन: प्राप्त हो गया है। कुछ मेल क्लाइंट एक ही कारण के लिए, कई फ़ोल्डरों को भेजे गए संदेशों के लिए भी इसका उपयोग करते हैं।
चियर्स
namei
पारंपरिक यूनिक्स में ऐसा करने वाले कर्नेल फ़ंक्शन के नाम से संदर्भित करते हैं ।)
stat
विफल हो जाएंगे।
एक नरम लिंक दूसरे pathname की ओर इशारा करता है। वह पाथनाम वास्तव में मौजूद हो भी सकता है और नहीं भी। पथ को तब तक नहीं देखा जाएगा जब तक कि आप सिमलिंक तक नहीं पहुंच जाते। यदि आप इसे एक्सेस करने का प्रयास करते समय पथ मौजूद नहीं है, तो आपके पास एक टूटा हुआ सिमलिंक है।
एक कड़ी के साथ, आपके पास कई नामों वाली एक फ़ाइल है। आप यह नहीं कह सकते हैं कि उनमें से एक "वास्तविक" फ़ाइल है और अन्य केवल इसके लिए एक लिंक हैं। वे सभी समान हैं। वहाँ एक टूटी कड़ी कड़ी के रूप में वहाँ कोई बात नहीं है जिस तरह से टूटे हुए सीमलिंक हैं।
हार्ड लिंक केवल एक ही फाइल सिस्टम के भीतर काम करते हैं। यदि आप एक अलग फाइल सिस्टम (जैसे एक अलग विभाजन या एक नेटवर्क शेयर) पर एक फ़ाइल से लिंक करना चाहते हैं, तो आपको एक नरम लिंक का उपयोग करना होगा ।
जब आप किसी लिंक की गई फ़ाइल को हटाते हैं तो एक और बड़ा अंतर होता है। यदि आप एक जोड़ी हार्डलिंक फ़ाइलों को हटाते हैं, तो उसी नाम से एक नई फ़ाइल बनाएं, आपके पास दो अलग-अलग फाइलें होंगी (लिंक हट गया है)। यदि आप एक सिमलिंक के लक्ष्य को हटाते हैं और उसी नाम से एक नई फ़ाइल बनाते हैं, तो लिंक नई फ़ाइल को इंगित करेगा।
"हार्ड" लिंक समान आईनोड को साझा करते हैं
$ touch foo
$ ln foo foolink # Creates a hard link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink
अगर मैं या तो फू या एडिट करता हूं तो केवल एक फाइल है और इसे अपडेट किया जाएगा। यदि मैं केवल एक फ़ाइल नाम को हटाता हूं, तो इनोड और डेटा जारी रहेगा, मूर्खता बच जाएगी।
$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink
अगर मैं एक ही बनाने के लिए था, लेकिन एक "सॉफ्ट" या प्रतीकात्मक लिंक के साथ, तो एक फ़ाइल, एक इनोड, और एक नई फ़ाइल है जिसमें पहले की ओर इशारा करते हुए एक ही फाइल है।
$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo
अगर मैं या तो फू या को संपादित करता हूं तो अभी भी केवल एक फ़ाइल है और इसे अपडेट किया जाएगा।
यदि मैं केवल सिमलिंक हटाता हूं, तो इनोड और डेटा कायम रहेगा। अगर मैं फू को हटाता हूं, तो डेटा चला जाएगा, सिम्लिंक बना रहेगा लेकिन एक गैर-मौजूद फ़ाइल की ओर इशारा करता है।
$ rm foo
removed `foo'
$ ls -l foo foolink
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo
हार्ड लिंक एक ही फ़ाइल के लिए अतिरिक्त निर्देशिका प्रविष्टियाँ हैं। इसका मत
कई संपादक बचत करते समय एक ही फ़ाइल में नई सामग्री नहीं लिखते हैं, बल्कि निम्न प्रक्रिया करते हैं:
इस योजना का अर्थ है कि एक ही फ़ाइल के अन्य हार्ड लिंक अब वर्तमान फ़ाइल को इंगित नहीं करेंगे, लेकिन पिछले संस्करण के लिए (यह सच है कि अगर संपादक पुरानी फ़ाइल को हटा देता है, क्योंकि यूनिक्स के तहत, एक फ़ाइल को "हटाना" बस इसका लिंक हटाने का मतलब है; केवल हटाए गए लिंक ही एकमात्र लिंक है जो वास्तविक फ़ाइल हटा दी जाती है)।
चूँकि हार्ड लिंक सीधे फाइल में जाता है, आप उस फ़ाइल तक पहुँच सकते हैं, भले ही आपके पास उस फ़ाइल के मूल स्थान तक पहुँच न हो (उदाहरण के लिए, क्योंकि निर्देशिका में मूल प्रविष्टि है पर आपके पास कोई अनुमति नहीं है) । आपकी पहुंच का निर्धारण करने वाले एकमात्र अधिकार फ़ाइल के एक्सेस अधिकार हैं (जो फ़ाइल से संबद्ध हैं, लिंक के साथ नहीं; आप एक ही फ़ाइल के लिए अलग-अलग अनुमतियों के साथ हार्ड लिंक नहीं कर सकते हैं) और हार्ड लिंक के पथ के एक्सेस अधिकार में निहित है (मूल रूप से, जिस निर्देशिका में लिंक है, और किसी भी प्रत्यक्ष और अप्रत्यक्ष मूल निर्देशिका को निष्पादित अधिकार)।
दूसरी ओर, प्रतीकात्मक लिंक, pathname (फ़ाइल का नाम - या इसके निर्देशिका प्रविष्टि - संभवतः इसके पथ, जैसे /bin/sh
या subdir/foo.bar
) सहित - किसी अन्य फ़ाइल को संग्रहीत करते हैं । यदि पथनाम सापेक्ष है, तो यह हमेशा उस निर्देशिका के सापेक्ष व्याख्या किया जाता है जो लिंक में निहित है। इसका मतलब है:
एक प्रतीकात्मक लिंक एक अलग फ़ाइल सिस्टम पर फ़ाइलों का उल्लेख कर सकता है (यहां तक कि एक फ़ाइल सिस्टम के लिए जो स्वयं हार्ड या सॉफ्ट लिंक का समर्थन नहीं करता है, जैसे बैट)।
यदि मूल फ़ाइल हटा दी जाती है, तो प्रतीकात्मक लिंक फ़ाइल सामग्री को संरक्षित नहीं करता है। जब तक एक ही फाइल के अन्य हार्ड लिंक नहीं होंगे, फाइल कंटेंट चला जाएगा। प्रतीकात्मक लिंक को फिर झूलना छोड़ दिया जाएगा (जो कि एक पथनाम का संदर्भ देता है जो निर्देशिका प्रविष्टि के अनुरूप नहीं है)। दूसरी ओर, प्रतीकात्मक लिंक को हटाने से मूल फ़ाइल प्रभावित नहीं होती है, क्योंकि यह केवल इसके पथनाम को संदर्भित करता है।
यदि मूल फ़ाइल को स्थानांतरित या नाम दिया गया है, तो प्रतीकात्मक लिंक अपडेट नहीं किया गया है, लेकिन लटकना छोड़ दिया गया है। यदि आप प्रतीकात्मक लिंक को स्थानांतरित करते हैं, तो यह केवल टूट जाता है यदि इसमें एक सापेक्ष पथ शामिल है, और पथ अब नई स्थिति से मान्य नहीं है।
यदि मूल फ़ाइल को उसी नाम से एक नई फ़ाइल द्वारा प्रतिस्थापित किया जाता है (जैसा कि ऊपर वर्णित संपादक परिदृश्य में है), लिंक नई फ़ाइल को संदर्भित करता है।
हार्ड लिंक के अधिकांश उपयोग मूल रूप से फाइल की सामग्री को दो बार संग्रहित किए बिना फ़ाइल की एक प्रति रखने का एक तरीका है। यह सबसे अच्छा काम करता है यदि फाइलें फिर से कभी नहीं बदली जाती हैं, क्योंकि अन्यथा लिंक को गलती से तोड़ना आसान है (ऊपर संपादक का परिदृश्य देखें)। बेशक, ऐसे मामले हैं जहां आप लिंक को तोड़ना चाहते हैं , जैसे कि कई बैकअप रखने के मामले में: नई बैकअप में बदल गई फ़ाइलों के लिए, आप नहीं चाहते कि पुराने बैकअप में कॉपी भी बदल जाए।
आम तौर पर यदि आप एक लिंक चाहते हैं, तो आप एक प्रतीकात्मक लिंक का उपयोग करेंगे। एक उदाहरण तब होता है जब आप किसी निर्देशिका को किसी अन्य विभाजन में स्थानांतरित करते हैं (क्योंकि वह जिस पर पूर्ण हो जाता है), आप पुरानी स्थिति से नए पर एक नरम लिंक सेट कर सकते हैं, इसलिए कोई भी प्रोग्राम पुराने स्थान पर निर्देशिका तक पहुंचने का प्रयास करेगा। इसके बजाय नई जगह पर पहुंचें। यह कठिन लिंक के साथ संभव नहीं होगा। हालाँकि, यह ध्यान रखें कि स्थानांतरित निर्देशिका में प्रतीकात्मक लिंक टूट सकते हैं यदि उनमें सापेक्ष पथ होते हैं जो स्थानांतरित निर्देशिका से बाहर निकलते हैं।
हार्ड लिंक (केवल फाइलें) बनाम सॉफ्ट लिंक (फाइलें या निर्देशिका) बनाम बिन्द (निर्देशिकाएँ के लिए हार्ड लिंक)
(स्रोत: freesoftwareservers.com )
जबकि daxelrod का जवाब सवाल को अच्छी तरह से समझाता है, मैंने सोचा कि इस मामले में तस्वीर ने एक बड़ा बदलाव किया, खासकर शुरुआती लोगों के लिए जो अभी तक इनोड और जटिल लिनक्स शब्दजाल को नहीं समझते हैं।
इस बारे में सोचें, यदि आपने अपनी ड्राइव से सबकुछ "डिलीट" कर दिया है, तो आप डेटा को पुनर्स्थापित करने के लिए सॉफ़्टवेयर चला सकते हैं, क्योंकि 1 और 0 अभी भी हैं, आपने अभी-अभी सभी हार्ड लिंक को डिलीट किया है। रिकवरी सॉफ़्टवेयर का उद्देश्य 0 और 1 की समझ बनाने के लिए हार्ड लिंक्स का पुनर्निर्माण करना है
मैंने एक महान "वन लाइनर" पढ़ा, जिसने यह सब बना दिया और मैं साझा करना चाहता था!
लिनक्स में सभी फाइलें 0 और डिस्क पर 1 के लिए "हार्ड लिंक" हैं। जब आप कोई डेटा बनाते हैं (0 & 1 का) तो OS हार्ड ड्राइव पर उस स्थान को संदर्भित करने के लिए फ़ाइल ट्री में एक हार्ड लिंक बनाता है।
आप एक और हार्ड लिंक बना सकते हैं और मूल फ़ाइल को हटा सकते हैं, और आपके पास अभी भी नई बनाई गई हार्ड लिंक तक पहुंच है।
यदि आपने हार्ड लिंक 1 को हटा दिया है, तो क्या आपको लगता है कि सॉफ्ट लिंक काम करेगा? नहीं, OS वापस रिपोर्ट करेगा कि HARD LINK 1 मौजूद नहीं है।
इसके विपरीत, यदि आप सॉफ्ट लिंक को हटाते हैं, तो क्या हार्ड लिंक काम करेगा? हाँ। जब तक OS में एक HARD LINK फ़ाइल है, यह रिपोर्ट करेगा कि भरण को हटाया नहीं गया है।
- इसके अलावा शोध / ध्यान देने योग्य है BIND, दो निर्देशिकाओं को सहानुभूति देने की तरह दो निर्देशिकाओं को बांधने का एक तरीका है, लेकिन यह OS के लिए पारदर्शी है (OS के बता सकते हैं कि जब आप Symlink और कुछ मौसम के संबंध में नियम हैं तो वे Symlinks का पालन कर सकते हैं)। यह माउंट का उपयोग करता है, एलएस का नहीं और एफएसटीएबी के माध्यम से कॉन्फ़िगर किया जा सकता है।
एक हार्ड लिंक डिस्क पर एक फ़ाइल रखेगा, जब तक कि सभी हार्ड लिंक, यहां तक कि पहले (एक "फ़ाइलनाम" तकनीकी रूप से एक कठिन लिंक नहीं है) को हटा दिया गया है। एक नरम लिंक को "झूलने" के लिए छोड़ दिया जा सकता है जब तक कि फ़ाइल को इंगित नहीं किया जाता है।
यह एक बहुत पुराना प्रश्न है, लेकिन मेरे पास एक उपयोग का मामला है जो मुझे कठिन लिंक का उपयोग करने की आवश्यकता है।
मैं एक संगीतकार हूं और इसलिए मेरे पास मेरे मैक से जुड़ी कई हार्ड ड्राइव पर बहुत सारी और बहुत सारी और विभिन्न प्रकार की ऑडियो फाइलें हैं। टेराबाइट्स लायक। मैंने उन्हें ज्यादातर सिम्लिंक निर्देशिकाओं के साथ बहुत अच्छी तरह से व्यवस्थित किया है ताकि मैं उन्हें सामग्री प्रकाशक, शैली / ध्वनि और अन्य मानदंडों के आधार पर पा सकूं कि मैं उस समय कैसे सोच रहा हूं। दुर्भाग्य से एक प्रोग्राम जो मैं उपयोग करता हूं, एब्लेटन लाइव, यह एलियास या इसके फ़ाइल ब्राउज़र से सहानुभूति देखने में पूरी तरह से असमर्थ है। एकमात्र समाधान जो मैंने पाया है वह है निर्देशिकाओं की कड़ी बनाना जो मैं चाहता हूं कि यह देखने में सक्षम हो, और फिर सब कुछ बढ़िया काम करता है।
तो, यह एक और मामला है जब आपको हार्ड लिंक का उपयोग करने की आवश्यकता हो सकती है, जो कि दूसरों को नहीं हुई होगी।