ডিরেক্টরিগুলির জন্য কেন হার্ড লিঙ্কগুলি অনুমোদিত নয়?


129

আমি উবুন্টু 12.04 ব্যবহার করছি। আমি যখন কোনও ডিরেক্টরিতে একটি হার্ড লিঙ্ক তৈরি করার চেষ্টা করি তখন এটি ব্যর্থ হয়। আমি ফাইল সিস্টেমের সীমানার ভিতরে ফাইলগুলির জন্য শক্ত লিঙ্কগুলি তৈরি করতে পারি। আমরা ফাইল সিস্টেমের বাইরে ফাইলগুলির জন্য হার্ডলিঙ্ক তৈরি করতে না পারার কারণটি আমি জানি।

আমি এই আদেশগুলি চেষ্টা করেছিলাম:

$ ln /Some/Direcoty /home/nischay/Hard-Directory
hard link not allowed for directory
$ sudo ln /Some/Direcoty /home/nischay/Hard-Directory
[sudo] password for nischay: 
hard link not allowed for directory

আমি কেবল এর পেছনের কারণ জানতে চাই। এটি কি সমস্ত জিএনইউ / লিনাক্স ডিস্ট্রোস এবং ইউনিক্স ফ্লেভারগুলি (বিএসডি, সোলারিস, এইচপি-ইউএক্স, আইবিএম এআইএক্স) বা কেবল উবুন্টু বা লিনাক্সের ক্ষেত্রে একই?



2
চেষ্টা করুন ln -F <src> <dst>এবং এটি কার্যকর হতে পারে । অবশ্যই এটি ইউনিক্সের পুরানো সংস্করণগুলিতে সুপারসুজারের জন্য কাজ করত। কেউ কি মনে করতে পারে যে এটি ইউসিবি বা সিস্টেম ভি ছিল? হ্যাঁ, খারাপ জিনিসগুলি ঘটতে পারে, তবে সাধারণত হয় না। আমার স্মরণ হিসাবে, rmdirকোনও হার্ড লিঙ্কটি অতীতে মুছে ফেলা চালাবেন না জানতেন। তবে, ব্যবহারকারীরা বিভ্রান্ত হতে পারে এবং ভুলক্রমে জিনিসগুলি মুছতে পারে।
স্টিভ পিচারস

@ স্টিভ পিচারস কীভাবে rmdirএকটি বিশেষ উপায়ে হার্ড লিঙ্কগুলি পরিচালনা করতে পারেন ? একটি হার্ড লিঙ্কটি কেবল একটি সাধারণ লিঙ্ক - তবে একটি অতিরিক্ত লিঙ্ক। অতিরিক্ত রেকর্ডিং ছাড়া অস্বাভাবিক অতিরিক্ত লিঙ্কগুলি বিদ্যমান কিনা তা খুঁজে পাওয়াও সহজ নয়।
ভোলকার সিগেল

1
প্রতিটি নোড এটিতে চিহ্নিত হার্ড লিঙ্কগুলির সংখ্যা সঞ্চয় করে: বাকী লিঙ্কগুলি না থাকলে কেবলমাত্র সামগ্রীগুলি প্রকাশিত হয়। সুতরাং rmdirডিরেক্টরিটি অন্য স্থান থেকে লিঙ্ক আছে কিনা তা বলতে পারেন। পুনরাবৃত্তি অপসারণ,, rm -rঅবশ্যই যত্ন সহকারে কোডিং করতে হবে, এটি নিশ্চিত হওয়ার জন্য যে "অনুমতি অস্বীকার" এর মতো ত্রুটি থাকা উচিত এমনকি এটি সঠিকভাবে কাজ করবে। বিটিডাব্লু, ইউসিবি = বিএসডি, দোহ!
স্টিভ পিচারস

2
আমি ln -Fডিরেক্টরিতে কাজ করেছি এবং এটি কাজ করি। তবে ফাইল সিস্টেমটি দূষিত হওয়ার ভয়ে আপনি ডিরেক্টরিটি মুছে ফেলার সাহস করবেন না।
এডওয়ার্ড ফালক

উত্তর:


159

ডিরেক্টরি হার্ডলিঙ্কগুলি একাধিক উপায়ে ফাইল সিস্টেমটি ভেঙে দেয়

তারা আপনাকে লুপ তৈরি করতে দেয়

ডিরেক্টরিতে একটি হার্ড লিঙ্ক নিজের পিতামাতার সাথে লিঙ্ক করতে পারে, যা একটি ফাইল সিস্টেম লুপ তৈরি করে। উদাহরণস্বরূপ, এই কমান্ডগুলি পিছনের লিঙ্কটি দিয়ে একটি লুপ তৈরি করতে পারে l:

mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l

