ডিরেক্টরি কীভাবে একটি "বিশেষ ধরণের ফাইল" হয়?


23

আমি এই ইউনিক্স টিউটোরিয়ালটি পড়ছি এবং এই উদ্ধৃতিটি জুড়ে এসেছি ...

আমাদের এখানে লক্ষ্য রাখতে হবে যে ডিরেক্টরি কেবল একটি বিশেষ ধরণের ফাইল।

... তবে কোনও ব্যাখ্যা বা বিশদ সরবরাহ করা হয়নি। ডিরেক্টরি কীভাবে কেবল একটি ফাইল হয়?


উত্তর:


19

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

* নিক্স প্রসঙ্গে কোনও "ফাইল" কী তা নির্ধারণের একটি উপায় হ'ল এটি এমন কিছু যা এর সাথে একটি ফাইল বর্ণনাকারী যুক্ত রয়েছে। উইকিপিডিয়া নিবন্ধ অনুসারে, একটি ফাইল বর্ণনাকারী

ফাইল বা অন্যান্য ইনপুট / আউটপুট সংস্থান যেমন পাইপ বা নেটওয়ার্ক সংযোগ অ্যাক্সেস করতে ব্যবহৃত একটি বিমূর্ত সূচক ...

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

ডিরেক্টরিগুলি এই অর্থে বিশেষ ধরণের কারণ স্থানীয় সি কোডগুলিতে এগুলি অবশ্যই কোনও ফাইল বর্ণনাকারীর সাথে সম্পর্কিত নয়; পসিক্স এপিআই একটি বিশেষ ধরণের স্ট্রিম হ্যান্ডেল ব্যবহার করে DIR*,। তবে, এই ধরণের আসলে অন্তর্নিহিত বর্ণনাকারী রয়েছে যা পুনরুদ্ধার করা যেতে পারে । বর্ণনাকারীরা কার্নেল দ্বারা পরিচালিত হয় এবং এগুলি অ্যাক্সেসে সর্বদা সিস্টেম কলগুলি জড়িত থাকে, সুতরাং, একটি বিবরণকারী কীসের আরেকটি দিক হ'ল এটি ওএস কার্নেল দ্বারা নিয়ন্ত্রিত একটি নালী। তাদের 0 থেকে শুরু করে অনন্য (প্রক্রিয়া অনুযায়ী) সংখ্যা রয়েছে যা সাধারণত স্ট্যান্ডার্ড ইনপুট স্ট্রিমের বিবরণী ।


2
POSIX.1-2008 সিস্টেম কল (একটি গুচ্ছ যোগ openat, fstatatইত্যাদি) যা ফাইল বর্ণনাকারী ডিরেক্টরি উল্লেখ করুন।
zwol

