আমি কীভাবে লিনাক্সে আপেক্ষিক প্রতীকী লিঙ্ক তৈরি করব?


61

আমার একটি সিএমলিংক দরকার যা এটির মধ্যে থাকা ডিরেক্টরিটির সাথে তুলনামূলক সমাধান করে such এই জাতীয় জিনিসটি তৈরি করতে কোন আদেশ ব্যবহার করা হয়?

উত্তর:


77
  1. আপনি যে ডিরেক্টরিটিতে লিঙ্কটি থাকতে চান সেটি যান
  2. কমান্ড চালান ln -s ../some/other/file linkname

আপনার যে পথটি সরবরাহ করা হয়েছে তা ফাইলের সাথে সঞ্চিত। আপনি যখন ফাইলটি অ্যাক্সেস করেন তখন সঞ্চিত পথটি ফাইলের সাথে সম্পর্কিত এবং প্রসারিত হয়। আপনি লিঙ্কটি তৈরি করার সময় আপনি কোন ডিরেক্টরিতে ছিলেন তা জানেন না।


23
না আপনি না। আপনাকে কেবল এটি নিশ্চিত করতে হবে যে আপনি নিজের বর্তমান ডিরেক্টরিটির পরিবর্তে লিংক নামের সাথে সম্পর্কিত অবস্থানটি নির্দিষ্ট করেছেন।
ইগনাসিও ওয়াজকেজ-আব্রামস

5
বুঝতে সাহায্য করার জন্য: আপনার যে পথটি সরবরাহ করা হয়েছে তা ফাইলের সাথে সঞ্চিত। আপনি যখন ফাইলটি অ্যাক্সেস করেন তখন সঞ্চিত পথটি ফাইলের সাথে সম্পর্কিত এবং প্রসারিত হয়। আপনি লিঙ্কটি তৈরি করার সময় আপনি কোন ডিরেক্টরিতে ছিলেন তা জানেন না।
মারিয়ান

2
ঠিক সমতুল্য:ln -s ../some/other/file /some/dir/linkname
sehe

1
এর পরিবর্তে আবার একটি ডিরেক্টরি ও নিচ যাচ্ছে, এছাড়াও আপনি শুধু করতে পারি না ln -s ./file linknameযেহেতু .বর্তমান ডিরেক্টরী বোঝায়।
pduersteler

1
ln -s somedir/original-dir link-nameকাজ করে না. এটি নামের সাথে একটি ডিরেক্টরি তৈরি করে link-nameযাতে একটি অবৈধ লিঙ্ক রয়েছে। কমান্ড যে কাজ করেln -sr somedir/original-dir link-name
লরেঞ্জ মেয়ার

28

জিএনইউ কোর্টিলস'এলএন (> = ৮.১6) এর সাম্প্রতিক সংস্করণগুলি --relative(বা -r) বিকল্পটিকে সমর্থন করে যার অর্থ আপনি ln -s২ টি পরম বা আপেক্ষিক (আপনার কার্যনির্বাহী ডিরেক্টরি সম্পর্কিত) পাথের সাথে কল করতে পারেন এবং এটি সঠিক আপেক্ষিক পাথটি সনাক্ত করতে পারে sylink লিখিত।


2
ধন্যবাদ। -rযখন আপনি ক্রস কম্পাইল করা হয় এবং বিল্ড হোস্ট কিন্তু লক্ষ্যে আপেক্ষিক পাথ উপর পরম পাথ প্রয়োজন বিকল্প সহায়ক।
রবার্ট ক্যালহাউন

rdfind কিছু সত্যই খারাপ symlinks উত্পাদন করতে পারে যা কেবল পরম নয়, কারণ ছাড়াই ডিরেক্টরিগুলি ব্যাকট্র্যাক করে। ln -r -s targetfile myaliasআপনাকে এটি ঠিক করতে সহায়তা করতে পারে
রে ফস

2

আপনার যা বোঝার দরকার তা মূলত হ'ল একটি সিমলিংক একটি পাঠ্য ফাইলের মতো একটি ডিরেক্টরি এন্ট্রির মতো একটি ফাইল রয়েছে। তাই যদি আপনি

echo ../poo >/file/name

তারপরেও এর সাথে বেশ মিল রয়েছে

ln -s ../poo /file/name

সিস্টেমটি আদৌ /file/../pooবিদ্যমান কিনা তা বিবেচনা করে না , এটি কেবলমাত্র টুকরো টুকরো যা সিমলিংকে রেখে দেয়। যখন কোনও কিছু সিমলিংকটি খোলার চেষ্টা করে , তখনই সিস্টেমটি এটি সমাধান করার চেষ্টা করে।

আপনি যদি ফাইলের নাম সমাপ্তি সহ শেল ব্যবহার করছেন তবে এই বৈশিষ্ট্যটি আপনাকে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি সম্পর্কিত কোনও ফাইলের নাম সম্পূর্ণ করার অনুমতি দিয়ে জিনিসগুলিকে বিভ্রান্ত করতে পারে, এমনকি যদি আপনি এটির পরে অন্য কোনও ডিরেক্টরিতে কোনও সিমলিংকের লক্ষ্য হিসাবে ব্যবহার না করেন।


