প্রশ্ন কিভাবে একটি symlink ওভাররাইড / আপডেট?


আমি প্রতীকী লিঙ্ক ব্যবহার করার চেষ্টা করছি। আমি কিছু পড়া এবং নিম্নলিখিত কমান্ড খুঁজে পেয়েছি:

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}

সৃষ্টি এবং মুছে ফেলার কাজ সূক্ষ্ম। কিন্তু আপডেট কাজ করে না। এই কমান্ডটি সম্পাদন করার পরে, সিমলিঙ্ক অবৈধ হয়ে যায়।

আমি এখানে এবং সেখানে পড়েছি যে একটি সিমলিঙ্ক আপডেট / ওভাররাইড করা সম্ভব নয়। সুতরাং নেট উপর দ্বন্দ্ব তথ্য আছে। কে সঠিক? যদি একটি সিমলিঙ্ক আপডেট / ওভাররাইড করা যায়, আমি কিভাবে এটি অর্জন করতে পারি?

হালনাগাদ

এখানে আমার ডিরেক্টরি গঠন:

~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt

থেকে ~/scripts/test/, যখন আমি সঞ্চালন:

ln -s /remote_loc/site1 test_link

একটি test_link তৈরি করা হয়, এবং আমি করতে পারেন ls -l এটা, কিন্তু এটা ভাঙ্গা বলে মনে হয় (আমি আমার প্রশ্নের উপরে কি বলে বিপরীত)।

আমি কিভাবে একাধিক ডিরেক্টরি স্তর লিংক সঞ্চালন করতে পারেন?


153
2018-05-17 12:39


উত্স


আমি ব্যবহার করার সুপারিশ unlink পরিবর্তে rm। সঙ্গে unlink আপনি ভুল সুইচগুলি ব্যবহার করে কোনও উৎস ডিরেক্টরিতে যে কোনও ফাইল হারাতে ঝুঁকি রাখেন না। - Jpsy
আপনি একটি নেতৃস্থানীয় / আপনার কমান্ড ব্যবহার করছেন - Jamie Cook
@ jpsy আনলিঙ্ক সম্পর্কে আপনার পরামর্শ খুব ভাল হবে, যদি এটা সত্য ছিল। স্পর্শ zzzz চেষ্টা করুন; আনলক zzzz। (কল আনলক করুন, আরএম হিসাবে আনলিঙ্ক করুন, কিন্তু কোন অভিনব বিকল্প নেই, এবং কোন পুনরাবৃত্তি)। - ctrl-alt-delor
কেন ব্যবহার -n? (সমস্যা হতে পারে)। এছাড়াও যদি আপনার ln সমর্থন করে -t তারপর এই ক্ষেত্রে, এবং, এটি ব্যবহার করুন -T অথবা destination/ অন্যান্য ক্ষেত্রে জন্য। - ctrl-alt-delor


উত্তর:


ব্যবহার -f সঙ্গে ln ইতিমধ্যে যে কোনও লিঙ্ককে ওভাররাইট করবে, যতক্ষণ আপনার কাছে সঠিক অনুমতি থাকবে, এটি কাজ করা উচিত ... এটি সর্বদা আমার জন্য কাজ করে। আপনি কি অপারেটিং সিস্টেম ব্যবহার করছেন?


125
2018-05-17 12:49



আমি আমার সমস্যা সম্পর্কে আরও তথ্য দিয়ে আমার প্রশ্ন আপডেট করেছি। - Jérôme Verstrynge
আমি linux অধীনে আছি। - Jérôme Verstrynge
আপনি যদি সুইচ ln প্যারামিটার, আমি প্রবণ হয়, হিসাবে হবে -f সুইচ আপনার বিদ্যমান ফাইল (লিঙ্ক লক্ষ্য) ধ্বংস? উভয় ক্ষেত্রে, আমরা আছে -i প্যারামিটারটি (যা ব্যবহারকারীকে ওভাররাইট করার জন্য প্রম্পট করবে) পাশাপাশি, যদি আপনি কিছুটা সুরক্ষা চান। - palswim
@ পলসুইম এই তাই পোস্টটি নিরাপদ কারণ বোঝায় -f শুধু কল unlink() এবং link() হুড অধীনে: stackoverflow.com/a/1466570/157385। আমি শুধু সঠিক আদেশ মনে করতে চাই, যদিও! - Mike Branski
কাজ করে না. চাহিদা -n। গৃহীত উত্তর দেখুন। - Shawn Welch


