এটি কেবল একটি খারাপ ধারণা, কারণ কোনও হার্ড লিঙ্ক এবং একটি মূল নামের মধ্যে পার্থক্য জানানোর উপায় নেই।
ডিরেক্টরিগুলিতে কঠোর লিঙ্কগুলি মঞ্জুরি দেওয়ার ফলে ফাইল সিস্টেমের নির্দেশিত অ্যাসাইক্লিক গ্রাফ কাঠামোটি ভেঙে যায়, সম্ভবত ডিরেক্টরি লুপ তৈরি হবে এবং ডিরেক্টরি সাবট্রিগুলি ঝুঁকবে, যা fsck
অন্য কোনও ফাইল ট্রি ওয়াকারদের ত্রুটির ঝুঁকিতে ফেলেছে।
প্রথমে এটি বোঝার জন্য আসুন ইনোডগুলি নিয়ে কথা বলি। ফাইল সিস্টেমে ডেটা ডিস্কের ব্লকগুলিতে রাখা হয় এবং সেগুলি ব্লকগুলি একটি ইনোড দ্বারা একসাথে সংগ্রহ করা হয়। আপনি ইনোডটিকে ফাইল হিসাবে ভাবতে পারেন। যদিও আইওনডের ফাইলের নাম নেই। লিঙ্কগুলি এখানে।
একটি লিঙ্ক একটি ইনোডের কেবলমাত্র পয়েন্টার। ডিরেক্টরি হ'ল একটি ইনোড যা লিঙ্কগুলি ধারণ করে। ডিরেক্টরিতে প্রতিটি ফাইলের নাম একটি ইনোডের লিঙ্ক। ইউনিক্সে একটি ফাইল খোলার ফলে একটি লিঙ্ক তৈরি হয় তবে এটি ভিন্ন ধরণের লিঙ্ক (এটি নামযুক্ত লিঙ্ক নয়)।
একটি হার্ড লিঙ্কটি কেবলমাত্র একটি অতিরিক্ত ডিরেক্টরি প্রবেশিকা যা সেই ইনোডকে নির্দেশ করে। যখন আপনি ls -l
, অনুমতিগুলির পরে নম্বরটি লিঙ্কযুক্ত গণনা। বেশিরভাগ নিয়মিত ফাইলগুলির একটি লিঙ্ক থাকবে। কোনও ফাইলে একটি নতুন হার্ড লিঙ্ক তৈরি করা উভয় ফাইলের নাম একই ইনোডকে নির্দেশ করবে। বিঃদ্রঃ:
% ls -l test
ls: test: No such file or directory
% touch test
% ls -l test
-rw-r--r-- 1 danny staff 0 Oct 13 17:58 test
% ln test test2
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
% touch test3
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
-rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
^
^ this is the link count
এখন, আপনি পরিষ্কার দেখতে পাচ্ছেন যে হার্ড লিঙ্কের মতো কোনও জিনিস নেই। একটি হার্ড লিঙ্ক নিয়মিত নামের মতো। উপরের উদাহরণে, test
বা test2
, মূল ফাইলটি কোনটি এবং হার্ড লিঙ্কটি কোনটি? শেষ পর্যন্ত, আপনি সত্যিই বলতে পারবেন না (এমনকি টাইমস্ট্যাম্পগুলি দিয়েও) কারণ উভয় নাম একই বিষয়বস্তু, একই ইনোডকে নির্দেশ করে:
% ls -li test*
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
14445892 -rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
-i
পতাকা ls
আপনি লাইন প্রারম্ভে inode সংখ্যার দেখায়। কীভাবে test
এবং test2
একই ইনোড নম্বর রয়েছে তা নোট করুন তবে test3
এর একটি আলাদা নম্বর রয়েছে।
এখন, যদি আপনাকে ডিরেক্টরিগুলির জন্য এটি করার অনুমতি দেওয়া হয় তবে ফাইল সিস্টেমের বিভিন্ন পয়েন্টে দুটি ভিন্ন ডিরেক্টরি একই জিনিসকে নির্দেশ করতে পারে। প্রকৃতপক্ষে, একটি সাবডির তার পিতামহীর দিকে ফিরে নির্দেশ করতে পারে, একটি লুপ তৈরি করে।
কেন এই লুপটি উদ্বেগের বিষয়? কারণ যখন আপনি ট্র্যাভারিং করছেন, আপনাকে লুপিং করছেন তা সনাক্ত করার কোনও উপায় নেই (আপনি ইনোড নম্বরগুলি ট্র্যাভার হিসাবে রাখেন না)। কল্পনা করুন আপনি du
কমান্ডটি লিখছেন , যা ডিস্ক ব্যবহার সম্পর্কে জানতে সাবডিয়ারদের মাধ্যমে পুনরাবৃত্তি করতে হবে। কীভাবে du
কখন এটি একটি লুপ আঘাত? এটি ত্রুটির প্রবণ এবং প্রচুর হিসাবরক্ষণ যা du
করতে হবে, কেবল এই সাধারণ কাজটি সরাতে।
সিমলিংকগুলি সম্পূর্ণ আলাদা জন্তু, এতে তারা একটি বিশেষ ধরণের "ফাইল" থাকে যা অনেকগুলি ফাইল ফাইল সিস্টেম এপিআই স্বয়ংক্রিয়ভাবে অনুসরণ করে। দ্রষ্টব্য, একটি সিমিলিংক একটি অস্তিত্বহীন গন্তব্যে নির্দেশ করতে পারে, কারণ তারা নামের দ্বারা নির্দেশ করে, এবং সরাসরি কোনও ইনোডে নয়। হার্ড লিঙ্কগুলির সাথে এই ধারণাটি বোঝায় না, কারণ "হার্ড লিঙ্ক" এর নিছক অস্তিত্ব মানে ফাইলটি বিদ্যমান।
তাহলে কেন du
সহজ লিঙ্কগুলি সহজেই এবং প্রতীকগুলি ব্যবহার করতে পারে? আমরা উপরে দেখতে সক্ষম হয়েছি যে হার্ড লিঙ্কগুলি সাধারণ ডিরেক্টরি এন্ট্রি থেকে পৃথক হয়। সিমলিংকগুলি তবে বিশেষ, সনাক্তযোগ্য এবং এড়াতে সক্ষম!
du
লক্ষ করুন যে সিমিলিংকটি একটি সিমিলিংক, এবং এটিকে পুরোপুরি এড়িয়ে যায়!
% ls -l
total 4
drwxr-xr-x 3 danny staff 102 Oct 13 18:14 test1/
lrwxr-xr-x 1 danny staff 5 Oct 13 18:13 test2@ -> test1
% du -ah
242M ./test1/bigfile
242M ./test1
4.0K ./test2
242M .
..
নির্দেশ করা উচিত ? বিশেষত এই ডিরেক্টরিটির হার্ড লিঙ্কটি সরিয়ে দেওয়ার পরে ডিরেক্টরিতে নির্দেশিত ডিরেক্টরিতে..
? এটি কোথাও নির্দেশ করা প্রয়োজন।