কেন '.' ইউনিক্সে একটি হার্ড লিঙ্ক?


51

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

এটি '..' একটি সত্যিকারের লিঙ্কটি আমার কাছে আরও বেশি অর্থবোধ করে - ফাইল সিস্টেমটি এটিকে নেভিগেট করার জন্য পয়েন্টারটিকে প্যারেন্ট ডিরেক্টরিতে ফিরিয়ে রাখতে হবে। তবে আমি কেন দেখছি না। ' একটি বাস্তব লিঙ্ক হওয়া প্রয়োজন। এটি বাস্তবায়নের ক্ষেত্রে একটি কুৎসিত বিশেষ ক্ষেত্রে বাড়ে বলে মনে হয় - আপনি যদি মনে করেন যে আপনি কেবল ইনোডের দ্বারা ব্যবহৃত স্থানটি 1 এর চেয়ে কম লিঙ্ক গণনা করেছেন তবে আপনি যদি ডিরেক্টরি হন তবে আপনাকে অবশ্যই এটি পরীক্ষা করতে হবে একটি লিঙ্ক 2 এর চেয়ে কম গণনা কেন?


1
..আপনার হার্ডলিঙ্কগুলি একবার হয়ে গেলে আপনার ট্রি ওয়াকিং সফ্টওয়্যারটির ইতিমধ্যে " পিতামত্তা ডিরেক্টরি লিঙ্কটিতে চক্র অনুসরণ করবেন না" ব্যাতিক্রম হওয়া দরকার, তাই এটি .লিঙ্কটি ছাড়াও সামান্য যুক্ত জটিলতা ।
dmckee

উত্তর:


37

একটি আকর্ষণীয় প্রশ্ন, সত্যিই। প্রথম নজরে আমি নিম্নলিখিত সুবিধা দেখতে পাচ্ছি:

প্রথমে আপনি উল্লেখ করেছেন যে .বর্তমান ডিরেক্টরি হিসাবে " " ব্যাখ্যা করা শেল বা সিস্টেম কল দ্বারা করা যেতে পারে। তবে ডিরেক্টরিটিতে বিন্দু প্রবেশের ফলে এই প্রয়োজনীয়তাটি সরিয়ে ফেলা হয় এবং আরও নিম্ন স্তরে ধারাবাহিকতা জোর করে।

তবে আমি মনে করি না যে এই নকশার সিদ্ধান্তের পিছনে এটিই মূল ধারণা ছিল।

যখন কোনও ফাইল ডিরেক্টরি থেকে তৈরি করা বা সরানো হচ্ছে তখন ডিরেক্টরিটির পরিবর্তনের সময় স্ট্যাম্পটিও আপডেট করতে হবে। এই টাইমস্ট্যাম্পটি তার ইনোডে সঞ্চিত। ইনোড নম্বরটি সংশ্লিষ্ট ডিরেক্টরি এন্ট্রিতে সংরক্ষণ করা হয়।

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

তবে ভাগ্যক্রমে বর্তমান ডিরেক্টরিতে বিন্দু প্রবেশ রয়েছে। রুটিন যা বর্তমান ডিরেক্টরিতে একটি ফাইল যুক্ত করে বা সরিয়ে দেয় কেবলমাত্র প্রথম এন্ট্রিতে ফিরে যেতে হবে (যেখানে ডট-এন্ট্রি সাধারণত থাকে) এবং তত্ক্ষণাত বর্তমান ডিরেক্টরিতে ইনোড নম্বরটি খুঁজে পেয়েছে।

বিন্দু প্রবেশ সম্পর্কে একটি তৃতীয় সুন্দর জিনিস রয়েছে:

যখন fsckএকটি পচা ফাইল সিস্টেম পরীক্ষা করে এবং নন-কানেক্টেড ব্লকগুলিও ফ্রি তালিকায় নেই, তখন যখন কোনও ডাটা ব্লকের (ডিরেক্টরি তালিকা হিসাবে ব্যাখ্যা করা হয়) কোনও ডট এন্ট্রি রয়েছে যা কোনও ইনোডের দিকে ইঙ্গিত করছে তা যাচাই করা সহজ যা এই ডেটা ব্লকে ফিরে আসে। যদি তা হয় তবে এই ডেটা ব্লকটিকে একটি হারিয়ে যাওয়া ডিরেক্টরি হিসাবে বিবেচনা করা যেতে পারে যা পুনরায় সংযুক্ত করতে হবে।


খুব দরকারী উত্তর।
নাওয়ানীথ কেএন

6
ডিরেক্টরি ইনোডের জন্য অনুসন্ধানের রুটিনগুলি সম্পর্কে মন্তব্যটি বোগাস। কার্নেল রুটিনগুলির .বর্তমান ডিরেক্টরিটিতে সন্ধান করার দরকার নেই । আপনি যদি কোনও কার্নেলটি না পান যেখানে এটি আসলে এইভাবে কাজ করে (আমি এটি সন্দেহ করি ...)
ডায়েটরিচ এপ্প

1
আমি @ ডায়েটরিচইপ এর সাথে একমত সিস্টেমটি প্রথমে ডিরেক্টরিতে প্রবেশের দিকে নজর রাখার জন্য এটি অবশ্যই ইনোড সম্পর্কে জেনে থাকতে হবে - কারণ এটি ডিরেক্টরি এন্ট্রি সম্বলিত ডেটা ব্লকে চলে আসে।
Lqueryvg

10

(হুঁ: নীচে এখন কিছুটা মহাকাব্য ...)

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