ডিরেক্টরি লুপ সহ একটি ফাইল সিস্টেমের অসীম গভীরতা রয়েছে:

cd /tmp/a/b/l/b/l/b/l/b/l/b

এই জাতীয় ডিরেক্টরি কাঠামোকে অতিক্রম করার সময় একটি অসীম লুপ এড়ানো কিছুটা কঠিন (যদিও উদাহরণস্বরূপ পসিক্স findএটি এড়ানো প্রয়োজন )।

এই জাতীয় শক্ত লিঙ্কযুক্ত একটি ফাইল সিস্টেম এখন আর গাছ নয়, কারণ কোনও গাছের সংজ্ঞা অনুসারে লুপ থাকা উচিত নয়।

তারা প্যারেন্ট ডিরেক্টরিগুলির দ্ব্যর্থহীনতা ভঙ্গ করে

একটি ফাইল সিস্টেম লুপের সাথে একাধিক প্যারেন্ট ডিরেক্টরি উপস্থিত রয়েছে:

cd /tmp/a/b
cd /tmp/a/b/l/b

প্রথম ক্ষেত্রে, /tmp/aএর পিতামাতার ডিরেক্টরি /tmp/a/b
দ্বিতীয় ক্ষেত্রে, /tmp/a/b/lএর পিতামাতার ডিরেক্টরিটি /tmp/a/b/l/b, যা একই /tmp/a/b
সুতরাং এটির দুটি অভিভাবক ডিরেক্টরি রয়েছে।

তারা ফাইলগুলি বহুগুণ করে

ফাইলগুলি চিহ্নগুলি সমাধান করার পরে, পাথ দ্বারা চিহ্নিত করা হয়। সুতরাং

/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt

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

একটি ডিরেক্টরি হার্ডলিঙ্ক একটি শিশু ডিরেক্টরি, বা কোনও গভীরতার পিতা বা মাতাও নয় এমন একটি ডিরেক্টরিতেও নির্দেশ করতে পারে। এই ক্ষেত্রে, লিঙ্কের সন্তান এমন একটি ফাইল দুটি ফাইলের সাথে প্রতিলিপি করা হবে, দুটি পাথ দ্বারা চিহ্নিত করা হবে।

আপনার উদাহরণ

$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar

ডিরেক্টরিগুলিতে নরম লিঙ্কগুলি তখন কীভাবে কাজ করতে পারে?

এমন একটি পথ যা সফ্টলিংক এবং এমনকি নরম লিঙ্কযুক্ত ডিরেক্টরি লুপ ধারণ করতে পারে প্রায়ই একটি ফাইল সনাক্ত এবং খোলার জন্য ব্যবহৃত হয়। এটি সাধারণ, রৈখিক পথ হিসাবে ব্যবহার করা যেতে পারে।

তবে অন্যান্য পরিস্থিতিতেও রয়েছে, যখন পাথগুলি ফাইলগুলির সাথে তুলনা করার জন্য ব্যবহৃত হয়। এই ক্ষেত্রে, পাথের প্রতীকী লিঙ্কগুলি প্রথমে সমাধান করা যেতে পারে, এটিকে ন্যূনতম রূপান্তরিত করা যায় এবং সাধারণত একটি নীতিগত পথ তৈরির উপস্থাপনায় সম্মত হয় :

এটি সম্ভব, কারণ নরম লিঙ্কগুলি লিঙ্ক ছাড়াই সমস্ত পথে প্রসারিত হতে পারে। কোনও পথে সমস্ত নরম লিঙ্কগুলি সহ এটি করার পরে, বাকী পথটি একটি গাছের অংশ, যেখানে কোনও পথ সর্বদা স্পষ্ট থাকে না।

কমান্ডটি readlinkতার আধ্যাত্মিক পাথের কোনও পথকে সমাধান করতে পারে:

$ readlink -f /some/symlinked/path

সফট লিঙ্কগুলি ফাইল সিস্টেমের ব্যবহার থেকে আলাদা

একটি সফট লিঙ্ক সমস্ত সমস্যার কারণ হতে পারে না কারণ এটি ফাইল সিস্টেমের অভ্যন্তরের লিঙ্কগুলি থেকে পৃথক। এটি হার্ড লিঙ্কগুলি থেকে আলাদা করা যায় এবং প্রয়োজনে সিমলিংক ছাড়াই কোনও পথে সমাধান করা যায়।
কিছু দিক থেকে, সিমলিংকগুলি যুক্ত করা ফাইলের মৌলিক ফাইলের কাঠামোকে পরিবর্তন করে না - এটি রাখে, তবে অ্যাপ্লিকেশন স্তরের মতো আরও কাঠামো যুক্ত করে।


