सवाल एक प्रतीकात्मक लिंक लक्ष्य कैसे अपडेट करें (ln -f -s काम नहीं कर रहा है)


मैं उपयोग कर रहा हूँ

एलएन-एफएस   / Var / www / html / विज्ञप्ति / build1390   एप्लिकेशन वर्तमान

एक नए गंतव्य के साथ प्रतीकात्मक लिंक "ऐप-वर्तमान" अपडेट करने के लिए। हालांकि, यह काम नहीं करता है, लिंक "ऐप-वर्तमान" इसे मूल गंतव्य रखता है, हालांकि, मुझे कोई त्रुटि नहीं मिलती है ...

मैं लिंक को हटा नहीं दूंगा और इसे फिर से बनाऊंगा, बस मौजूदा लिंक के लक्ष्य को अपडेट करें। क्या यह संभव है?


44
2018-06-03 11:32


मूल




जवाब:


यह मेरे लिए काम करता है, इसका उत्पादन क्या है strace ln -f -s /var/www/html/releases/build1390 app-current ?

ओह, चूंकि यह एक निर्देशिका है जिसे आपको जोड़ना होगा -n कोई अव्यवस्था के लिए और इस मुद्दे को हल करना चाहिए। -f वास्तव में सुविधा के अधिक से अधिक है क्योंकि -फ सिर्फ इसे किसी भी तरह से अनलिंक करने का कारण बनता है। हालांकि मुझे लगता है कि यह आमतौर पर सामान्य रूप से लोड सिस्टम पर कुछ सौ एमएस तेजी से होता है।

उदाहरण के लिए, यदि arf पहले से ही / home को इंगित करता है:

के साथ पट्टा -n:

strace ln -n -f -s / arf
...
symlink("/", "arf")           = -1 EEXIST (File exists)
unlink("arf")                           = 0
symlink("/", "arf")           = 0

बिना पट्टा -n:

strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: )                  = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1)                    = 1

तो बिना -n एआरएफ को संदर्भित किया जाता है इसलिए एलएन इसे एआरएफ के रूप में मानता है जैसे कि यह वास्तव में था /। आपके विशेष उदाहरण में, यदि कोई त्रुटि नहीं है, तो मुझे लगता है कि आपने शायद अंदर एक नया प्रतीकात्मक लिंक बनाया है /var/www/html/releases/build1390 app-current और इसे साफ़ करना चाहूंगा।


54
2018-06-03 11:36



अच्छा, यह है -एन ने ऐसा किया। आपका बहुत बहुत धन्यवाद! - solsol


आप उपयोग कर सकते हैं -n या --no-dereference यदि यह एक सिम्लिंक है तो लक्ष्य को संदर्भित होने से रोकने के लिए। आप भी उपयोग कर सकते हैं -T या --no-target-directory यह सुनिश्चित करने के लिए कि लक्ष्य फ़ाइल होगी हमेशा एक नियमित फाइल के रूप में माना जाना चाहिए।

ये कुछ अलग व्यवहार दिखाते हैं, जैसा कि निम्नलिखित उदाहरण दिखाता है। मान लीजिए src कुछ फाइल है dirlink एक निर्देशिका के लिए एक सिम्लिंक है, और dir एक वास्तविक निर्देशिका है।

का उपयोग करते हुए -n:

  • ln -sfn src dirlink अधिलेखित कर देता है dirlink और इसे लिंक करता है src
  • ln -sfn src dir लिंक बनाता है dir/src -> src

का उपयोग करते हुए -T:

  • ln -sfT src dirlink अधिलेखित कर देता है dirlink और इसे लिंक करता है src
  • ln -sfT src dir एक त्रुटि संदेश उत्पन्न करता है: ln: ‘dir’: cannot overwrite directory

12
2017-07-11 10:30



लिनक्स उपयोगकर्ताओं के लिए सबसे सही और संक्षिप्त उत्तर है। - ross
क्या लक्ष्य निर्देशिका को ओवरराइट करने के लिए कोई तरीका है ताकि आपको त्रुटि संदेश प्राप्त न हो cannot overwrite directory? - gitaarik
@rednaw आप कुछ आदेशों को चेन करके ऐसा कर सकते हैं, लेकिन ln स्वयं निर्देशिकाओं को नहीं हटाता है - यह शायद एक बुरा विचार होगा, क्योंकि इसे संभवतः बड़ी संख्या में फाइलों को हटाने की आवश्यकता होगी। - augurar