2
আরও মজার বিষয় হল, আপনি fsync()কেবলমাত্র পঠনযোগ্য (!) ডিরেক্টরি এফডি করতে পারেন এবং এটির একটি সুস্পষ্ট সংজ্ঞা রয়েছে (বিশেষত এটি ফাইল ডিরেক্টরি তৈরি / নামকরণ / মুছে ফেলা সংশোধন করে ডিস্কে প্রদত্ত ডিরেক্টরিটিতে, "লেখার ক্ষেত্রে তাত্ত্বিকভাবে প্রয়োজনীয় পদক্ষেপ" একটি অস্থায়ী ফাইল এবং এটিকে মূল "আইডিয়ম" এর নতুন নামকরণ করুন।
কেভিন

13

কাজগুলি করার ইউনিক্স উপায়ে: সবকিছুই একটি ফাইল।

ডিরেক্টরি হ'ল এক (অনেকের মধ্যে) বিশেষ ফাইলের ধরণ। এটিতে ডেটা নেই। পরিবর্তে, এটি ডিরেক্টরিতে অন্তর্ভুক্ত সমস্ত ফাইলের পয়েন্টার ধারণ করে।

অন্যান্য ধরণের বিশেষ ফাইল:

  • লিংক
  • সকেট
  • ডিভাইসের

তবে সেগুলিকে "ফাইল" হিসাবে বিবেচনা করা হয়, আপনি lsতাদের এগুলি এবং নাম পরিবর্তন করে তাদের সরিয়ে নিতে এবং বিশেষ ফাইলের ধরণের উপর নির্ভর করে তাদের থেকে / থেকে ডেটা প্রেরণ করতে পারেন।


1
এবং এটি জীবনকে আরও সহজ করে তোলে, কারণ আপনাকে ডিরেক্টরি হিসাবে কেবল আলাদাভাবে কিছু করতে হবে না। এটি লিখিত প্রোগ্রামগুলির পাশাপাশি কমান্ড লাইন (বা জিইউআই) থেকে অপারেশনগুলিতে প্রযোজ্য।
gabry

1
একটি ডিরেক্টরিতে ডেটা থাকে: ডিরেক্টরিতে থাকা ফাইলগুলিকে বর্ণনা করে এমন ডেটা। কোনও ডিরেক্টরি অ্যাক্সেস করা সম্ভব (যদিও এটি কোনও স্ট্যান্ডার্ড ওপেন কল সহ নয়) এবং সেই ডেটা নিজেই পড়ুন, যদিও (ব্রুস এডিগার তার উত্তরে নোট হিসাবে) আপনি ফরম্যাটটি না জানলে ডেটা বেশি ব্যবহার হয় না use
জামেস্কফ

11

আমার উত্তরটি কেবল স্মরণ করিয়ে দেওয়া, তবে ১৯৯০ সালে ভিনটেজ ইউনিক্স, যার মধ্যে অনেকগুলিই ছিল ডিরেক্টরিগুলি ফাইল ছিল, অন ডিস্কের ইনোডে কোথাও "ডিরেক্টরি" চিহ্নিত হয়েছে।

আপনি যেমন কিছু দিয়ে একটি ডিরেক্টরি খুলতে open(".", O_RDONLY)এবং ব্যবহারযোগ্য ফাইল বিবরণকারী ফিরে পেতে পারে। আপনি যদি /usr/includeসি স্ক্রিং সংজ্ঞাটি খুঁজে পেয়ে থাকেন এবং সঠিক সি স্ট্রাক্ট সংজ্ঞাটি খুঁজে পান তবে আপনি সামগ্রীগুলি পার্স করতে পারেন । আমি জানি যে আমি এটি সুনোস 4.1.x সিস্টেমস, এসজিআইয়ের ইএফএস ফাইল সিস্টেম এবং ডিইসির মিপস-সিপিইউ ওয়ার্কস্টেশনগুলির জন্য একটি ফাইল সিস্টেমের জন্য সম্ভবত বিএসডি 4.2 এফএফএস করেছি।

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



1
আপনি এখনও একটি ডিরেক্টরি খুলতে পারেন এবং এটি আজ কিছু ইউনিক্স রূপে ফাইল হিসাবে পড়তে পারেন, উদাহরণস্বরূপ এটি এখনও ফ্রিবিএসডি 10.1 এ সম্ভব। (পারে) উচিত)
গিলস

