পিডাব্লুডির সাথে সম্পর্কিত একটি পাথের সাথে ln -s


26

আমি প্রতীকী লিঙ্কগুলির একটি গুচ্ছ তৈরি করার চেষ্টা করছি, তবে কেন এটি কাজ করছে তা আমি বুঝতে পারি না

ln -s /Users/niels/something/foo ~/bin/foo_link

এই যখন

cd /Users/niels/something
ln -s foo ~/bin/foo_link

এটি না.

আমি বিশ্বাস করি foo_linkএর /Users/niels/binপরিবর্তে ফু-র সাথে যুক্ত করার সাথে এর কিছু করার আছে/Users/niels/something

সুতরাং প্রশ্নটি হল, আমি কীভাবে একটি প্রতীকী লিঙ্ক তৈরি করব যা প্রকৃতপক্ষে এটি টাইপ না করে একটি পরম পথে নির্দেশ করে?

রেফারেন্সের জন্য, আমি ম্যাক ওএস এক্স 10.9 এবং জেডএস ব্যবহার করছি।

উত্তর:


33

সম্পূর্ণ ডিরেক্টরি স্ট্রিং টাইপ না করে বর্তমান ডিরেক্টরিটিকে পরম পথ হিসাবে লিঙ্ক করার সবচেয়ে সহজ উপায়

ln -s "$(pwd)/foo" ~/bin/foo_link

target(প্রথম) জন্য যুক্তি ln -sকমান্ড সিম্বলিক লিঙ্ক এর অবস্থান, না আপনার বর্তমান ডিরেক্টরির আপেক্ষিক কাজ করে। এটা জানা যে, মূলত সৃষ্টি সিমবলিক লিঙ্ক (দ্বিতীয় যুক্তি) কেবল ঝুলিতে সাহায্য করে টেক্সট আপনাকে প্রথমে যুক্তি জন্য প্রদান।

অতএব, আপনি যদি নিম্নলিখিতগুলি করেন:

cd some_directory
ln -s foo foo_link

এবং তারপরে সেই লিঙ্কটি সরান move

mv foo_link ../some_other_directory
ls -l ../some_other_directory

আপনি দেখতে পাবেন যে এটি যে ডিরেক্টরিতে অবস্থান করছে foo_link তার দিকে ইঙ্গিত করার চেষ্টা করে fooThis এটি আপেক্ষিক পাথগুলিকে নির্দেশ করে প্রতীকী লিঙ্কগুলির সাথেও কাজ করে। আপনি যদি নিম্নলিখিতটি করেন:

ln -s ../foo yet_another_link

এবং তারপরে yet_another_linkঅন্য ডিরেক্টরিতে যান এবং এটি কোথায় নির্দেশ করে তা পরীক্ষা করুন, আপনি দেখতে পাবেন যে এটি সর্বদা নির্দেশ করে ../foo। এটি উদ্দেশ্যমূলক আচরণ, যেহেতু বহুবার প্রতীকী লিঙ্কগুলি কোনও ডিরেক্টরি কাঠামোর অংশ হতে পারে যা বিভিন্ন পরম পথে থাকতে পারে।

আপনার ক্ষেত্রে, আপনি টাইপ করে লিঙ্কটি তৈরি করার সময়

ln -s foo ~/bin/foo_link

foo_linkfooএটির অবস্থানের তুলনায় কেবল একটি লিঙ্ক ধারণ করে । ফেলে $(pwd)লক্ষ্য যুক্তি নাম সামনে কেবল সাম্প্রতিক কাজ করা এর সুনির্দিষ্ট পাথ যোগ করে, যাতে লিংক একটি পরম লক্ষ্য সঙ্গে তৈরি করা হয়।


"... এটি ধারণা করতে সহায়তা করে যে তৈরি করা সিমলিংকটি কেবল পাঠ্য ধারণ করে ...." এটি কি আক্ষরিক সত্য নয়?
ওয়াইল্ডকার্ড

1
এটাই. সম্ভবত আমি কল্পনা "জেনে" বা "বুঝতে" পরিবর্তন করতে পারে।
অ্যাকিলিয়া

আমি নিজেই আবার বিভ্রান্ত হয়ে পড়েছি (আবার)। মনে হয় আপনি যেখানে "টার্গেট" বলতে চাইছেন তার অর্থ "উত্স"। source_file(প্রথম) যুক্তি যেখানে লিংক পয়েন্ট, যা ধারণকৃত কি কমান্ড এন্টার হয়। target_fileকি আপনার লেখা যদি না একটি ডিরেক্টরি, যে ক্ষেত্রে লিংক নামের basename হিসাবে একই হয় (দ্বিতীয়) যুক্তি লিংক নাম হয়ে source_fileকিন্তু ডিরেক্টরির মধ্যে স্থাপন করা target_file
চার্লি গরিচানাজ

শস্য ঠিক আছে, ̶ ̶t̶h̶e̶r̶e̶'̶s̶ ভুল মধ্যে The ̶a̶n̶s̶w̶e̶r̶.̶ পাগল কিভাবে এটি ̶d̶i̶d̶n̶'̶t̶ পেতে ধরা ̶s̶o̶o̶n̶e̶r̶.̶ ̶F̶i̶x̶i̶n̶g̶.̶ না, উত্তরটি সঠিক ছিল। দ্বারা lnর manpage, targetপ্রথম আর্গুমেন্ট (যেখানে লিংক পয়েন্ট থেকে ) যেহেতু দ্বিতীয় যুক্তি কেবল হিসেবে উল্লেখ করা হয়েছে link( sourceউল্লিখিত হয় না)।
অচিলিয়াস

3
লিনাক্সে (gnu ln) ম্যান পৃষ্ঠাটি প্রথম যুক্তি targetএবং দ্বিতীয়টিকে link( man7.org/linux/man-pages/man1/ln.1.html ) বলে। তবে বিএসডি-তে (ওএস এক্স সহ) প্রথম sourceএবং দ্বিতীয়টি target( freebsd.org/cgi/man.cgi?ln ) বলা হয়। বেশ বিভ্রান্তিকর।
ক্রিস্টোপার

5

-r( --relative) পতাকা ব্যবহার করে এটি কাজ করবে:

ln -sr foo ~/bin/foo_link

4
সতর্ক থাকুন যে -rএকটি GNUism, অর্থাত্ অ POSIX তাই হবে মান OS X এর যেমন ওপি ক্ষেত্রে কাজ না lnকমান্ড বাসদ ভিত্তিক হয়।
jlliagre

2

কিছু টাইপিং সংরক্ষণ করতে, আপনি এটি করতে পারেন

ln -s "$PWD"/foo ~/bin/foo_link

@ ফ্রেডি, এটি শেলের উপর নির্ভর করে। মাছ বা জেডশিতে এটি ঠিক থাকবে। বোর্ন মত ব্যাশ এবং $ IFS ডিফল্ট মান সহ শেল, SPC প্রকৃতপক্ষে একটি সমস্যা TAB এর, এন এল এবং সমস্ত globbing অক্ষর (অন্তত হতে ইন হবে, কিন্তু *, ?এবং [...])।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস হ্যাঁ, আপনি ঠিক বলেছেন এবং প্রশ্নটি ট্যাগ করা হয়েছে bash, তাই এটিকে উদ্ধৃত করা একটি ভাল ধারণা। আমার খারাপ, আমি আরও নির্দিষ্ট করা উচিত ছিল।
ফ্রেডি

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