থেকে man readlink:

 NAME
        readlink - print resolved symbolic links or canonical
        file names

 SYNOPSIS
        readlink [OPTION]... FILE...

 DESCRIPTION
        Print value of a symbolic link or canonical file name

        -f, --canonicalize
               canonicalize by  following  every  symlink  in
               every component of the given name recursively;
               all but the last component must exist
        [  ...  ]

1
একটি নরম লিঙ্ক কেন এই সব করতে পারে না?
তনয় 26'15

1
@ টনয়ে রাইট, এটি প্রসারকে নরম লিঙ্কের সাথে অনুরূপ ক্ষেত্রে তুলনা করতে সহায়তা করতে পারে। আমি চেষ্টা করবো.
ভোলকার সিগেল 26'15

ঠিক কীভাবে এটি কেবল ডিরেক্টরিগুলির সাথে সম্পর্কিত? আমি যেভাবে এটি বুঝতে পারি, এই সমস্যাগুলি হার্ডলিঙ্কযুক্ত ফাইলগুলির জন্যও একটি সমস্যা। তদুপরি, আমি হার্ডলিংকটিকে অন্যদের ভিতরে প্রবেশের অনুমতি দেওয়ার জন্য প্রদত্ত ডিরেক্টরিটির অনুমতি পরিবর্তন করার একটি সহজ উপায় হিসাবে দেখছি, প্যারেন্ট চেইনের ভিতরেও তাদের অনুমতি না দিয়ে। শোনায় খুব দরকারী যদি আপনি যোগ করতে / গ্রুপ সংশোধন ক্ষমতা আছে না ...
inetknght

দুর্দান্ত উত্তর, কিন্তু তারপরে ... অ্যাপল কীভাবে টাইম মেশিনের জন্য এই সমস্যাগুলি সমাধান করেছিল?
ড্যামিয়েন

খুব আকর্ষণীয় মনে হচ্ছে! তবে সমস্যাটি কী তা সম্পর্কে আমি কিছুই জানি না - আপনি কি আমাকে ইঙ্গিত দিতে পারেন?
ভোলকার সিগেল

77

"আপনার সাধারণত হার্ড লিঙ্কগুলি অন্যভাবে ব্যবহার করা উচিত নয়" অতিরিক্ত-বিস্তৃত। আপনাকে হার্ড লিঙ্ক এবং সিমলিংকের মধ্যে পার্থক্য বুঝতে হবে এবং প্রতিটি যথাযথ হিসাবে ব্যবহার করতে হবে। প্রত্যেকে তার নিজস্ব সুবিধাগুলি এবং অসুবিধাগুলির সেট নিয়ে আসে:

প্রতীকগুলি করতে পারেন:

  • ডিরেক্টরি নির্দেশ করুন
  • অস্তিত্বহীন বস্তুগুলিকে নির্দেশ করুন
  • একই ফাইল সিস্টেমের বাইরে ফাইল এবং ডিরেক্টরিতে নির্দেশ করুন

হার্ড লিঙ্কগুলি:

  • মুছে ফেলা থেকে তারা যে ফাইলটি উল্লেখ করে সেগুলি রাখুন

"লিখিত অনুলিপি" অ্যাপ্লিকেশন সম্পাদন করতে হার্ড লিঙ্কগুলি বিশেষত কার্যকর। কেবলমাত্র দুটি সংস্করণের মধ্যে পরিবর্তিত ফাইলগুলির জন্য স্থান ব্যবহার করার সময় এগুলি আপনাকে ডিরেক্টরি কাঠামোর ব্যাকআপ কপি রাখতে দেয়।

আদেশটি cp -alএই ক্ষেত্রে বিশেষভাবে কার্যকর is এটি একটি ডিরেক্টরি কাঠামোর সম্পূর্ণ অনুলিপি তৈরি করে, যেখানে সমস্ত ফাইলগুলি মূল ফাইলগুলির হার্ড লিঙ্কগুলির দ্বারা প্রতিনিধিত্ব করা হয়। তারপরে আপনি কাঠামোর মধ্যে ফাইলগুলি আপডেট করার জন্য এগিয়ে যেতে পারেন এবং কেবলমাত্র যে ফাইলগুলি আপনি আপডেট করেন তা অতিরিক্ত স্থান গ্রহণ করবে। বহুমুখী ব্যাকআপগুলি বজায় রাখার ক্ষেত্রে এটি বিশেষভাবে কার্যকর।


41
শেষ অনুচ্ছেদ সংক্রান্ত, যদি আপনি Edit "কপি" hardlinked ফাইল, মূল ফাইল এছাড়াও পরিবর্তিত হয় - দেখুন unix.stackexchange.com/questions/70531/...
Marcin

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

