সিমলিংকের লক্ষ্যটি কি গন্তব্যের অভিভাবক ডিরেক্টরিটির সাথে সম্পর্কিত এবং যদি তাই হয় তবে কেন?


14

আমি নিম্নলিখিত ফাইল কাঠামো পেয়েছি:

build/
client/
  –> index.js

এবং যখন আমি বিল্ড ডিরেক্টরিতে "ক্লায়েন্ট" নামে একটি প্রতীকী লিঙ্ক তৈরি করার চেষ্টা করি যা সিডব্লিউডিতে ক্লায়েন্ট ডিরেক্টরিকে বোঝায়

// Fails
$ pwd
/home/user/
$ ln -s client build/client 
$ stat build/client/index.js
stat: build/client/index.js: stat: Too many levels of symbolic links

আমি উপরে প্রদর্শিত ইলুপ ত্রুটি পেয়েছি। আমি যখন লক্ষ্যের পথটিকে গন্তব্যের পথে তুলনামূলকভাবে পরিবর্তন করি তখন সমস্ত কিছুই ভাল:

// Works
$ pwd
/home/user/
$ ln -s ../client build/client 
$ stat build/client/index.js
stat: <outputs file stats>

এটি কি উদ্দেশ্যমূলক আচরণ এবং দয়া করে ব্যাখ্যা করুন কেন ...


এটি সম্ভবত বাস্তবতার সাথে কিছু করার আছে যে .. / ব্যবহার করে আপেক্ষিক পাথের পরিবর্তে পথ ঘোষণা করার জন্য নিখুঁত পাথ ব্যবহার করুন। একটি ভাল
অভ্যাস

আমি সর্বোত্তম অনুশীলনের সাথে একমত কারণ আমি লক্ষ্য এবং গন্তব্য উভয়ের জন্য সর্বদা নিরঙ্কুশ পাথ ব্যবহার করেছি। তবে, ম্যান পেজগুলি জানিয়েছে যে আপেক্ষিক পাথ উভয়ের জন্যই ব্যবহার করা যেতে পারে ...
jibsales

উত্তর:


13

যেটি কাজ করে না তার জন্য, আমরা যদি ls -lফলাফলটি দেখি তবে আমরা নিম্নলিখিতটি পাই:

[sparticvs@sparta test]$ ls -l build/
total 0
lrwxrwxrwx. 1 sparticvs sparticvs 6 Dec 17 16:08 client -> client

এখন এখানে কী চলছে তা বোঝার জন্য। আপনি যে আদেশটি বলেছেন সেটির দিকে নজর দিন:

ln -s client build/client

ম্যান পেজ অনুসারে, এই ফর্ম্যাটটির জন্য দুটি সম্ভাব্য ম্যাচ রয়েছে

SYNOPSIS
       ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
       ln [OPTION]... TARGET... DIRECTORY     (3rd form)

এটি প্রথম ফর্মের সাথে মিলবে (প্রথম থেকেই)। এখন, "টার্গেটের নাম" বা clientআপনার ক্ষেত্রে, lnনির্বিচারে স্ট্রিং হতে পারে (সম্পূর্ণ ম্যানুয়াল অনুসারে )। তাদের এখনই কোনও কিছুর সমাধান করতে হবে না, তবে ভবিষ্যতে কোনও কিছুর সমাধান করতে পারে। আপনার অনুরোধের মাধ্যমে আপনি যা তৈরি করছেন তা হ'ল "ড্যাংলিং সিমলিংক" এবং সিস্টেম আপনাকে এগুলি তৈরি করা থেকে বিরত রাখে না।

এখন আপনার দ্বিতীয় অনুরোধটিকে ln -s ../client build/client"আপেক্ষিক সিমিলিংক" বলা হয় (যেমন আপনি নিজের পোস্টে উল্লেখ করেছেন)। দ্বিতীয় ধরণের রয়েছে এবং এটি হ'ল "পরম সিমিলিং" যা কল করে ডাকা হবে ln -s /home/user/client build/client

