ইউনিক্স ফাইল সিস্টেমে ডিরেক্টরিগুলি কীভাবে প্রয়োগ করা হয়?


19

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


1
আপনি কি কোনও বিশেষ ফাইল সিস্টেম (গুলি) এর প্রতি আগ্রহী?
ইগনাসিও ওয়াজকেজ-আব্রামগুলি

3
ইউনিক্সে, সবকিছুই একটি ফাইল (historicতিহাসিক জ্ঞান)। তবে প্রতিটি ইউএনআইএক্স ওপেন সোর্স নয়। জ্ঞান ইউনিক্স নয়, জানো? ওপেন সোলারিস একটি ওপেন সোর্স ইউনিক্স, যখন লিনাক্সটি কেবল একটি ইউনিক্সয়েড ওএস। :) এবং হ্যাঁ - ফাইল সিস্টেমগুলি - রেসফার্ফস? Ext2-3-4? XFS দ্বারা? NFS- র?
ব্যবহারকারী অজানা

2
একটি লিঙ্ক হয় আসলে একটি ফাইল, খুব।
mattdm

5
একটি প্রতীকী লিঙ্ক একটি ফাইল। হার্ড লিঙ্কটি ফাইল সিস্টেম গ্রাফের একটি প্রান্ত।
dmckee

3
বিজ্ঞাপন: অপারেটিং সিস্টেম ডেভেলপমেন্ট সাইটের প্রস্তাবনায় আপনার আগ্রহী হতে পারে ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


22

ডিরেক্টরিগুলির অভ্যন্তরীণ কাঠামো ব্যবহৃত ফাইল সিস্টেমের উপর নির্ভরশীল। আপনি যদি সঠিকভাবে কী ঘটতে চান তা জানতে চান, ফাইল সিস্টেমের বাস্তবায়নগুলি একবার দেখুন।

মূলত, বেশিরভাগ ফাইল সিস্টেমে একটি ডিরেক্টরি হ'ল ফাইল-নাম (কী) এবং ইনোড সংখ্যা (মান) এর মধ্যে একটি সহযোগী অ্যারে । এরকম কিছু:

1167010 .
1158721 ..
1167626 subdir
 132651 barfile
 132650 bazfile

এই তালিকাটি কিছুটা - কম-বেশি - দক্ষতার সাথে (সাধারণত) 4KB ব্লকের একটি চেইনের ভিতরে কোড করা হয় is লক্ষ্য করুন যে নিয়মিত ফাইলগুলির বিষয়বস্তু একইভাবে সংরক্ষণ করা হয়। ডিরেক্টরিগুলির ক্ষেত্রে, এই ব্লকের ভিতরে কোন আকারটি আসলে ব্যবহৃত হয় তা জানার কোনও মানে নেই। সে কারণেই যে ডিরেক্টরিগুলির দ্বারা প্রতিবেদন করা হয়েছে duসেগুলি 4KB এর গুণক।

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

এই সমস্তের পরিচালনা কার্নেল মোডে ঘটে। সফ্টওয়্যার কেবল int mkdir(const char *pathname, mode_t mode);একটি সিস্টেম কলের দিকে পরিচালিত একটি ফাংশন সহ একটি ডিরেক্টরি তৈরি করতে বলে এবং বাকি সমস্ত পর্দার আড়ালে সঞ্চালিত হয়।

লিঙ্ক কাঠামো সম্পর্কে:

একটি হার্ড লিঙ্কটি কোনও ফাইল নয়, এটি একটি নতুন ডিরেক্টরি এন্ট্রি (যেমন একটি নাম - ইনোড নম্বর সমিতি) একটি প্রিভিসিং ইনড সত্ত্বাকে উল্লেখ করে ² এর অর্থ হ'ল একই ইনোডটি বিভিন্ন পথের নাম থেকে অ্যাক্সেস করা যায়। বিশেষত, যেহেতু মেটাডাটাগুলি (অনুমতি, মালিকানা, টাইমস্ট্যাম্পগুলি ...) ইনোডের মধ্যে সংরক্ষণ করা হয়, সেগুলি ফাইলটি অ্যাক্সেস করার জন্য বেছে নেওয়া পথের নামগুলির থেকে স্বতন্ত্র এবং স্বতন্ত্র।