এটি কিছু সিস্টেম কল দ্বারা অপব্যবহার করা হয় - আমি জানি উদাহরণস্বরূপ BSD সিস্টেমকে< কীভাবে বরাদ্দ করা মেমরির পরিবর্তনের জন্য আপনাকে একটি নির্দিষ্ট সিস্টেম ফাইলকে সিমলিংক করতে দেয় । অবশ্যই <সেই ডিরেক্টরিতে কোনও ফাইলের নাম নেই , এটি একটি খুব ছোট ফাইল-জাতীয় জিনিস তৈরির একটি সহজ উপায় যা নির্দিষ্ট প্ল্যাটফর্মের নিয়মিত পাঠ্য ফাইলের চেয়ে কিছু আকর্ষণীয় বৈশিষ্ট্যযুক্ত।
ট্রিপলি

সেই লিঙ্কটি এখন মারা গেছে। ব্যবহার করে দেখুন man.openbsd.org/OpenBSD-5.3/man5/malloc.conf.5 কিন্তু নোটিশ এছাড়াও OpenBSD এর আরো সাম্প্রতিক সংস্করণে আচরণ অনেক কম ... আনন্দময় হয়।
ট্রিপলি

0

ওএস এক্স-তে আমার জন্য আপেক্ষিক লিঙ্কগুলি জটিল ছিল

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

উভয়ই কাজ করেনি (কিছু তৈরি হয়েছিল তবে এটি ডিরেক্টরি ছিল না)। আমি নিখুঁত পাথ ব্যবহার করে কাঙ্ক্ষিত লিঙ্কটি তৈরি করেছি ।

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin

এটি একটি কার্যক্ষম সমাধান, সুতরাং কোনও মন্তব্য করার প্রয়োজন নেই। এটি পৃথক উত্তর হিসাবে থাকতে পারে।
slhck

1
আপেক্ষিক লিঙ্কগুলির সাথে আপনার প্রাথমিক চেষ্টাটি কেবল সাধারণ ভুল এবং সে কারণেই এটি কাজ করছে না। আপেক্ষিক লিঙ্কগুলি কীভাবে কাজ করে তা আপনি ভুল বুঝে গেছেন। এটি সম্পর্কে বিশেষ কৌতুকপূর্ণ কিছুই নেই (আপনি ওএস এক্স ব্যবহার করছেন এমন কি না)। আপনি লিঙ্কটি তৈরি করার সময় আপনার উত্তর ডিরেক্টরিটি চালনার বিষয়ে কথা বলার অন্য উত্তরগুলির দ্বারা বিভ্রান্ত হয়ে পড়েছেন। এটি কেবলমাত্র লিঙ্কটি সঠিকভাবে করা সহজ করার জন্য এবং কোনওভাবেই প্রয়োজন হয় না। আপনি আপনার বর্তমান দির সম্পর্কিত আপেক্ষিক পথটি সংজ্ঞায়িত করেন না, তবে লিঙ্কটির ডিরেক্টরিতে। আপনি যা ln -s Dropbox/git/codyhess/bin ~/bin
পরেছিলেন

এছাড়াও @ এসএলএইচএইচ যখন কেউ বিশেষভাবে জিজ্ঞাসা করছেন যে কী বিশ্বে আপেক্ষিক লিঙ্কগুলি তৈরি করা যায় যে একটি বক্তব্য যে আপনি নিখুঁত লিঙ্কগুলি করতে পারেন একটি "কার্যকর সমাধান" গঠন করে? এটি বিশেষত ওপিএস প্রশ্নের উত্তর দেয় না এবং এটি সমাধানের সম্পূর্ণ বিপরীত, এটি কোনও সমাধান নয়। এটি কোনও মন্তব্য বা উত্তর হওয়া উচিত নয়, এটি একটি প্রশ্ন হওয়া উচিত "আপেক্ষিক লিঙ্কগুলি কীভাবে কাজ করে (ম্যাক ব্যবহারকারীরা এটি বুঝতে পারে তাই ব্যাখ্যা করেছেন)" " আমি আশা করি এই ম্যাক ব্যবহারকারী এখন এটি যথেষ্ট ভাল ব্যাখ্যা করেছেন। :)
টিমো

@ টিমোলেহ্টো সম্ভবত আপনি মূল লেখকের (কোডি হেস) মন্তব্যটি সম্বোধন করতে চান। আমি কেবল পোস্টটি অনুলিপি করেছি।
slhck

@ এসএলএইচএইচকি, আমি এটি আপনাকে নির্দেশিত করেছিলাম, কারণ আপনি সমাধানটিকে "কার্যকর" বলে মনে করেছেন এবং আপনার মন্তব্য আমাকে ভাবতে বাধ্য করেছে যে আপনি যদি কেউ উত্তরটি "উত্তর নয়" হিসাবে পতাকাঙ্কিত করতে চান তবে আপনি রাজি হবেন এমন ব্যক্তি হবেন (এবং এটি পান পতাকাঙ্কিত গৃহীত)।
টিমো

0

আমি কেবল আরও কীভাবে আপেক্ষিক পাথ (একটি বিস্তারিত উদাহরণ সহ) ব্যবহার করে একটি সিমলিংক তৈরি করব তা আরও ব্যাখ্যা করতে চেয়েছিলাম।

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

EXAMPLE টি

যেখানে আপনি থাকেন /usr/share/nginx/html/_src/learn আপনি একটি সিমবলিক লিঙ্ক তৈরি করবে codingমধ্যে/usr/share/nginx/html

আপেক্ষিক সিমিলিংক (তত্ত্ব) তৈরি করুন:

sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

প্রকৃত আপেক্ষিক syMLink তৈরি করুন:

sudo ln -s ./_src/learn/coding ../../coding

আরও তথ্য (একই উদাহরণ)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.