এই না একটি বাগ। ম্যানুয়াল অনুসারে এতে বলা হয়েছে:

বর্তমান ডিরেক্টরি থেকে পৃথক স্থানে সম্পর্কিত আপেক্ষিক সিমিলিংক তৈরি করার সময়, সিমলিংকের রেজোলিউশন বর্তমান ডিরেক্টরি থেকে একই স্ট্রিংয়ের রেজোলিউশনের চেয়ে আলাদা হবে। অতএব, অনেক ব্যবহারকারী প্রথমে সেই জায়গায় ডিরেক্টরি পরিবর্তন করতে পছন্দ করেন যেখানে আপেক্ষিক সিমলিংক তৈরি হবে, যাতে ট্যাব-সমাপ্তি বা অন্যান্য ফাইল রেজোলিউশন একই লক্ষ্য খুঁজে পায় যে সিমলিংকে কী স্থাপন করা হবে।

- থেকে info coreutils 'ln invocation'

তাই বলা হয়, আপনি হবে টার্গেটের পারেন আপেক্ষিক বা পথটি ব্যবহার করুন।


5

এটি প্রকৃতপক্ষে উদ্দেশ্যমূলক আচরণ। থেকে ln(1)মানুষ পৃষ্ঠা:

প্রতীকী লিঙ্কগুলি নির্বিচারে পাঠ্য ধারণ করতে পারে; পরে যদি সমাধান হয়ে যায় তবে তার সম্পর্কিত ডিরেক্টরি সম্পর্কিত একটি আপেক্ষিক লিঙ্কটি ব্যাখ্যা করা হয়।

এর কারণ হিসাবে, ভাবুন যে সিমলিংকটিকে তার গন্তব্যের পরিবর্তে এর উত্সের তুলনায় ব্যাখ্যা করা হয়েছিল। পরে এটি সমাধান করার সময়, আপনার সিডব্লুডি এটি তৈরি করার সময় আপনাকে কী জানা উচিত, যা অযৌক্তিক, একমাত্র অসম্ভবকে ছেড়ে দিন।

তদুপরি, এইভাবে আপনি একটি কঙ্কাল ডিরেক্টরি কাঠামো তৈরি করার জন্য একটি ঝরঝরে এবং কমপ্যাক্ট পদ্ধতি পাবেন যা আপনি চিহ্ন গাছগুলি না ভেঙে ডিরেক্টরি ট্রিতে যে কোনও জায়গায় ফেলে দিতে পারেন।

আমি কী বলতে চাইছি তার একটি উদাহরণ দেওয়ার জন্য, আসুন আমরা বলি যে আপনি একটি প্রকল্পে কাজ করছেন এবং এর জন্য আপনার একটি সম্পূর্ণ ডিরেক্টরি কাঠামো সেট আপ করা আছে:

$ ls -1 /home/you/project
thingummies/
widgets/
wizardry/

এখন ধরুন আপনি widgets/ভিতরে একটি সিমিলিংক তৈরি করতে চেয়েছিলেন wizardry/। আপনার দুটি বিকল্প রয়েছে:

$ ln -s /home/you/project/widgets /home/you/project/wizardry

অথবা

$ ln -s ../widgets /home/you/project/wizardry

আপনি যদি /home/you/projectঅন্য কোথাও যাওয়ার চেষ্টা করেন , তবে প্রথম ফর্মটি দিয়ে তৈরি একটি সিমলিংক ভেঙে যাবে কারণ এটি সন্ধান করছে /home/you/project/widgets। দ্বিতীয় ফর্মটি সিমলিংকটিকে কার্যক্ষম রাখবে কারণ এটি ডিরেক্টরি গাছের মধ্যে যে জায়গাটি থাকতে পারে তা নির্বিশেষে এটি যে জায়গাতে রয়েছে তার ../widgets তুলনায় এটি সন্ধান করছে ।

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