@ গিলিস আমি মনে করি এটি খুব যৌক্তিক হবে যদি ডিডি দ্বারা অনুলিপি করা কোনও ডিরেক্টরি মূলত এর সমতুল্য হয় cp --link dir1/* dir2, যদিও আমি এর ব্যবহার্যতা সম্পর্কে নিশ্চিত নই।
পিটার বলেছেন 18-18

3

একটি ডিরেক্টরি এতে বিশেষ হয় যে এটির মোডে এটি 'ডি' রয়েছে, এটি ফাইল সিস্টেমকে বলে যে এটি নিয়মিত ফাইল যা কেবলমাত্র বাইটের ক্রম হতে পারে তার চেয়ে নিয়মিত ফাইলের পরিবর্তে ডিরেক্টরিতে অন্তর্ভুক্ত অন্যান্য ফাইলের তালিকা হিসাবে এটির বিষয়বস্তু ব্যাখ্যা করে should অ্যাপ্লিকেশন দ্বারা পড়া। এটাই সব।


সমস্ত ফাইল সিস্টেমের সাথে জিনিসগুলি এত সহজ নয় - উদাহরণস্বরূপ, অ্যাপলের এইচএফএসে, কেবলমাত্র একটি বড় বি + গাছ রয়েছে যা সমস্ত পাথের নাম ধারণ করে, যদি আমি সঠিকভাবে মনে করি - তবে এই পর্যবেক্ষণটি ইউনিক্স ফাইল সিস্টেমগুলির জন্য বিএসডি-র এফএফএস সহ স্পট রয়েছে, যা সম্ভবত উদ্ধৃত টিউটোরিয়ালটির লেখকরা যা ভাবছিলেন তা সম্ভবত।
zwol

2

ডিরেক্টরিগুলি ফাইলগুলি কারণ লিনাক্স সিস্টেমগুলি সার্বজনীন i / o মডেল নিয়োগ করে । মডেলটিতে সিস্টেমের প্রতিটি জিনিসই একটি ফাইল এবং এটি একই সিস্টেম কল এবং বিভিন্ন কমান্ডের সাহায্যে অ্যাক্সেস করা যায়।

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

ডিরেক্টরিগুলি কেবল ফাইলগুলি সংগঠিত করার জন্য। যখন কোনও ডিরেক্টরি একটি ডিরেক্টরি থেকে অন্য একটিতে "সরানো" হয়, ফাইলটি নিজেই ডিস্কে স্থানান্তরিত করে না। এটি কেবলমাত্র একটি ডিরেক্টরি আই-নোডের একটি এন্ট্রি মুছে ফেলা হয় এবং অন্য ডিরেক্টরি আই-নোডে লেখা হয়।


-3

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


2
না, কেবল 1 টি ইনোড একই ফাইলটিতে নির্দেশ করতে পারে। যদিও একই ইনোড একাধিক ডিরেক্টরিতে (বা একাধিক নামে) একযোগে থাকতে পারে। একটি সহজ চেক: ls -l >test.txt;ln -vf test.txt test2.txt;ls -li test.txt test2.txt। সুতরাং আপনি দেখতে পাবেন যে হার্ড লিঙ্কগুলির একই ইনোড নম্বর রয়েছে।
পিটারহ বলেছেন মনিকা

@ পেটার ফাইল বর্ণনাকারী কেবল একটি প্রক্রিয়াতেই অনন্য। তুমি কি ব্যাখ্যা করতে পারো?
আলামীন

1
@ মোঃ.আলমিনমাহমুদ এটি সত্য নয়, যদি কোনও প্রক্রিয়া হয় তবে fork()এর শিশু প্রক্রিয়াতে (কিছু বিশেষ পরিস্থিতি, যেমন একটি O_CLOEXECপতাকা ব্যতীত) আসল প্রক্রিয়াটির ঠিক একই ফাইলডস্ক্রিপ্ট সত্তা থাকবে। আরেকটি উদাহরণ: অ্যাপাচি চাইল্ড প্রসেসগুলি listen()একই সকেট ফাইলের বর্ণনাকারীতে প্রবেশ করছে। তবে এই উত্তরটি ফাইল বর্ণনাকারীদের সম্পর্কে নয়, যা কার্নেল-অভ্যন্তরীণ ডেটা কাঠামো এবং কেবল কার্নেল মেমোরিতে বিদ্যমান। এই ( মিথ্যা ) উত্তরটি ডিরেক্টরি এন্ট্রি এবং ইনোডগুলি সম্পর্কে, এগুলি অন ডিস্ক সত্তা (যেমন তারা হার্ড ড্রাইভে শারীরিক বাইট) tes
পিটার বলেছেন মনিকা

1
@ Md.AlaminMahamud ওয়েল, এখন আমি খুব নিশ্চিত, উদাহরণস্বরূপ একটি am fork()ঘটতে এবং তারপর শিশু প্রক্রিয়া seek()s অথবা close()s, আমাদের পিতা বা মাতা ফাইল বর্ণনাকারী প্রভাবিত করবে না। সুতরাং আমি এখনই ভাবছি, ফাইল বর্ণনাকারী কেবল আংশিক প্রক্রিয়া-ব্যক্তিগত কাঠামো। তবে এই প্রশ্নটি তাদের সম্পর্কিত নয়, এই প্রশ্নটি দিকনির্দেশগুলি / ইনোডগুলি সম্পর্কে এবং আমি এই প্রশ্নের সম্পূর্ণ মিথ্যা উত্তরের জন্য আপনাকে মন্তব্য করছি।
পিটার বলেছেন মনিকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.