প্রতীকী লিঙ্কগুলির অনেকগুলি স্তর


100

আমি এই ফাইল গঠনটি তৈরি করেছি:

test/src
test/firefox

আমি যখন এই আদেশটি চালাচ্ছি:

ln -s test/src test/firefox

আমি প্রতীকী একটি লিঙ্কটি test/firefox/srcনির্দেশ করে তৈরি করা আশা করব test/src, তবে পরিবর্তে আমি এই ত্রুটিটি পেয়েছি:

-bash: cd: src: Too many levels of symbolic links
  • আমি কি ভুল করছি?
  • আপনি কি কোনও ফোল্ডারের একটি প্রতীকী লিঙ্ক তৈরি করতে পারবেন না যা সেই ফোল্ডারের একটি ভাইবোনতে সঞ্চিত আছে?
  • এর মূল কথা কি?

আমি নিশ্চিত নই যে আপনি যা করেছেন আমি তা অনুসরণ করি। দয়া করে ls -ld test test/*এই ফাইলগুলি তৈরি করতে আপনি যে কমান্ডগুলি চালিয়েছেন তার আউটপুট , বা সঠিক ক্রম পোস্ট করুন ।
গিলস

এমকেডির পরীক্ষা; এমকেডির পরীক্ষা / এসসিআর; এমকেডির পরীক্ষা / ফায়ারফক্স; ln -s পরীক্ষা /
এসসিআর

এই কমান্ডগুলির সাহায্যে cd test/firefox/srcত্রুটিটি প্রদর্শিত হবে cd: no such file or directory: test/firefox/srcকারণ test/firefox/srcএটি একটি জটলা প্রতীকী লিঙ্ক। আপনি কি cdঅন্য কিছু প্রতীকী লিঙ্ক নামে চালাচ্ছেন src?
গিলস

আমি নিশ্চিত যে আপনি ln -sএবং যা cdআমাদের জানান না সেগুলির মধ্যে আপনি কিছু করেছেন। ধরে নিই যে testআপনার বর্তমান ডিরেক্টরিতে কেবল একটি উপ-ডিরেক্টরি রয়েছে, একটি cd src(বা যা কিছু আপনি চালিয়েছিলেন) একটি ত্রুটি ছুঁড়ে ফেলতে হবে। আপনি কি কিছু test/firefox? োকালেন ?
দুবু

5
এবং @ গিলিস যেমন একটি ইঙ্গিত দিয়েছিল, সেই লিঙ্কটি আপনি যা ভাবেন তা করবে না। আপেক্ষিক টার্গেট সহ সিম্বলিক লিঙ্কগুলি সর্বদা সিমলিংক ডিরেক্টরি সম্পর্কিত , আপনি যে লিঙ্কটি তৈরি করেছেন সেখান থেকে নয় । সুতরাং, একটি ডিরেক্টরির মধ্যে হচ্ছে /some/path, একটি ln -s test/src test/firefoxএকটি সিমবলিক লিঙ্ক থেকে ইশারা তৈরি করবে /some/path/test/firefox/srcকরার /some/path/test/firefox/test/src, না করার /some/path/test/src
দুবু

উত্তর:


32

পৃষ্ঠতলে, আপনি যা পরামর্শ দিয়েছিলেন তা আমার পক্ষে কাজ করে।

উদাহরণ

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

প্রতীকী লিঙ্কটি তৈরি করুন:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

এটি দ্বিতীয়বার চালানো সাধারণত এটি তৈরি করে:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

সুতরাং আপনার সম্ভবত এখানে অন্য কিছু চলছে। আমি সন্দেহ করব যে আপনার কাছে একটি বিজ্ঞপ্তি রেফারেন্স রয়েছে যেখানে কোনও লিঙ্কটি নিজের দিকে ফিরে ইশারা করছে।

আপনি এটি findএকটি সামান্য আউট ব্যবহার করতে পারেন :

$ cd /suspected/directory
$ find -L ./ -mindepth 15

2
find -L ./ -mindepth 15অপরাধী প্রকাশ করেছেন
ব্যবহারকারী 7610

167

দুবু যেমন একটি মন্তব্যে উল্লেখ করেছেন, বিষয়টি আপনার আপেক্ষিক পথে রয়েছে। আমার এনজিএনএক্স কনফিগারেশনটি থেকে অন্যদিকে অনুরূপভাবে একই সমস্যা /usr/local/etc/nginxহয়েছে /etc/nginx। আপনি যদি এইভাবে আপনার সিমলিংক তৈরি করেন:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

আপনি প্রকৃতপক্ষে লিঙ্কটি / etc / nginx -> / etc / nginx বানাবেন, কারণ উত্সের পথটি লিঙ্কটির পথের সাথে সম্পর্কিত। সমাধানটি নিখুঁত পাথ ব্যবহার করার মতোই সহজ:

ln -s /usr/local/etc/nginx /etc/nginx

57
এই উত্তরটি অন্যটির চেয়ে পরিষ্কার ছিল। "পরম পাথ ব্যবহার করুন।"
ওলফটোন

1
আমি নিশ্চিত করতে পারি যে এটি উইন্ডোজ ব্যবহার করে আমার জন্য কাজ করেছিল cygwin। ধন্যবাদ!
ডিমিগুয়েল

আমার প্রায়শই যুক্তি সঠিক হওয়াতে সমস্যা হয়। ওএসএক্স এবং জিএনইউ লিনাক্সে এগুলি বিপরীত হয়েছে যা আমাকে আরও বিভ্রান্ত করে।
ড্যানিয়েল ডাব্লু।

আমি এখনও এই কাজ বিশ্বাস করতে পারি না।
পিএনডিএ

5
আপনি আপেক্ষিক লিঙ্কগুলি ব্যবহার করতে পারেন , তবে সেগুলি প্রতীকী লিঙ্কটি যেখানে রয়েছে তার ভিত্তিতে থাকা উচিত । অন্য কথায়: প্রথম যুক্তিটি সেই একইcd হওয়া উচিত যা আপনি পরে লিখবেন যদি আপনি সেই ডিরেক্টরি থেকে লক্ষ্যবস্ত ডিরেক্টরিতে যেতে চান যেখানে প্রতীকী লিঙ্কের ফাইল রয়েছে।
টোটেমেডলি

9

সিমলিংকগুলি লিঙ্কের মূল ডিরেক্টরি সম্পর্কিত, lnপ্রক্রিয়াটির বর্তমান ডিরেক্টরি নয় ।

যখন তুমি কর:

cd /top/dir
ln -s test/src test/firefox

( test/firefoxডিরেক্টরিটি কোথায় ), আপনি একটি test/firefox/srcসিমলিংক তৈরি করছেন যার লক্ষ্য test/src

যে test/srcআপেক্ষিক test/firefoxডিরেক্টরি, যাতে করার জন্য একটি সিমবলিক লিঙ্ক এর /top/dir/test/firefox/test/src

আপনি যদি এই সিমিলিংকে একটি লিঙ্ক হতে /top/dir/test/srcচান তবে আপনাকে লিখতে হবে:

ln -s ../src test/firefox/

অথবা

ln -s /top/dir/test/src test/firefox/

যদিও ডিরেক্টরিগুলি নতুন নামকরণ করা হয় বা ফাইল-সিস্টেম অন্য কোথাও মাউন্ট করা হয় তখন তারা সহজেই নিরঙ্কুশ পাথের প্রতিলিপি তৈরি করা খারাপ ধারণা।

জিএনইউ দিয়ে lnআপনি -rনিজেই গণনাটি তৈরি করতে তার বিকল্পটি ব্যবহার করতে পারেন :

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

5

আপেক্ষিক পাথের পরিবর্তে পরম পথটি ব্যবহার করুন, তবে এটি কার্যকর হবে।

উদাহরণ:

ln -s /home/user/test/src /home/user/test/firefox

0

উত্তরটি হল পরম পথ ব্যবহার করা। তবে বর্তমান ডিরেক্টরিতে থাকা কোনও কিছুর জন্য পুরো পথটি টাইপ করা বিরক্তিকর হতে পারে। এটি এড়ানোর জন্য আপনি পিডব্লিউডির কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন। আপনার লক্ষ্য যদি বর্তমান ডিরেক্টরিতে থাকে:

ln -s "$(pwd)"/target abs/path/to/link 

যদি আপনার লিঙ্কটি বর্তমান ডিরেক্টরিতে থাকা উচিত:

ln -s /abs/path/to/target "$(pwd)"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.