একটি সিম্বলিক লিঙ্ক হল একটি ফাইল এবং তার লক্ষ্য থেকে স্বতন্ত্র করে। এর অর্থ এটির নিজস্ব একটি ইনোড রয়েছে। এটি নিয়মিত ফাইলের মতোই পরিচালনা করা হত: লক্ষ্য পথটি একটি ডেটা ব্লকে সংরক্ষণ করা হয়েছিল। তবে এখন, সাম্প্রতিক এক্স ফাইল সিস্টেমগুলিতে দক্ষতার কারণে , 60 বাইটের চেয়ে কম দীর্ঘ পাথগুলি ইনোডের মধ্যেই সংরক্ষণ করা হয় (ক্ষেত্রগুলি যা সাধারণত ডেটা ব্লকের পয়েন্টারগুলি সঞ্চয় করতে ব্যবহৃত হত)।

-
1. এটি ব্যবহার করে প্রাপ্ত হয়েছিল ls -ai1 testdir
২. যার ধরন অবশ্যই আজকাল 'ডিরেক্টরি' থেকে আলাদা হওয়া উচিত।


সম্প্রসারণের জন্য আপনাকে ধন্যবাদ যাতে আমি একটি প্রোগ্রামেটিক স্তরে ডিরেক্টরি এবং ফাইলগুলির মধ্যে পার্থক্য বুঝতে পারি।
নিক্লাস

12

স্টাফেন গিমেনিজ থেকে পোস্টটি প্রসারিত করার জন্য, একটি নতুন ডিরেক্টরি তৈরি করা হচ্ছে S_IFDIR এর স্ট_মোড মান (অনুমতি মোড সহ) সহ একটি নতুন ইনোড তৈরি করার প্রক্রিয়া, লিঙ্কটি সহ নতুন ইনোডের প্রথম ডেটা ব্লকে দুটি এন্ট্রি তৈরি করা ( 2) সিস্টেম কল: '।' কোনটি এই নতুন ইনোড এবং '..' নির্দেশ করে যা প্যারেন্ট ডিরেক্টরিকে নির্দেশ করে, তারপরে ইনোড এবং নতুন ডিরেক্টরিটির নামের সাথে প্যারেন্ট ডিরেক্টরিতে একটি এন্ট্রি তৈরি করে - প্রথম এবং শেষ অংশটি সিস্টেম কল এমকেএনড দ্বারা সম্পন্ন হয় ( 2)। এছাড়াও, কেবল রুটই আজকের দিনে আমরা যেমন কথা বলছি তেমন কাজের জন্য এমকেএনড (2) ব্যবহার করতে পারে।

উদাহরণস্বরূপ, mkdir("/home/larry.user/xyzzy", 0666)মূলত নিম্নলিখিতটি (এসআইএসভি দিনের [1] এর সি কোড ছিল):

