আমার প্রতীকী লিঙ্কটি কেন কাজ করে না?


24

আমি প্রতীকী লিঙ্কগুলি আরও ভালভাবে বোঝার চেষ্টা করছি ... এবং খুব বেশি ভাগ্য নেই। ব্যবহারকারীর নাম / হোস্ট পরিবর্তিত এটি আমার আসল শেল আউটপুট:

username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt

আমি ভেবেছিলাম যে একটি প্রতীকী লিঙ্কটি স্বচ্ছতার সাথে পরিচালিত হওয়ার কথা ছিল, সেই অর্থে যে আপনি যে ফাইলটি সরাসরি ফাইলটি অ্যাক্সেস করছেন সেটিকে নির্দেশ করে (কোর্সের ক্ষেত্রে rmযেখানে লিঙ্কটি সরানো হয়েছে কেবল তার ক্ষেত্রে ব্যতীত) )।


কিভাবে আপনার ডিস্ক ফর্ম্যাট করা হয়? আপনি কোন ফাইল সিস্টেম ব্যবহার করছেন? (ফ্যাট সিমলিংকগুলিকে সমর্থন করে না তবে আপনি যদি এফএটি ফাইল সিস্টেম তৈরি করার চেষ্টা করেন তবে এটির একটি ত্রুটি হওয়া উচিত))
নিকোল হ্যামিল্টন

@ নিকোলহ্যামিলটন - এটি এক্সট 4 (মতে df -T) - উপরের ফলাফলটিও কি আপনার কাছে আজব?
orokusaki

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

উত্তর:


50

সিমলিংকগুলি সম্পূর্ণ পাথ পছন্দ করে বা লিঙ্কের সাথে সম্পর্কিত হয়, অন্যথায় তারা প্রায়শই file-1.txtস্থানীয়ভাবে (অদ্ভুতভাবে যথেষ্ট) সন্ধান করতে পারে ।

নেভিগেট করুন properএবং চালনা করুন ls -lএবং আপনি দেখতে পাচ্ছেন যে সিম্যলিংকটি actual/file-1.txtকখন এটি হওয়া উচিত ../actual/file-1.txt

সুতরাং আপনার কাছে দুটি বিকল্প রয়েছে:

  1. পুরো পথ দাও

    ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper
  2. আপনি যে ফোল্ডারে লিংকটি রাখতে চান সেখান থেকে নেভিগেট করুন এবং সেখান থেকে লিঙ্ক করুন

    cd proper
    ln -s ../actual/file-1.txt ../actual/file-2.txt ./
    

সম্পাদনা করুন : টাইপিং সংরক্ষণ করার জন্য একটি ইঙ্গিত।

আপনি ঠিক করতে পারে ln -s ~/actual/file-{1,2}.txt ~/proper

কোঁকড়া ধনুর্বন্ধনী মধ্যে আইটেম প্রতিস্থাপন এবং একে অপরের পরে স্থাপন করা হয়, কমান্ড তৈরি

ln -s ~/actual/file-1.txt ~/actual/file-2.txt ~/proper

যা উভয় ফাইলকে লক্ষ্য ডিরেক্টরিতে লিঙ্ক করে। শেলটিতে আরও পড়ার সাথে সাথে কিছু বড় টাইপিং সংরক্ষণ করে।


2
ধন্যবাদ - আপনার উত্তরটি পড়ার আগে আমি আমার চুলগুলি বাইরে টানতে চলেছিলাম।
orokusaki

1
এটা নিশ্চিত কখনও কখনও বিভ্রান্তিকর! লিনাক্স খুব আক্ষরিক হতে থাকে, তাই যদি আপনি কিছু করেন বলে থাকেন - এটি হবে। সিমলিংকিং ফোল্ডারগুলিকে সেভাবে সতর্কতা অবলম্বন করুন, আমি এর আগে দু'একটি ওভাররাইট করেছি (কেবল পিছনে স্ল্যাশ ছাড়াই নামটি উল্লেখ করুন)। এছাড়াও, rm -rf *কোনও সিমলিঙ্কযুক্ত ফোল্ডারে যাবেন না - আপনি যে ফোল্ডারের সাথে লিঙ্ক করেছেন সেটি মুছতে পারেন। শুধু rm syMLinkname করুন। আমি কয়েকটি বিষয়ে ভুল করেছি: ডি
নারডওয়ালার

3

সমস্যাটি আপেক্ষিক পাথের ব্যবহার। আপনি যদি সম্পূর্ণ লিখিত পাথ দিয়ে আপনার লিঙ্ক তৈরি নির্দিষ্ট করে থাকেন তবে এটি কাজ করে।

$ ln -s ~ / প্রকৃত / file1.txt ~ / প্রকৃত / file2.txt ~ / যথাযথ /

$ বিড়াল সঠিক / file1.txt

ফাইল 1

$

আপনার উদাহরণটি আপনার properনির্দেশিত পিতা-মাতা উভয়ের পরিবর্তে বর্তমান ডিরেক্টরিতে প্রকৃত নামের একটি উপ-ডিরেক্টরিের সন্ধানে লিঙ্কগুলি তৈরি করে ।


1

