কীভাবে একটি সিমিলিংকে ওভাররাইড / আপডেট করবেন?


187

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

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এটি করতে পারি, তবে এটি ভাঙা মনে হচ্ছে (আমি আমার প্রশ্নের উপরে যা বলেছি তার বিপরীতে)।

আমি কীভাবে একাধিক ডিরেক্টরি স্তর লিঙ্ক সম্পাদন করতে পারি?


1
আমি unlinkপরিবর্তে ব্যবহার করার পরামর্শ দিই rm। আপনার সাথে unlinkকখনই ভুল স্যুইচ ব্যবহার করে কোনও উত্স ডিরেক্টরিতে কোনও ফাইল হারাতে ঝুঁকি থাকে না।
জেপসি

আপনি একটি শীর্ষস্থানীয় / আপনার কমান্ডে ব্যবহার করছেন
জেমি কুক

লিঙ্ক লিঙ্ক সম্পর্কিত @ জেপসি আপনার পরামর্শটি খুব ভাল হবে, যদি এটি সত্য হয় । টাচ zzzz চেষ্টা করুন; লিঙ্ক zzzz। (কলগুলি লিঙ্কমুক্ত করুন, আরএমের মতো লিঙ্কমুক্ত করুন, তবে কোনও অভিনব বিকল্প নেই, এবং কোনও পুনরাবৃত্তি নেই)।
ctrl-alt-delor

কেন ব্যবহার -n? (সমস্যা হতে পারে)। এছাড়াও যদি আপনার এলএন সমর্থন করে -tতবে এগুলি, এই ক্ষেত্রে এবং -Tবা destination/অন্যান্য ক্ষেত্রে এটি ব্যবহার করুন।
ctrl-alt-delor

উত্তর:


150

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


আমি আমার ইস্যুতে আরও তথ্যের সাথে আমার প্রশ্ন আপডেট করেছি।
জেরুমে ভার্সট্রিঞ্জ

আমি লিনাক্সের নিচে আছি
জেরুমে ভার্সট্রিঞ্জ

2
যদি আপনি lnপ্যারামিটারগুলি স্যুইচ করেন , যেমনটি আমি প্রবণ হয়ে থাকি তবে কি -fসুইচটি আপনার বিদ্যমান ফাইলগুলি (লিঙ্ক লক্ষ্যগুলি) নষ্ট করবে? উভয় ক্ষেত্রেই, -iযদি আপনি কিছুটা সুরক্ষা চান তবে আমাদের কাছে প্যারামিটার রয়েছে (যা ব্যবহারকারীকে ওভাররাইটের জন্য অনুরোধ করবে)।
পালসউইম

2
@ পালসুইম এই এসও পোস্টটি বোঝায় যে এটি নিরাপদ কারণ -fকেবল কল unlink()এবং link()হুডের নীচে: stackoverflow.com/a/1466570/157385 । আমি চাই আমি ঠিক ক্রমটি মনে রাখি, যদিও!
মাইক ব্রান্সকি 18

4
কাজ করে না. প্রয়োজন -n। গৃহীত উত্তর দেখুন।
শন ওয়েলচ

118

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

অন্য কথায়, আমার প্রশ্নের আদেশগুলি হ'ল:

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}

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


22
কেন তা নিয়ে কিছু অতিরিক্ত তথ্যের জন্য, পার্থক্যগুলি হ'ল একটি relativeপথ (অগ্রণী / ছাড়া) এবং অন্যটি একটি absoluteপথ (অগ্রণী / সহ)। আপনি যদি কোনও লিনাক্স সিস্টেম পরিচালনা করেন তবে এটি তাত্পর্যপূর্ণ যে আপনি পার্থক্যগুলি বুঝতে পারেন CR উদাহরণস্বরূপ পার্থক্য rm -rf ./*এবং rm -rf /.*আপনি নিজের চাকুরী
সাফাদো

5
এটি 'সিম লিঙ্কটি কীভাবে আপডেট করবেন / ওভারাইড করবেন' এই প্রশ্নের উত্তর দেয় না
সের্চ

Ln -sfn {পাথ / থেকে / ফাইল-নাম} {লিঙ্ক-নাম} লাইন করে।
জেরুমে ভার্সট্রিঞ্জ

6
-n (--no-dereferences) এটিকে লিঙ্কটি অনুসরণ না করে file লিঙ্কের নাম treat একটি সাধারণ ফাইলের মতো আচরণ করে। আপনি যে এই লিঙ্কটি অনুসরণ করেন না তা অনুসরণ না করে আপনাকে এই বিকল্পটি ব্যবহার করতে হবে n
ফিল্ডো

1
এই উত্তরটি -nপ্রতীক লিঙ্কটি প্রতিস্থাপনের জন্য প্যারামিটারের সাথে হাইলাইট উত্তর হওয়া উচিত ।
নিক

12

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

আপনাকে উদ্ধৃত:

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

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

~ / স্ক্রিপ্ট / পরীক্ষা / ~ / স্ক্রিপ্ট / পরীক্ষা / রিমোট_লোক / ~ / স্ক্রিপ্ট / পরীক্ষা / রিমোট_লোক / সাইট 1 / ~ / স্ক্রিপ্ট / পরীক্ষা / রিমোট_লোক / সাইট 1 / স্টাফ 1 / টেস্ট / রেমোট_লোক / সাইট 2/stuff2.txt ~ / স্ক্রিপ্টস / পরীক্ষা / রিমোট_লোক / সাইট 2 / sc / স্ক্রিপ্টস / পরীক্ষা / রিমোট_লোক / সাইট 3 / স্টাফ 3.txt

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

ln -s /remote_loc/site1 test_link

এটি কি আপনার $ PWD, বা উপস্থিত ওয়ার্কিং ডিরেক্টরিতে একটি প্রতীকী লিঙ্ক তৈরি করে, যা / দূরবর্তী_লোক / সাইট 1 এ /, বা মূলের বাইরে থাকা কোনও অ-বিদ্যমান ফাইলকে নির্দেশ করে that

যদি আপনার পিডব্লিউডি ~ / স্ক্রিপ্টগুলিতে থাকে তবে আপনার এটি ব্যবহার করা উচিত ছিল:

ln -s remote_loc/site1 test_link

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

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

দ্বিতীয় সংখ্যা:

আপনাকে উদ্ধৃত:

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

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

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


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

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

উদাহরণ:

 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 -sfr:
-r বা - সম্পর্কিতটি লিঙ্কের অবস্থানের সাথে সম্পর্কিত প্রতীকী লিঙ্কগুলি তৈরি করে।

উদাহরণ:

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উপরে -r বিকল্পটি না দিয়ে উপরের যুক্তিতে নিখুঁত পাথের নামগুলি ব্যবহার করা সত্ত্বেও , প্রতীকী লিঙ্কটি এখনও লিঙ্কটির সাথে আপেক্ষিক।


ডিরেক্টরিতে লিঙ্কগুলি আপডেট করুন:

ln -sfrn:
-n বা --no-dereferences 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

6
$ 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

আমি যখন 1 টি স্তরের ডিরেক্টরি দিয়ে পরীক্ষা করি তখন এটি কাজ করে, তবে আমি বহু-স্তরের ডিরেক্টরি ব্যবহার করার চেষ্টা করছি এবং এটি কার্যকর হয় না। আমি আমার প্রশ্ন আপডেট করেছি।
জেরুমে ভার্সট্রিঞ্জ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.