ঠিক আছে, আমি আমার ত্রুটি যেখানে পাওয়া যায়: এক প্রথম করা উচিত নয় / পথে।

অন্য কথায়, আমার প্রশ্নের মধ্যে কমান্ড হওয়া উচিত:

Creation -> ln -s {path/to/file-name} {link-name}
Update -> ln -sfn {path/to/file-name} {link-name}

পরিবর্তে

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}

আমার ক্ষেত্রে বিবেচনা।


93
2018-05-17 13:32



কেন যে কিছু অতিরিক্ত তথ্যের জন্য, পার্থক্য এক হয় relative পথ (নেতৃস্থানীয় ছাড়া) এবং অন্য একটি absolute পথ (নেতৃস্থানীয় সঙ্গে) /। আপনি যদি একটি লিনাক্স সিস্টেম প্রশাসিত হন তবে এটি জটিল যে আপনি পার্থক্যগুলি বুঝতে পারেন। উদাহরণস্বরূপ মধ্যে পার্থক্য rm -rf ./* এবং rm -rf /.* আপনি আপনার কাজ রাখা বা না কিনা সিদ্ধান্ত নেয় :) - Safado
এই প্রশ্নের উত্তর দেয় না 'কিভাবে সিএম লিঙ্কটি আপডেট / ওভারাইড করবেন?' - Sirch
Ln -sfn {path / to / file-name} {link-name} লাইনটি করে। - Jérôme Verstrynge
কি পার্থক্য আছে -n বিকল্প করা? - dokaspar
-n (--no-dereference) এটি লিঙ্কটি অনুসরণ করার পরিবর্তে {link name} কে একটি সাধারণ ফাইলের মতো আচরণ করে। আপনি যে লিঙ্কটি অনুসরণ করবেন না তা অনুসরণ করার জন্য আপনাকে এই বিকল্পটি ব্যবহার করতে হবে। - feldoh


প্রথম সমস্যা:

আপনি উদ্ধৃত:

সৃষ্টি এবং মুছে ফেলার কাজ সূক্ষ্ম। কিন্তু আপডেট কাজ করে না। পরে   এই কমান্ড সম্পাদন, symlink অবৈধ হয়ে।

প্রদত্ত ডিরেক্টরি গঠন সঙ্গে সমস্যা:

~ / স্ক্রিপ্ট / পরীক্ষা / ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc /   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site1 /   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site1 / stuff1.txt   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site2 /   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site2 / stuff2.txt   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site2 /   ~ / স্ক্রিপ্ট / পরীক্ষা / remote_loc / site3 / stuff3.txt

এবং কমান্ড ব্যবহার করে:

ln -s /remote_loc/site1 test_link

এটি কি আপনার $ পিডব্লিউডি, বা বর্তমান কাজের নির্দেশিকাতে একটি প্রতীকী লিঙ্ক তৈরি করে যা কোন অ বিদ্যমান ফাইলকে /, বা রুট থেকে / remote_loc / site1 এ নির্দেশ করে

যদি আপনার PWD ~ / স্ক্রিপ্টে থাকে তবে আপনাকে এটি ব্যবহার করতে হবে:

ln -s remote_loc/site1 test_link 

অন্যথায় আপনি সম্পূর্ণ পরম পথ যেমন ব্যবহার করতে পারে:

ln -s /home/yourusername/remote_loc/site1 test_link 

দ্বিতীয় সমস্যা:

আপনি উদ্ধৃত:

আমি এখানে এবং সেখানে পড়েছি যে আপডেট / ওভাররাইড করা সম্ভব নয়   একটি symlink। সুতরাং নেট উপর দ্বন্দ্ব তথ্য আছে। কে   ঠিক আছে? যদি একটি সিমলিঙ্ক আপডেট / ওভাররাইড করা যায়, আমি কিভাবে এটি অর্জন করতে পারি?

আপনার প্রশ্নটির উত্তর দিতে "কে সঠিক", আমি ঠিক কি পড়ি তা নিশ্চিত নই, বা এটি কীভাবে বোঝা যায় তা আমি নিশ্চিত নই। কিন্তু, নিম্নলিখিত পরিষ্কার করা উচিত:

  1. কি আপডেট করা যাবে, এবং
  2. কি ব্যবহার করে আপডেট করা যাবে না উপযুক্ত সুইচ।


ডিরেক্টরি নয় এমন লক্ষ্যগুলির সাথে প্রতীকী লিঙ্কগুলি আপডেট করা হচ্ছে।

ln-sf:
  -এফ বা --force বিদ্যমান গন্তব্য ফাইলগুলি সরান, এটি একটি লিঙ্কের লক্ষ্য বা গন্তব্য আপডেট করার জন্য ব্যবহৃত হয়।

উদাহরণ:

 ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
 -rw-r--r-- 1    0 Jun  8 17:19 test
 lrwxrwxrwx 1    9 Jun  8 17:27 test.link -> /tmp/test

কিন্তু, আপনি দেখতে পারেন, পরম পথ আছে যদি এটা পরম পথ দিতে হবে lnএর আর্গুমেন্ট। বর্তমান ওয়ার্কিং ডিরেক্টরি লিংকের প্যারেন্ট ডিরেক্টরি থেকে আলাদা হলে পূর্ণ পথ প্রদান করা আবশ্যক।


সম্পর্কিত পথ:

ln -fr:
  -আর বা - সম্পর্কিত লিঙ্কটির অবস্থানের সাথে সম্পর্কিত প্রতীকী লিঙ্ক তৈরি করে।

উদাহরণ:

ln -sfr /tmp/test  /tmp/test.link  ; ls -go /tmp| grep test
-rw-r--r-- 1    0 Jun  8 17:19 test
lrwxrwxrwx 1    4 Jun  8 17:27 test.link -> test

কিন্তু, একটি ডিরেক্টরি একটি লিঙ্ক আপডেট করা হলে লক্ষ্য একটি ডিরেক্টরি হয় না।

উদাহরণ:

ln -sf /tmp/testdir  /tmp/testdir.link  ; ls -go /tmp  |grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1    7 Jun  8 17:47 testdir.link -> testdir

আপনি দেখতে পারেন, দেওয়া পরম পাথ নাম ব্যবহার সত্ত্বেও ln-আর বিকল্প ছাড়া উপরে যুক্তি, প্রতীকী লিঙ্কটি এখনও লিংকের তুলনামূলক।


নির্দেশাবলী লিঙ্ক আপডেট করুন:

ln -frfr:
  যদি এটি একটি ডিরেক্টরি একটি প্রতীকী লিঙ্ক হয় তবে -n অথবা --no-dereference LINK_NAME একটি স্বাভাবিক ফাইল হিসাবে আচরণ করে।

উদাহরণ:

ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1   12 Jun  8 17:48 testdir.link -> /tmp/testdir

বিপরীতে হিসাবে:

ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1    7 Jun  8 17:48 testdir.link -> testdir

10
2018-06-08 22:58





$ touch test1 test2
$ ln -sf test2 test1
$ ls -l test[12]
lrwxrwxrwx 1 user01 user01 5 2012-05-17 14:41 test1 -> test2
-rw-r--r-- 1 user01 user01 0 2012-05-17 14:41 test2

6
2018-05-17 12:42



যখন আমি 1 স্তরের ডিরেক্টরি দিয়ে পরীক্ষা করি, এটি কাজ করে, তবে আমি মাল্টি-লেভেল ডিরেক্টরি ব্যবহার করার চেষ্টা করছি, এবং এটি কাজ করে না। আমি আমার প্রশ্ন আপডেট করেছি। - Jérôme Verstrynge