প্রতীকী লিঙ্কগুলি জটিল হতে পারে। সংক্ষেপে, একটি প্রতীকী লিঙ্কটি এমন একটি ফাইল যা অন্য কোনও ফাইলের জন্য ফাইলের নাম / পথের নাম (এবং এটি বিশেষ চিকিত্সার জন্য পতাকাঙ্কিত)। যদি লিঙ্ক ফাইলে পথের নামটি ' /' দিয়ে শুরু হয় , তবে এটি একেবারে সঠিক নাম হিসাবে গণ্য করা হবে এবং জিনিসগুলি মোটামুটি সোজা। যদি এটি স্ল্যাশ দিয়ে শুরু না হয়, তবে এটি লিঙ্কটি অবস্থিত ডিরেক্টরিটির সাথে সম্পর্কিত - এটি একটি আপেক্ষিক পথেরূপ হিসাবে বিবেচনা করা হবে। (নামটিতে স্ল্যাশ রয়েছে কিনা তা এই সত্য)) সুতরাং, আপনি proper/file–1.txt" actual/file–1.txt" এর লিঙ্ক হিসাবে তৈরি করেছেন এবং আপনি যখন এটি অ্যাক্সেস করার চেষ্টা করেছিলেন তখন সিস্টেমটি অ্যাক্সেস করার চেষ্টা করেছিল proper/actual/file–1.txt। আপনার বলা উচিত ছিল

ln s  ../actual/file1.txt  ../actual/file2.txt  proper

যাইহোক, আপনার touchকমান্ডগুলির দরকার নেই ।  echo "file 1" > actual/file–1.txtতৈরি করতে যথেষ্ট actual/file–1.txt


0

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

আপনার পিতামাতার ডিরেক্টরিগুলি নিজেরাই সিলেকড হয়েছে কিনা তা দেখতে cd ..এবং ls -lবারবার ব্যবহার করুন ।

আপনার যদি cdমূল টার্গেট ডিরেক্টরিতে একটি সিমলিংক তৈরি করতে এবং সেখানে নতুন সিমলিংক তৈরি করতে হয় তবে আপেক্ষিক পথগুলি সঠিক।

বা এটিকে অন্য কোনও উপায়ে বলতে গেলে: আপেক্ষিক পথটি মূল থেকে শুরু করে লক্ষ্য পর্যন্ত। যদি মূলটি পরবর্তী সময়ে সিমিলিং করা থাকে তবে তা ঠিক। তবে আপনি নিজেই কোনওরকম সিলেকড থাকা ডিরেক্টরিতে নতুন অরিজিন লিঙ্ক_নাম স্থাপন করতে সমস্যা দেখা দিতে পারেন।


1
" cd ..এবং ls -lবারবার" পরিবর্তে আপনি ব্যবহার করতে পারেন namei -mox $PWD। পাথের সাথে সিমলিংক রয়েছে কিনা তা খুঁজে বের করার আরেকটি কার্যকর উপায় হ'ল ব্যবহার করা pwd -Pযা আপনাকে বর্তমান ডিরেক্টরিতে একটি পথ দেয় যা কোনও সিমলিংক ধারণ করে না (সুতরাং যদি pwdএবং pwd -Pআলাদা আউটপুট দেয় তবে আপনি জানেন যে পথের পাশাপাশি কোথাও একটি সিমিলিংক রয়েছে you )।
আনসা 211

0

আপনি যখন এমন কোনও ফাইলের লিঙ্ক তৈরি করার চেষ্টা করবেন যা অস্তিত্বহীন (বা আপনি পথটি ভুলভাবে দিয়েছেন) ln -s ত্রুটি ছুঁড়ে না ফেলে। এটি একটি লিঙ্ক তৈরি করে তবে আপনি যখন সেই লিঙ্কটিতে 'বিড়াল' চেষ্টা করেন তখন এটি বলে যে কোনও ফাইল পাওয়া যায় নি। এমনকি যখন আপনি এটি এলএস ব্যবহার করে দেখতে পাবেন। এই ক্ষেত্রে সর্বদা আপনার ফাইলের পথটি ডাবল-চেক করুন।

ubuntu@ip-172-31-80-155:~/lab5$ ln -s etc/ufw/ufw.conf link1
ubuntu@ip-172-31-80-155:~/lab5$ ls -al
total 5360
drwxrwxr-x 2 ubuntu ubuntu    4096 Mar  9 18:56 .
drwxr-xr-x 7 ubuntu ubuntu    4096 Mar  9 18:42 ..
-rwxr--r-- 1 ubuntu ubuntu 5478400 Mar  9 18:32 backup.tar
lrwxrwxrwx 1 ubuntu ubuntu      16 Mar  9 18:56 link1 -> etc/ufw/ufw.conf
ubuntu@ip-172-31-80-155:~/lab5$ cat link1
cat: link1: No such file or directory

কারণ ফাইল ইত্যাদি নেই / ufw / ufw.conf। সঠিক পথটি হ'ল /etc/ufw/ufw.conf

ubuntu@ip-172-31-80-155:~/lab5$ ln -s /etc/ufw/ufw.conf link2
ubuntu@ip-172-31-80-155:~/lab5$ ls -l
total 5352
-rwxr--r-- 1 ubuntu ubuntu 5478400 Mar  9 18:32 backup.tar
lrwxrwxrwx 1 ubuntu ubuntu      16 Mar  9 18:56 link1 -> etc/ufw/ufw.conf
lrwxrwxrwx 1 ubuntu ubuntu      17 Mar  9 19:00 link2 -> /etc/ufw/ufw.conf
ubuntu@ip-172-31-80-155:~/lab5$ cat link2
# /etc/ufw/ufw.conf
#

# Set to yes to start on boot. If setting this remotely, be sure to add a rule
# to allow your remote connection before starting ufw. Eg: 'ufw allow 22/tcp'
ENABLED=no

# Please use the 'ufw' command to set the loglevel. Eg: 'ufw logging medium'.
# See 'man ufw' for details.
LOGLEVEL=low

ইতিমধ্যে একটি আরও ভাল উত্তর আছে এবং প্রথম অংশটি, ln -s"কখনও কখনও" লক্ষ্যটির অস্তিত্বের জন্য যাচাই করে না এটি ঠিক ভুল।
রালফ্রেডল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.