কীভাবে প্রতীকী লিঙ্ক টার্গেট আপডেট করবেন (এলএন-ফ-এস কাজ করছে না)


45

আমি ব্যাবহার করছি

ln -f -s / var / www / এইচটিএমএল / রিলিজ / বিল্ড 1390 অ্যাপ-বর্তমান

নতুন গন্তব্য সহ প্রতীকী লিঙ্ক "অ্যাপ-কারেন্ট" আপডেট করতে। তবে এটি কাজ করে না, "অ্যাপ্লিকেশন-বর্তমান" লিঙ্কটি এটি মূল গন্তব্য রাখে, তবে আমি কোনও ত্রুটি পাই না ...

আমি বরং লিঙ্কটি সরিয়ে আবার এটি পুনরায় তৈরি করব না, কেবল বিদ্যমান লিঙ্কটির লক্ষ্যমাত্রা আপডেট করব। এটা কি সম্ভব?

উত্তর:


55

এটি আমার পক্ষে কাজ করে, এর ফলাফল কী strace ln -f -s /var/www/html/releases/build1390 app-current?

ওহ, এটি যেহেতু এটি একটি ডিরেক্টরি তাই আপনার কোনও যুক্তি -nছাড়াই যুক্ত করা উচিত এবং এটি সমস্যার সমাধান করবে। -f-f যুক্ত করা যেহেতু এটি কোনওভাবেই লিঙ্কমুক্ত করার কারণ হিসাবে প্রকৃতপক্ষে একটি সুবিধাজনক। যদিও আমি অনুমান করি এটি সম্ভবত একটি সাধারণ লোড সিস্টেমে কয়েক শতাধিক এমএস দ্রুত ঘটবে।

উদাহরণস্বরূপ, যদি আরফ ইতিমধ্যে / হোমকে নির্দেশ করে:

সাথে স্ট্রেস -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এবং এটি পরিষ্কার করতে চাইবেন।


4
দুর্দান্ত, এটি এটি করেছে n অনেক ধন্যবাদ!
solsol

12

যদি আপনি এটি কোনও সিমলিংক করে থাকেন তবে লক্ষ্যটিকে অবজ্ঞা করা থেকে বাঁচাতে -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

1
লিনাক্স ব্যবহারকারীদের জন্য সবচেয়ে সঠিক এবং সংক্ষিপ্ত উত্তর রয়েছে।
রস

লক্ষ্য ডিরেক্টরিটি ওভাররাইটিংয়ে জোর করার কোনও উপায় আছে যাতে আপনি ত্রুটি বার্তাটি পাবেন না cannot overwrite directory?
গীতারিক

@ রেডনো আপনি কয়েকটি কমান্ড শৃঙ্খলাবদ্ধ lnকরে এটি করতে পারেন , তবে নিজেই ডিরেক্টরিগুলি সরাবেন না - এটি সম্ভবত একটি খারাপ ধারণা হবে, কারণ এটি সম্ভবত বিপুল সংখ্যক ফাইল মুছে ফেলার প্রয়োজন হবে।
আগস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.