2010-07-28 22 views
5

आम तौर पर एक सिम्लिंक लक्ष्य बदलने के लिए, पहले फ़ाइल को अनलिंक कर देगा और फिर नए लक्ष्य पथ के साथ सिम्लिंक को फिर से बनायेगा। हालांकि इसे एक नया इनोड नंबर सौंपा जाएगा।इनोड को संरक्षित करते समय symlink लक्ष्य को कैसे बदलें

शायद update_target_for_symlink() फ़ंक्शन के साथ एक निजी मैक एपीआई है, तो इनोड एक ही रह सकता है?

यदि आपको आश्चर्य है कि मुझे इसकी आवश्यकता है .. फ़ाइल प्रबंधक। मुझे संदेह है कि यह बिल्कुल संभव है। वैसे भी जो इसे दिलचस्प बनाता है।

उत्तर

7

ऐसा लगता है कि यह बिल्कुल संभव नहीं है।

+0

हां, यह बिल्कुल समस्या :-) – neoneye

2

एक लिंक इनोड के साथ एक अतिरिक्त नाम है। इसलिए लिंक को फिर से लक्षित करने की कोई संभावना नहीं है क्योंकि लिंक फ़ाइल को लक्षित करने वाला एक अद्वितीय ऑब्जेक्ट नहीं है। यह एक फ़ाइल का माध्यमिक नाम है।

Thats आपको इसे पहले अनलिंक क्यों करना है (फ़ाइल से जुड़े नाम को हटाएं) और फिर नई फ़ाइल में एक नया लिंक (अतिरिक्त नाम जोड़ें) बनाएं।

लिंक का इनोड लिंक से संबंधित नहीं है, यह फ़ाइल से संबंधित है। एक फ़ाइल में नामों की सूची ("लिंक"), एक पहचानकर्ता (इनोड) और फ़ाइल सामग्री वाले डेटा ब्लॉक का समूह होता है।

नाम बदलने के लिए एक सिम्लिंक संभव होना चाहिए, क्योंकि यह केवल फ़ाइल के टेक्स्ट नाम को संदर्भित करता है।

मैन्युअल से: नौ सिस्टम कॉल हैं जो लिंक का पालन नहीं करते हैं, और जो प्रतीकात्मक लिंक पर ही काम करते हैं। वे हैं: lchflags (2), lchmod (2), lchown (2), lstat (2), lutimes (2), readlink (2), नाम बदलें (2), आरएमडीआईआर (2), और अनलिंक (2)।

+2

है पहला भाग हार्डलिंक के लिए सच है, लेकिन ओपी सिम्लिंक के बारे में पूछ रहा है क्योंकि कम या ज्यादा अप्रासंगिक है। – BCS

2

नज़दीक देखने पर, ln -sf ऐसा लगता है जो आप चाहते हैं।

पहला कॉलम इनोड नंबर है। नोट यह परिवर्तन नहीं करता है:

$ ln -s foo bar 
$ ls -li bar 
    16503 lrwxrwxrwx 1 golemon golemon 3 2010-08-21 12:29 bar -> foo 
$ ln -sf buz bar 
$ ls -li bar 
    16503 lrwxrwxrwx 1 golemon golemon 3 2010-08-21 12:29 bar -> buz 

यह ln-sf तरह लग रहा है बस का उपयोग करता है की लिंक रद्द() और सिमलिंक() यह पूरा करने के:

$ strace ln -sf quux bar 
    <snip> 
    symlink("quux", "bar")     = -1 EEXIST (File exists) 
    unlink("bar")       = 0 
    symlink("quux", "bar")     = 0 

$ ls -li bar 
    16503 lrwxrwxrwx 1 golemon golemon 4 2010-08-21 12:31 bar -> quux 
+1

मुझे लगता है कि मुझे कुछ याद आ रही है क्योंकि @neoneye लगता है जैसे उसने पहले से ही यह कोशिश की है, और ऐसा लगता है कि @UnixShadow ने क्या कहा। – bukzor

+1

मुझे लगता है कि आपको एक ही इनोड मिलता है। यह वास्तव में दिलचस्प है। हालांकि जब मैं कोशिश करता हूं तो मुझे अलग-अलग इनोड मिलते हैं। मुझे लगता है कि आप मैक पर नहीं हैं। आप किस मंच पर हैं? – neoneye

+0

क्या यह काम करता है यदि आप बीच में अन्य ऑप्स करते हैं? – BCS