একটি 'ডিরেক্টরি' আসলে ফাইল সিস্টেমের একটি ফাইল। ফাইল সিস্টেমের ফাইলগুলির সমস্ত আসল সামগ্রী ইনোডগুলিতে থাকে (আপনার প্রশ্ন থেকে, আমি দেখতে পাচ্ছি যে আপনি ইতিমধ্যে কিছু স্টাফ সম্পর্কে অবগত রয়েছেন)। ডিস্কের আইনোডগুলির কোনও কাঠামো নেই - এগুলি কেবল ডিস্কের উপরে চিনাবাদাম-মাখনের মতো ছড়িয়ে থাকা বাইটের সংখ্যাযুক্ত ব্লবগুলির একটি বড় গোছা। এটি কার্যকর নয়, এবং প্রকৃতপক্ষে পরিপাটি-মনের অধিকারী যে কোনও ব্যক্তির কাছে এটি দূষক।

শুধুমাত্র বিশেষ inode inode সংখ্যা 2 (না 0 বা 1, ঐতিহ্য কারণে জন্য) হয়; ইনোড 2 একটি ডিরেক্টরি ফাইল: রুট ডিরেক্টরি । সিস্টেমটি যখন ফাইল সিস্টেমটিকে মাউন্ট করে, তখন এটি নিজেই শুরু করতে "ইনড 2" পড়তে হয় knows

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

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

ঠিক আছে: আমরা এখন কথা বলছি।

ডিরেক্টরি ফাইলটি স্ট্রিংয়ের একটি মানচিত্র ('ফাইলের নাম') থেকে সংখ্যার (ইনোড নম্বর)। এই ইনোড নম্বরগুলি সেই ডিরেক্টরিগুলির 'ইন' থাকা ফাইলগুলির ইনোডগুলির সংখ্যা। ডিরেক্টরিতে যে ফাইলগুলিতে রয়েছে সেগুলিতে অন্য ডিরেক্টরি ফাইল অন্তর্ভুক্ত থাকতে পারে, সুতরাং তাদের ইনড নম্বরগুলি ডিরেক্টরিতে তালিকাভুক্তদের মধ্যে থাকবে। সুতরাং, আপনার যদি কোনও ফাইল থাকে /tmp/foo/bar, তবে ডিরেক্টরি ফাইলটিতে সেই ফাইলটির জন্য ইনডে স্ট্রিং ম্যাপিংয়ের fooজন্য একটি এন্ট্রি অন্তর্ভুক্ত barথাকে। ডিরেক্টরি ফাইলটিতে /tmpডিরেক্টরিতে fooথাকা 'ডিরেক্টরি' ফাইলের জন্য ডিরেক্টরি ফাইলটিতে একটি এন্ট্রিও রয়েছে /tmp

আপনি যখন mkdir (2) দিয়ে একটি ডিরেক্টরি তৈরি করেন, তখন সেই ফাংশন

  1. সঠিক অভ্যন্তরীণ কাঠামো সহ একটি ডিরেক্টরি ফাইল (কিছু ইনোড নম্বর সহ) তৈরি করে,
  2. এই নতুন ইনোডে নতুন ডিরেক্টরিটির নাম ম্যাপিং (মূল লিঙ্কগুলির মধ্যে একটির জন্য অ্যাকাউন্ট), মূল ডিরেক্টরিতে একটি এন্ট্রি যুক্ত করে,
  3. স্ট্রিং ম্যাপিং করে নতুন ডিরেক্টরিতে একটি এন্ট্রি যুক্ত করে। ' একই ইনোডে (অন্য লিঙ্কটির জন্য এটি অ্যাকাউন্ট) এবং
  4. নতুন ডিরেক্টরিতে অন্য এন্ট্রি যুক্ত করে, স্ট্রিংকে '..' ম্যাপিং করে ডিরেক্টরি ফাইলের ইনোডে এটি পদক্ষেপে (2) সংশোধন করা হয়েছে (এই ডিরেক্টরিতে আপনি যে সংখ্যক হার্ড লিঙ্কগুলি দেখবেন সেগুলি ডিরেক্টরিতে অন্তর্ভুক্ত রয়েছে যা সাব-ডিরেক্টরিতে থাকে )।

শেষ ফলাফলটি হল (প্রায়) একমাত্র বিশেষ কেস:

  • খোলা (2) ফাংশন আপনাকে লেখার জন্য ডিরেক্টরি ফাইল খুলতে বাধা দিয়ে পায়ে নিজেকে গুলি করা আরও শক্ত করার চেষ্টা করে।
  • Mkdir (2) ফাংশনটি নতুন ডিরেক্টরি ফাইলে বেশ কয়েকটি অতিরিক্ত এন্ট্রি ('।' এবং '..') যোগ করে জিনিসগুলি সুন্দর এবং সহজ করে তোলে, কেবল এটি ফাইল সিস্টেমের আশেপাশে যাওয়ার জন্য সুবিধাজনক করার জন্য make আমি সন্দেহ করি যে ফাইল সিস্টেমটি 'ছাড়া' পুরোপুরি ভালভাবে কাজ করবে। এবং '..', তবে এটি ব্যবহারে ব্যথা হবে।
  • ডিরেক্টরি ফাইলটি কয়েকটি ধরণের ফাইলগুলির মধ্যে একটি যা 'বিশেষ' হিসাবে চিহ্নিত করা হয় - এটি সত্য যা খোলা (2) এর মতো জিনিসকে কিছুটা আলাদা আচরণ করতে বলে। st_modeস্ট্যাটে দেখুন (2)।

(স্ট্যাকওভারফ্লো মূল প্রশ্ন থেকে অনুলিপি করা হয়েছে, ২০১০-১০-২০১৮)


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

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

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