যখন কোনও ডিরেক্টরি এর হার্ড লিঙ্কের সংখ্যা 0 হয়ে যায় তখন কী সরানো হয়?


10

যখন কোনও ডিরেক্টরি এর হার্ড লিঙ্কের সংখ্যা 0 হয়ে যায় তখন কী সরানো হয়?

একটি ডিরেক্টরীতে সর্বদা তার কম সংখ্যক হার্ড লিঙ্কের সংখ্যা হিসাবে কমপক্ষে 2 থাকে .। যখন rm -rকোনও ডিরেক্টরি হয়, তখন এটি কি হার্ড লিঙ্কের সংখ্যা 1 এর পরিবর্তে 2 থেকে 0 থেকে 2 এ কমিয়ে দেয়?

ডিরেক্টরিটির হার্ড লিঙ্কের সংখ্যাটি কি কখনও 1 হতে পারে?

ধন্যবাদ।

উত্তর:


9

প্রথমত সমস্ত ফাইল সিস্টেমগুলি .এবং ..হার্ড লিঙ্ক হিসাবে ব্যবহার করে না । এটি gnu ফাইন্ড ম্যানুয়ালটিতে নথিভুক্ত করা হয়েছে। আমি আমার বাকী উত্তরের জন্য সেই ফাইল সিস্টেমগুলিকে অগ্রাহ্য করব কারণ সেগুলি ইউনিক্সের জন্য ডিজাইন করা হয়নি এবং কেবল স্পষ্টতা যুক্ত না করেই বিষয়গুলিকে জটিল করে তোলা হয়েছে। আমি একই কারণে মূল ডিরেক্টরি এবং মাউন্ট পয়েন্টগুলি উপেক্ষা করতে যাচ্ছি।

ডিরেক্টরিতে লিঙ্কের সংখ্যা কখনই দুজনের চেয়ে কম হয় না কারণ .এবং ..। উপ-ডিরেক্টরিগুলির সংখ্যা লিংক বিয়োগ দুটি সংখ্যার সমান। এর কারণে আপনি কোনও ডিরেক্টরিকে লিঙ্ক বা লিঙ্কমুক্ত করতে পারবেন না, সুতরাং মুছে ফেলার আগে একটি ফাইল ডিরেক্টরিতে পরিবর্তে ব্যবহার এবং ব্যবহার rm -rকরবে । দুটি সিস্টেম কলগুলি কার্নেলে সম্পূর্ণ ভিন্ন কোড পাথ ব্যবহার করে।statrmdirunlink


ধন্যবাদ। একটি ডিরেক্টরি একটি হার্ড লিঙ্ক আছে .., কেবল যখন এটি একটি উপ-ডিরেক্টরি আছে, সঠিক? সুতরাং ..একটি ডিরেক্টরি জন্য সবসময় উপস্থিত না, তাই না?
টিম

..প্রতিটি যে ডিরেক্টরি উপস্থিত হয় একটি সাব-। যা কিছু কিন্তু /যা একটি খুব তাই সমস্ত ডিরেক্টরি।

1
(1) ডিরেক্টরিতে কোনও সাবডির না থাকলে ডিরেক্টরিটির নিজস্ব কোনও হার্ড লিঙ্ক নেই ..। দির সাথে কঠিন লিঙ্কগুলি কী কী? পথের নাম সহ ফাইলটি, এবং .? (২) আপনি কেন মাউন্ট পয়েন্ট উপেক্ষা করবেন?
টিম

ডিরেক্টরিটি যদি একটি উপ ডিরেক্টরি হয়। এন্ট্রি ..পিতামাতাকে নির্দেশ করবে। একটি বিশেষ কেস হিসাবে রুট ডিরেক্টরি লিঙ্কটি নিজের দিকে ইঙ্গিত করে। এটি cd ..\..আপনি যেখানেই থাকুক না কেন প্রত্যাশিতভাবে কাজ করার অনুমতি দেয় এবং অনুরূপ কমান্ড দেয় । আপনি statকমান্ড দিয়ে পরীক্ষা করতে পারেন ।
বিলথোর

1
আপনি সঠিক যে লিঙ্ক গণনাটি কখনই 2 এর চেয়ে কম নয়, তবে এটি এর কারণে নয় ..। এটি কারণ .এবং মূল ডিরেক্টরিতে নামটি এটি নির্দেশ করে। একমাত্র ব্যতিক্রম হ'ল মূল, যার কোনও পিতামাতা নেই। তবে এটি ..নিজের দিকে ইঙ্গিত করছে, সুতরাং এটির লিঙ্ক গণনা = 2ও রয়েছে
বারমার

11

প্রচলিতভাবে ডিজাইন করা ইউএনআইএক্স ফাইল সিস্টেমের যে কোনও ফাইল যার রেফারেন্স গণনা (যেমন হার্ডলিংক কাউন্টের সমষ্টি এবং ওপেন ফাইল হ্যান্ডেলের সংখ্যা *) 0 এ পৌঁছেছে তা সরানো হয়েছে। যাইহোক, আধুনিক ইউনিক্স সিস্টেমে rmdirসিস্টেম কলটি অপসারণ .এবং ..একের পর একের চেয়ে একক ক্রিয়াকলাপে খালি ডিরেক্টরি সরিয়ে দেয় ।

