(হুঁ: নীচে এখন কিছুটা মহাকাব্য ...)
ইউনিক্স ফাইল সিস্টেমে ডিরেক্টরিটির নকশা (যা পেডেন্টিক হতে হবে, তবে সাধারণত ইউনিক্স ওএসগুলির সাথে সংযুক্ত নয়) একটি দুর্দান্ত অন্তর্দৃষ্টি উপস্থাপন করে, যা প্রকৃতপক্ষে প্রয়োজনীয় বিশেষ মামলার সংখ্যা হ্রাস করে।
একটি 'ডিরেক্টরি' আসলে ফাইল সিস্টেমের একটি ফাইল। ফাইল সিস্টেমের ফাইলগুলির সমস্ত আসল সামগ্রী ইনোডগুলিতে থাকে (আপনার প্রশ্ন থেকে, আমি দেখতে পাচ্ছি যে আপনি ইতিমধ্যে কিছু স্টাফ সম্পর্কে অবগত রয়েছেন)। ডিস্কের আইনোডগুলির কোনও কাঠামো নেই - এগুলি কেবল ডিস্কের উপরে চিনাবাদাম-মাখনের মতো ছড়িয়ে থাকা বাইটের সংখ্যাযুক্ত ব্লবগুলির একটি বড় গোছা। এটি কার্যকর নয়, এবং প্রকৃতপক্ষে পরিপাটি-মনের অধিকারী যে কোনও ব্যক্তির কাছে এটি দূষক।
শুধুমাত্র বিশেষ inode inode সংখ্যা 2 (না 0 বা 1, ঐতিহ্য কারণে জন্য) হয়; ইনোড 2 একটি ডিরেক্টরি ফাইল: রুট ডিরেক্টরি । সিস্টেমটি যখন ফাইল সিস্টেমটিকে মাউন্ট করে, তখন এটি নিজেই শুরু করতে "ইনড 2" পড়তে হয় knows
একটি ডিরেক্টরি ফাইল কেবল একটি ফাইল যা একটি অভ্যন্তরীণ কাঠামো সহ যা ওপেনডির (3) এবং বন্ধুদের দ্বারা পড়ার উদ্দেশ্য। আপনি এর অভ্যন্তরীণ কাঠামোটি দির (5) (আপনার ওএসের উপর নির্ভরশীল) নথিভুক্ত দেখতে পাচ্ছেন; আপনি যদি এটি তাকান, আপনি দেখতে পাবেন যে ডিরেক্টরি ফাইল এন্ট্রিতে ফাইল সম্পর্কে প্রায় কোনও তথ্য থাকে না - এটাই ফাইলের ইনোডের মধ্যে রয়েছে। এই ফাইলটি সম্পর্কে বিশেষ কয়েকটি বিষয়গুলির মধ্যে একটি হ'ল আপনি যদি লেখার অনুমতি দেয় এমন একটি মোড দিয়ে কোনও ডিরেক্টরি ফাইল খুলতে চেষ্টা করেন তবে (2) ফাংশনটি একটি ত্রুটি দেয়। অন্যান্য বিভিন্ন কমান্ড (কেবলমাত্র একটি উদাহরণ বাছাই করতে hexdump
) ডিরেক্টরি ফাইলগুলির সাথে স্বাভাবিকভাবে কাজ করতে অস্বীকার করবে, কারণ এটি সম্ভবত আপনি যা করতে চান তা নয় (তবে এটি তাদের বিশেষ ক্ষেত্রে, ফাইল সিস্টেমের নয়)।
একটি হার্ড লিঙ্ক কোনও ডিরেক্টরি ফাইলের মানচিত্রে প্রবেশের চেয়ে বেশি বা কম কিছু নয়। এই জাতীয় মানচিত্রে আপনার দুটি (বা আরও) এন্ট্রি থাকতে পারে যা উভয় একই ইনোড সংখ্যায় মানচিত্র করে: যে ইনোডের ফলে দুটি (বা আরও) হার্ড লিঙ্ক রয়েছে। প্রতিটি ফাইলের কমপক্ষে একটি 'হার্ড লিঙ্ক' কেন রয়েছে তা এটিও ব্যাখ্যা করে । ইনোডের একটি রেফারেন্স গণনা রয়েছে, যা ফাইল সিস্টেমের কোথাও কোনও ডিরেক্টরি ফাইলে যে ইনোডটি উল্লেখ করা হয়েছে তা রেকর্ড করে (এটি করার পরে আপনি যখন দেখেন এটির সংখ্যা ls -l
)।
ঠিক আছে: আমরা এখন কথা বলছি।
ডিরেক্টরি ফাইলটি স্ট্রিংয়ের একটি মানচিত্র ('ফাইলের নাম') থেকে সংখ্যার (ইনোড নম্বর)। এই ইনোড নম্বরগুলি সেই ডিরেক্টরিগুলির 'ইন' থাকা ফাইলগুলির ইনোডগুলির সংখ্যা। ডিরেক্টরিতে যে ফাইলগুলিতে রয়েছে সেগুলিতে অন্য ডিরেক্টরি ফাইল অন্তর্ভুক্ত থাকতে পারে, সুতরাং তাদের ইনড নম্বরগুলি ডিরেক্টরিতে তালিকাভুক্তদের মধ্যে থাকবে। সুতরাং, আপনার যদি কোনও ফাইল থাকে /tmp/foo/bar
, তবে ডিরেক্টরি ফাইলটিতে সেই ফাইলটির জন্য ইনডে স্ট্রিং ম্যাপিংয়ের foo
জন্য একটি এন্ট্রি অন্তর্ভুক্ত bar
থাকে। ডিরেক্টরি ফাইলটিতে /tmp
ডিরেক্টরিতে foo
থাকা 'ডিরেক্টরি' ফাইলের জন্য ডিরেক্টরি ফাইলটিতে একটি এন্ট্রিও রয়েছে /tmp
।
আপনি যখন mkdir (2) দিয়ে একটি ডিরেক্টরি তৈরি করেন, তখন সেই ফাংশন
- সঠিক অভ্যন্তরীণ কাঠামো সহ একটি ডিরেক্টরি ফাইল (কিছু ইনোড নম্বর সহ) তৈরি করে,
- এই নতুন ইনোডে নতুন ডিরেক্টরিটির নাম ম্যাপিং (মূল লিঙ্কগুলির মধ্যে একটির জন্য অ্যাকাউন্ট), মূল ডিরেক্টরিতে একটি এন্ট্রি যুক্ত করে,
- স্ট্রিং ম্যাপিং করে নতুন ডিরেক্টরিতে একটি এন্ট্রি যুক্ত করে। ' একই ইনোডে (অন্য লিঙ্কটির জন্য এটি অ্যাকাউন্ট) এবং
- নতুন ডিরেক্টরিতে অন্য এন্ট্রি যুক্ত করে, স্ট্রিংকে '..' ম্যাপিং করে ডিরেক্টরি ফাইলের ইনোডে এটি পদক্ষেপে (2) সংশোধন করা হয়েছে (এই ডিরেক্টরিতে আপনি যে সংখ্যক হার্ড লিঙ্কগুলি দেখবেন সেগুলি ডিরেক্টরিতে অন্তর্ভুক্ত রয়েছে যা সাব-ডিরেক্টরিতে থাকে )।
শেষ ফলাফলটি হল (প্রায়) একমাত্র বিশেষ কেস:
- খোলা (2) ফাংশন আপনাকে লেখার জন্য ডিরেক্টরি ফাইল খুলতে বাধা দিয়ে পায়ে নিজেকে গুলি করা আরও শক্ত করার চেষ্টা করে।
- Mkdir (2) ফাংশনটি নতুন ডিরেক্টরি ফাইলে বেশ কয়েকটি অতিরিক্ত এন্ট্রি ('।' এবং '..') যোগ করে জিনিসগুলি সুন্দর এবং সহজ করে তোলে, কেবল এটি ফাইল সিস্টেমের আশেপাশে যাওয়ার জন্য সুবিধাজনক করার জন্য make আমি সন্দেহ করি যে ফাইল সিস্টেমটি 'ছাড়া' পুরোপুরি ভালভাবে কাজ করবে। এবং '..', তবে এটি ব্যবহারে ব্যথা হবে।
- ডিরেক্টরি ফাইলটি কয়েকটি ধরণের ফাইলগুলির মধ্যে একটি যা 'বিশেষ' হিসাবে চিহ্নিত করা হয় - এটি সত্য যা খোলা (2) এর মতো জিনিসকে কিছুটা আলাদা আচরণ করতে বলে।
st_mode
স্ট্যাটে দেখুন (2)।
(স্ট্যাকওভারফ্লো মূল প্রশ্ন থেকে অনুলিপি করা হয়েছে, ২০১০-১০-২০১৮)
..
আপনার হার্ডলিঙ্কগুলি একবার হয়ে গেলে আপনার ট্রি ওয়াকিং সফ্টওয়্যারটির ইতিমধ্যে " পিতামত্তা ডিরেক্টরি লিঙ্কটিতে চক্র অনুসরণ করবেন না" ব্যাতিক্রম হওয়া দরকার, তাই এটি.
লিঙ্কটি ছাড়াও সামান্য যুক্ত জটিলতা ।