Any ln -d` সফল হয় এমন কোনও ফাইল সিস্টেম রয়েছে?


11

LN এর জন্য ম্যানপেজ থেকে :

-d, -F, --directory
  allow the superuser to attempt to hard link directories (note: will 
  probably fail due to system restrictions, even for the superuser)

এমন কোনও ফাইল সিস্টেম ড্রাইভার রয়েছে যা বাস্তবে এটির অনুমতি দেয়, বা একমাত্র বিকল্প mount --bind <src> <dest>? অথবা ফাইল সিস্টেম-নির্দিষ্ট ড্রাইভারের কাছে যাওয়ার আগে কার্নেল দ্বারা এই জাতীয় আচরণটি অবরুদ্ধ করা হয়েছে?

দ্রষ্টব্য: আমি আসলে কোনও মেশিনে এটি করার পরিকল্পনা করছি না, কেবল কৌতূহলী।

উত্তর:


6

প্রথম একটি নোট: lnকমান্ড মত অপশন নেই -d, -F, --directory, এই একটি অ পোর্টেবল GNUism হয়।

আপনি যে বৈশিষ্ট্যটি সন্ধান করছেন তা link(1)আদেশ দ্বারা প্রয়োগ করা হয়েছে।

আপনার মূল প্রশ্নে ফিরে যান:

একটি সাধারণ ইউনিক্স সিস্টেমে সিদ্ধান্ত হয়, ডিরেক্টরিগুলিতে হার্ড লিঙ্কগুলি সম্ভব কিনা, ফাইল-সিস্টেম ড্রাইভারে করা হয়।

সোলারিস ইউএফএস ড্রাইভার ডিরেক্টরিগুলিতে হার্ড লিঙ্কগুলি সমর্থন করে, জেডএফএস ড্রাইভার তা দেয় না।

সোলারিসে ইউএফএস হার্ড লিঙ্কগুলিকে সমর্থন করার কারণটি এটিটি এবং টি এই বৈশিষ্ট্যে আগ্রহী ছিল - বিএসডি থেকে ইউএফএস হার্ড লিঙ্কযুক্ত ডিরেক্টরি সমর্থন করে না।

জেডএফএস হার্ডলিঙ্কযুক্ত ডিরেক্টরিগুলি সমর্থন না করার কারণটি হ'ল জেফ বনউইক সেই বৈশিষ্ট্যটি পছন্দ করেন না।

লিনাক্স সম্পর্কিত, আমি অনুমান করব যে লিনাক্স উপরের কার্নেল স্তরগুলিতে ডিরেক্টরিগুলিতে হার্ড লিঙ্কগুলি তৈরি করার চেষ্টা করে। এই অনুমানের কারণ হ'ল লিনাস টরভাল্ডস জিআইটি-র জন্য কোড লিখেছিল git cloneযা হার্ড লিঙ্কযুক্ত ডিরেক্টরি সমর্থন করে এমন একটি প্ল্যাটফর্মের মূল হিসাবে ডাকা হত যখন ডাইরেক্ট ডিরেক্টরিগুলি করেছিল।

মনে রাখবেন যে হার্ডড লিংকড ডিরেক্টরি তৈরি করতে সহায়তা করে এমন একটি ফাইল সিস্টেমেরও unlink(1)শূন্যস্থান ছাড়াই ডিরেক্টরিগুলি মুছে ফেলার জন্য সমর্থন করা দরকার ।

সুতরাং যদি আমরা ধরে নিই যে টরভাল্ডস জানেন যে লিনাক্স কীভাবে কাজ করে এবং লিনাক্স যদি হার্ড লিঙ্কযুক্ত ডিরেক্টরিগুলি সমর্থন করে তবে টরভাল্ডসকে জানা উচিত ছিল যে unlink(2)রুট হওয়ার সময় কোনও ডিরেক্টরিতে কল করা কোনও ত্রুটি দিয়ে ফিরে আসে না তবে সেই ডিরেক্টরিটি ছিন্ন করে দেয়। অন্য কথায়, লিনাক্স একটি ফাইল সিস্টেম ড্রাইভারকে হার্ড লিঙ্কযুক্ত ডিরেক্টরিগুলি প্রয়োগ করার অনুমতি দেয় এমন সম্ভাবনা কম।


3

ওপির প্রশ্নের উল্লেখ রয়েছে mount --bind। একটি দ্রুত চেক দেখায় যে এটি যে ডিরেক্টরিতে মাউন্ট করা হয়েছে তার লিঙ্ক-কাউন্টটি পরিবর্তন করে না। হার্ডলিঙ্কিং সর্বদা লিঙ্ক- কাউন্টকে সংশোধন করে, যা আপনি ব্যবহার করে দেখতে পারেন ls -ld

সাধারণত (বেশিরভাগ ইউনিক্সের মতো সিস্টেম) ডিরেক্টরিতে হার্ডলিঙ্কের সংখ্যাটি সেই নামের সাথে সংযুক্ত ডিরেক্টরিগুলির সংখ্যা হবে, যেমন,

  • ".." (মূল ডিরেক্টরি)
  • "." (ডিরেক্টরি নিজেই)
  • সাবডিরেক্টরি

আপনি যদি (সাধারণত) আরও তথ্যবহুল তথ্য পৃষ্ঠাটি পড়েন তবে অন্যরা যেমন করেছে তেমন আবিষ্কার করতে পারেন :

Oh great, one spends hours tying to find what is wrong only to
discover,
$ info ln
On all existing implementations, you cannot make a hard link to a
directory, and hard links cannot cross filesystem boundaries.  (These
restrictions are not mandated by POSIX, however.)

Therefore, kindly say everywhere you say super-user only,
instead say "few systems, super-user only".

যদিও এটি বর্তমানে শব্দযুক্ত

বেশিরভাগ সিস্টেমে ডিরেক্টরিতে একটি হার্ড লিঙ্ক তৈরি নিষিদ্ধ; এটি যেখানে অনুমোদিত, কেবলমাত্র সুপার-ব্যবহারকারী এটি করতে পারে (এবং সাবধানতার সাথে, যেহেতু একটি চক্র তৈরি করা অন্যান্য অন্যান্য ইউটিলিটিগুলিতে সমস্যা সৃষ্টি করবে)। হার্ড লিঙ্কগুলি ফাইল সিস্টেমের সীমানা অতিক্রম করতে পারে না। (তবে এই নিষেধাজ্ঞাগুলি পসিক্স দ্বারা বাধ্যতামূলক নয়))

ডিরেক্টরিতে লিঙ্ক লিঙ্কযুক্ত থাকলে ফাইলগুলি হারাতে বাঁচাতে একটি ডিরেক্টরিতে হার্ডলিঙ্কগুলি তৈরি করা (এবং অপসারণ) একটি সীমাবদ্ধ বৈশিষ্ট্য। সি অপারেটিং সিস্টেম ইন্টারফেসে লিংক / লিঙ্ক / আনলিংক ক্রিয়াকলাপগুলি প্রতিসম হয় , তাই ডিরেক্টরিগুলিতে লিঙ্কিং সাধারণত সাধারণত এমকেডির / rmdir কলগুলিতে করা হয়।

মনে রাখবেন যে জিএনইউ কোর্টিলগুলি অনেকগুলি 20-30 বছর আগে লেখা হয়েছিল (এবং নথিভুক্ত করা হয়েছিল), যখন কিছু আসল যাদুঘরের টুকরো এখনও ব্যবহৃত ছিল। হার্ড লিঙ্কের বিষয়ে উল্লিখিত হিসাবে , মূলত কোনও এমকিডির / আরএমডিির কল ছিল না; ডিরেক্টরিগুলি হার্ড লিঙ্কগুলি ব্যবহার করে তৈরি করা হয়েছিল (সুবিধাপ্রাপ্ত অপারেশন হিসাবে)। উল্লিখিত সমস্যাগুলি সমাধান করার জন্য যখন সিস্টেম কলগুলি যুক্ত করা হয়েছিল তখন সেগুলি সমস্ত চলে যায়। তবে ডকুমেন্টেশনগুলি তাদের রক্ষণাবেক্ষণকারীদের স্মৃতির অতীত এই সিস্টেমগুলি উল্লেখ করে to বিকল্পটি যা প্রশ্নবিদ্ধ হয়েছিল তা পূর্বসূরীর fileutils(যা গঠনের জন্য textutilsএবং shellutils১৯৯০ এর দশকের মাঝামাঝি সময়ে মিলিত হয়েছিল coreutils)। চেঞ্জলগ থেকে কয়েকটি আইটেম বৈশিষ্ট্যটির উত্স পরিষ্কার করতে সহায়তা করতে পারে:

Mon Jul 23 16:57:44 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

        * cp.c (copy): Make +update operate silently, like +one-file-system.
        * ln.c: Add -F as synonym for -d, for SunOS compatibility.

Wed Feb 21 11:13:26 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

        * ln.c (error): New function.
        (main, do_link): Call error instead of fprintf and exit. 
        (main): Recognize new -d +directory option to allow superuser to
        make hard links to dirs, like the BSD ln -f option.
        (do_link): Don't allow hard links to dirs (they are hard to
        get rid of -- rmdir and unlink don't do it), unless -d was given.
        (usage): Mention -d +directory option.

সুতরাং আপনি উদাহরণস্বরূপ দেখতে পারেন যে এই প্রাচীনত্বগুলির জন্য এই বৈশিষ্ট্যটি প্রযোজ্য ছিল তার মধ্যে একটি হ'ল সুনোস। সংশ্লিষ্ট ম্যানুয়াল পৃষ্ঠা এটি বলেছে:

OPTIONS
       -f     Force a hard link to a directory -- this option is  only   avail-
              able to the super-user.

       -s     Create a symbolic link or links.

SYSTEM V OPTIONS
       -f     Force  files to be linked without displaying permissions, asking
              questions or reporting errors.

       -F     Force a hard link to a directory -- this option is  only  avail-
              able to the super-user.

       -s     Create a symbolic link or links.

ডকুমেন্টেশনে উল্লিখিত হিসাবে, এই বৈশিষ্ট্যটি (এবং সম্পর্কিত বিকল্পটি পসিক্সে নেই (এবং এর কারণটি ব্যাখ্যা করার জন্য রেশনাল বিভাগটি দেখুন ) Rather পরিবর্তে, বৈশিষ্ট্যটি একটি নতুন কমান্ডে স্থানান্তরিত হয়েছিল (জিএনইউ কোর্টিলগুলিও সরবরাহ করেছেন) link। কমান্ডটি নিজেই অস্পষ্ট; আপনাকে স্ট্যান্ডার্ড থেকে কোনও ব্যবহার পেতে ফাংশন কলের বিবরণ পড়তে হবে।তবে, প্রয়োজনীয় সুযোগ-সুবিধাগুলির বিষয়ে দাবি অস্বীকার করার আগে কমান্ডটি কোন পরিস্থিতিতে কাজ করবে সেটির মানটি স্পষ্ট করে না। তার জন্য, আপনাকে স্ট্যান্ডার্ডের বাইরে সিস্টেম নির্ভর বৈশিষ্ট্যগুলিতে যেতে হবে:

একটি ডিরেক্টরিতে লিঙ্ক করা বেশিরভাগ inতিহাসিক বাস্তবায়নে সুপারসারের মধ্যে সীমাবদ্ধ কারণ এই ক্ষমতাটি ফাইলের স্তরক্রমের লুপ তৈরি করতে পারে বা অন্যথায় ফাইল সিস্টেমকে দূষিত করে। POSIX.1-2-2008 এর এই ভলিউমটি নিষিদ্ধ করে link()এবং এটি করা unlink()থেকে এই দর্শনটি চালিয়ে যায় । অন্যান্য ফাংশন এটি করতে পারে যদি বাস্তবায়নকারী এ জাতীয় এক্সটেনশন ডিজাইন করে।

সেখানে হয় সিস্টেম যা স্বাভাবিক সংখ্যা (2 প্লাস সাবডিরেক্টরি) পরলোক ডিরেক্টরি থেকে hardlinks ব্যবহার করুন।

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

আরও পড়া:


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