7
ব্যাকআপ আইডিয়াটি ভাল এবং আমি আসলে এটি প্রচুর ব্যবহার করি তবে আমি মনে করি যে ব্যবহারকারীদের সাবধান করা উচিত যে কোনও ফাইল পরিবর্তন করলে ব্যাকআপও বদলে যাবে।
চিহ্নিত করুন

3
হেক, একটি সিমিলিংকের কোনওোকিছুই নির্দেশ করার দরকার নেই। ln -s "Don't use this directory" READMEবৈধ। প্রকৃতপক্ষে, আপনি যদি এটির বিষয়ে চিন্তা করেন তবে একটি ডিরেক্টরি একটি সম্পর্কিত সম্পর্কিত ডাটাবেস হিসাবে ব্যবহার করা যেতে পারে এবং কোনও আসল ফাইলই অন্তর্ভুক্ত থাকে না।
এডওয়ার্ড ফালক

5
-1 এটি প্রশ্নের উত্তর দেয় না, এবং কিছু তথ্য সরল ভুল is
wjandrea

43

এফওয়াইআই, আপনি মাউন্ট ব্যবহার করে ডিরেক্টরিগুলির জন্য হার্ড লিঙ্কগুলির মতো একই জিনিস অর্জন করতে পারেন:

mount -t bind /var/www /home/user/workspace/www

এটি অত্যন্ত বিপজ্জনক কারণ বেশিরভাগ সরঞ্জাম এবং প্রোগ্রামগুলি বাইন্ডিং সম্পর্কে সচেতন হবে না । আমি একবার উপরের উদাহরণে এর মতো কিছু করেছি এবং তারপরে এগিয়ে চলেছি rm -rf /home/user। ভাগ্যক্রমে, এর সাথে প্রাসঙ্গিক কিছু ছিল না /var/www


6
আমি ব্যবহার করেছি mount --bind <src> <dest>। মুছে src
ফেলার

1
আমি পেয়েছি:mount: unknown filesystem type 'bind'
উইজেক

4
ব্যাসিবক্সে এটি এটিmount -o bind src dest
ম্যাট এম

@ ম্যাটম একই সাথে ডেবিয়ান
হ্যানশেরিক

2
আপনার যদি কেবল পঠনের জন্য মাউন্ট প্রয়োজন হয় তবে আপনি মাউন্ট পয়েন্টে অনুমতি সেট করতে পারেন এবং rm -rfসমস্যা এড়াতে পারেন । superuser.com/questions/320415/…
জ্যানারক

19

হার্ড-লিঙ্কিং ডিরেক্টরিগুলি অনুমোদিত না হওয়ার কারণটি কিছুটা প্রযুক্তিগত। মূলত, তারা ফাইল-সিস্টেমের কাঠামোটি ভেঙে দেয় । আপনার সাধারণত হার্ড লিঙ্কগুলি যেভাবেই ব্যবহার করা উচিত নয়। প্রতীকী লিঙ্কগুলি সমস্যা তৈরি না করেই একই কার্যকারিতার বেশিরভাগ ক্ষেত্রে অনুমতি দেয় (উদাঃ ln -s target link)।


17
হার্ড লিঙ্কগুলির ভাল ব্যবহারের ক্ষেত্রে রয়েছে। আপনার এগুলি সাধারণত ব্যবহার করা উচিত নয় বলাই কিছুটা বিস্তৃত।
স্যান্ডার স্টেফান

4
লিঙ্কটি প্রদানের জন্য যা আসলে ওপি-র প্রশ্নের (এবং আমার) প্রশ্নের উত্তর দেয়, -১ একটি মতামত প্রকাশের জন্য -১ ("আপনার সাধারণত লিঙ্কগুলি কোনওভাবেই ব্যবহার করা উচিত নয়" - যদি এটির সমর্থন করার জন্য লিঙ্ক থাকে তবে এটি ঠিক আছে)। যা ভাল ছিল, কারণ আমি যাইহোক +2 দিতে পারি না। ; ডি
এমএসবি

3
লিঙ্কটি "তারা ফাইল-সিস্টেম কাঠামো ভেঙে দেয়" কাজ করে না।
চার্লি পার্কার

5
উত্তরে লিঙ্কের বিষয়বস্তু সংক্ষিপ্ত করার চেষ্টা করুন, এবং লিঙ্কটি একটি রেফারেন্স হিসাবে রাখুন। লিঙ্ক পচা এড়াতে এটি স্ট্যাক এক্সচেঞ্জের ভাল অনুশীলন, ধন্যবাদ।
অক্সভিভি

3
ভাল করেছেন @ চর্লিপারপারার; সর্বকালের সেরা অজান্তেই (?) ব্যঙ্গাত্মক মন্তব্য :)
এলিরান মালকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.