যদিও historicalতিহাসিক ইউনিক্স সিস্টেমে এই সিস্টেম কলটির অস্তিত্ব ছিল না। পরিবর্তে, rmdir কমান্ডটি একটি নির্ধারিত প্রোগ্রাম ছিল ( উত্স কোডটি এখানে পাওয়া যাবে ) যা পরীক্ষা করেছিল যে কোনও ডিরেক্টরি ফাঁকা ছিল (বিশেষ এন্ট্রিগুলি ব্যতীত), এবং তারপরে মুছে ফেলা হয়েছিল ..এবং .সেই ক্রমে, এবং এরপরে ডিরেক্টরিটি নিজেই মুছে ফেলেছিল unlinkসিস্টেম কল যা কেবলমাত্র রুটকে ডিরেক্টরিতে ব্যবহার করার অনুমতি দেওয়া হয়েছিল (সুতরাং কেন কমান্ডটি নির্ধারিত ছিল)। সুতরাং, সেই সিস্টেমে ডিরেক্টরিটির লিঙ্ক গণনাটি .মুছে ফেলার পরে মুহূর্তের মধ্যে 1 হবে তবে ডিরেক্টরিটি প্যারেন্ট ডিরেক্টরি থেকে সরানোর আগে, তখন 0 হবে।

rmকমান্ড ঘটনাক্রমে, ডিরেক্টরি মুছে ফেলার থেকে রুট বাধা দিয়েছে। এবং কমান্ড rm -rকল করতে হবে rmdirডিরেক্টরিগুলি তাদের বিষয়বস্তু খালি করার পরে অপসারণ করার জন্য।

এই historicalতিহাসিক সিস্টেমগুলিতে, unlinkরুট হিসাবে চলমান কোনও প্রোগ্রাম থেকে কলটির অপব্যবহার করে rmdirবা এর সাথে রেসের শর্তে চলে যাওয়া বা mvএমন একটি প্রক্রিয়াতে একটি ফাইল তৈরি করা যার বর্তমান ডিরেক্টরি মুছে ফেলা হয়েছে (আধুনিক সিস্টেমগুলি এটি প্রতিরোধ করে) ফলে ফাইল বা ডিরেক্টরিগুলি ঝুঁকতে পারে যার 0 এর উপরে একটি হার্ডলিঙ্ক গণনা রয়েছে তবে ডিরেক্টরি ট্রিতে নেই। এই অবস্থার দ্বারা সনাক্ত করা হয়েছিল dcheckএবং fsckবেশিরভাগ ফাইল সিস্টেমে এটি শারীরিকভাবে সম্ভব থাকার কারণে এটি এখনও একটি চেক ।


ফাইল সিস্টেমগুলি, ঘটনাচক্রে, হার্ডলিংকযুক্ত ফাইল হিসাবে ডিরেক্টরিগুলি (সহ .এবং ..) প্রয়োগ করতে হবে না । এই ফাইল সিস্টেমগুলিতে, ডিরেক্টরিটির হার্ডলিঙ্ক গণনা সর্বদা হিসাবে প্রতিবেদন করা হবে 0(তবে অবশ্যই, পিতামহিত ডিরেক্টরিতে এর অস্তিত্ব 1 এর "রেফারেন্স গণনা" এর জন্য যোগ্যতা অর্জন করে)।


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

ম্যাক ওএস এক্স একটি ডিরেক্টরিতে সমস্ত সাবডাইরেক্টরির সংখ্যার পরিবর্তে লিঙ্ক গণনা হিসাবে সমস্ত ফাইলের সংখ্যা রিপোর্ট করে । তবে এটি 2 .এবং এমনকি যখন ..চলে যায়।


* এর মধ্যে রয়েছে সাধারণ উন্মুক্ত বর্ণনাকারী, মেমরি-ম্যাপযুক্ত বিভাগগুলি (উদাহরণস্বরূপ বাইনারিগুলি এবং ভাগ করে নেওয়া লাইব্রেরিগুলি সহ) এবং বর্তমান ডিরেক্টরিগুলি প্রক্রিয়া করে।


2
strcpyনির্ধারিত একটি নির্ধারিত স্থানে স্থির আকারের অ্যারেতে ... এগুলি খুব ভাল সময় ছিল!
Andrea Corbellini

@ আন্ড্রে কার্বেলিনী আসলে mkdirবিপরীতে একই জিনিসটি করতে হবে তার ভিত্তিতে একটি প্রকাশিত শোষণ রয়েছে।
র্যান্ডম 832

1
আমার মনে হয় আমি এটি পেয়েছি: securityfocus.com/archive/1/365038/2004-05-31/2004-06-06/0 :)
আন্দ্রেয়া কর্বেলিনী

সম্পর্কে জিজ্ঞাসা করছেন rmdir, ..মুছে ফেলা কি পিতামাতার ডিরেক্টরিটি সরিয়ে দেবে না ?
এডওয়ার্ড টরভাল্ডস

@ এডওয়ার্টরওয়াল্ডস না, আমি নিজেই ".." লিঙ্কটি অপসারণের কথা উল্লেখ করছি, এটি যে প্যারেন্ট ডিরেক্টরিটি নির্দেশ করে তা নয় not
র্যান্ডম 832
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.