int mode = 0666;
char newdir[] = "/home/larry.user/xyzzy";
char path1[NAMESZ+4, path2[NAMESZ+4], *p;
mknod(newdir, S_IFDIR|mode);
strcpy(path1, newdir);
strcat(path1, "/."); /* "." link */
link(newdir, path1);
strcat(path1, ".");  /* ".." link */
strcpy(path2, newdir);
if ((p = strrchr(path2, '/') == (char *)0) /* root directory */
    link(".", path1);
else {
    *p = '\0';
    link(path2, path1);
}
  1. হাভিল্যান্ড এবং সালামা, "ইউনিক্স সিস্টেম প্রোগ্রামিং", 1987, পিপি 69-71।

এটি খুব ত্রুটিযুক্ত প্রবণ ছিল (এবং fsck এর মূল কারণগুলির মধ্যে একটি) সুতরাং আপনার জন্য এটি করতে সক্ষম হওয়ার জন্য একটি এমকেডির (2) সিস্টেম কল তৈরি করা হয়েছিল।

নোট করুন যে এমকিএনড (২) দিয়ে অ্যামি ফাইলসিস্টেম অবজেক্ট তৈরি করা যেতে পারে: নিয়মিত ফাইল, ডিরেক্টরি, ডিভাইস ফাইল, সিমিলিংক ইত্যাদি So এমন একটি বস্তু যা কোনও ইনোড দ্বারা প্রতিনিধিত্ব করা হয়, এমন একটি ফাইল সিস্টেমে থাকে যা একটি আই / ও ইন্টারফেসের সাথে আচরণ করে "।


খুব আকর্ষণীয় উত্তরের জন্য আপনাকে ধন্যবাদ। আমি বুঝতে পেরেছি এবং মনে করি আমি প্রোগ্রামটির touchউত্সটিতেও দেখতে পারি যা একটি খালি ফাইল তৈরি করে এবং এটি কী করে তা দেখে।
নিক্লাস

2

আপনি যদি ইউনিক্স / লিনাক্স ফাইল সিস্টেম সম্পর্কিত আরও তথ্য পেতে চান তবে আমি আপনাকে লিনাক্স কার্নেল এবং লিনাক্স কার্নেল বিকাশ বোঝার জন্য 2 টি বইয়ের প্রস্তাব দিই । লিনাক্স কার্নেল বোঝার জন্য সেগুলি সেরা বই।

"প্রচলিত ফাইল মডেল" ইউনিক্স সিস্টেমগুলিতে প্রতিটি ডিরেক্টরি একটি ফাইল হিসাবে বিবেচিত হয় যা ফাইল এবং ডিরেক্টরিগুলির তালিকা ধারণ করে।

ভিএফএসে (ভার্চুয়াল ফাইল সিস্টেমগুলি) ডিরেক্টরিগুলি একটি কাঠামোতে প্রতিনিধিত্ব করা হয় dentrydentry একটি স্ট্রিং নাম (সাথে একটি সি কাঠামো d_name ), একটি inode (একটি পয়েন্টার d_inode ) এবং পিতা বা মাতা dentry (একটি পয়েন্টার d_parent )। একটি ইনোড ফাইল সিস্টেমের কোনও ফাইল সম্পর্কিত তথ্য পরিচালনা করার জন্য একটি কাঠামো। উদাহরণস্বরূপ, আপনার যদি ডিরেক্টরি থাকে /tmp/test/fooতবে ভিএফএস পথের প্রতিটি উপাদানগুলির জন্য একটি ডেন্ট্রি অবজেক্ট তৈরি করবে। সুতরাং, এটি একটি ডেন্ট্রি অবজেক্ট তৈরি করবে /, testরুট ডিরেক্টরিতে প্রবেশের জন্য একটি দ্বিতীয় ডেন্ট্রি অবজেক্ট fooএবং পরীক্ষা ডিরেক্টরিতে প্রবেশের জন্য তৃতীয় ডেন্ট্রি অবজেক্ট ।


ধন্যবাদ দিমিত্রি। আমি বুঝতে চাই যে কোনও প্রকল্প কেন একটি বি-ট্রি, একটি বাইনারি গাছ, একটি ট্রি বা এসোসিয়েটিভ অ্যারের মতো একটি নির্দিষ্ট ডেটা কাঠামো বেছে নিয়েছিল। আমি মনে করি একটি উপযুক্ত ডেটা স্ট্রচার / ডেটা মডেল চয়ন করা গুরুত্বপূর্ণ। বিভিন্ন বাস্তবায়ন সম্পর্কে শিখলে আমি যে বিশদটি খুঁজছি তা দেয়।
নিক্লাস

1

আপনি http://www.freebsd.org/doc/en/books/design-44bsd/book.html#OVERVIEW-FILESYSTEM পড়ে শুরু করতে পারেন । আরও তথ্যের জন্য দুর্দান্ত ক্লাসিক বইটি "4.4 বিএসডি অপারেটিং সিস্টেমের ডিজাইন এবং বাস্তবায়ন" পান।


লিঙ্কের জন্য ধন্যবাদ। আমি উভয় ফাইলই বুঝতে পারি ডিরেক্টরিগুলি মূলত অ্যারে যা ফাইল বা ডিরেক্টরি হিসাবে ব্যাখ্যা করা হয়। আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন ..
নিক্লাস

1
ডিরেক্টরিগুলি traditionতিহ্যগতভাবে কেবলমাত্র বিশেষভাবে ফর্ম্যাট করা ফাইল তবে এটি আর সত্য নয়: en.wikedia.org/wiki/ReiserFS# ডিজাইনে ReiserFS এবং কিছু অন্যান্য, ডিরেক্টরি একটি ডাটাবেসে প্রবেশিকা হয়। ডিরেক্টরিগুলি অ্যারে হিসাবে কাজ করতে পারে তবে এটি কেবল প্রোগ্রামিং বিমূর্ততা।
ব্রুস এডিগার

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