হার্ড লিঙ্কগুলি কেন আসল জায়গাগুলির একই স্থান গ্রহণ করবে?


14

এখানে এবং এই পৃষ্ঠার চারপাশে কিছু ভাল প্রশ্নোত্তর ধন্যবাদ , আমি এখন লিঙ্কগুলি বুঝতে পারি। আমি দেখতে পাচ্ছি হার্ড লিঙ্কগুলি একই নামে আলাদা আলাদা নামের সাথে উল্লেখ করে, এবং অনুলিপিগুলি বিভিন্ন "নোড, বিভিন্ন নাম সহ Plus প্লাস সফ্ট লিঙ্কগুলির মূল ফাইলের নাম এবং পথটি তাদের ইনোড হিসাবে থাকে, তাই যদি ফাইলটি সরানো হয় তবে লিঙ্কটি ব্রেক হয়ে যায়।

সুতরাং, আমি নীচে কিছু ফাইল ("সালুটন_মোনডো। সিপি") দিয়ে যা শিখেছি তা পরীক্ষা করেছি, একটি শক্ত এবং নরম লিঙ্ক এবং একটি অনুলিপি তৈরি করেছি।

jmcf125@VMUbuntu:~$ ls -lh soft hard copy s*.cpp
-rw-rw-r-- 1 jmcf125 jmcf125 205 Aŭg 27 16:10 copy
-rw-rw-r-- 2 jmcf125 jmcf125 205 Aŭg 25 13:34 hard
-rw-rw-r-- 2 jmcf125 jmcf125 205 Aŭg 25 13:34 saluton_mondo.cpp
lrwxrwxrwx 1 jmcf125 jmcf125  17 Aŭg 27 16:09 soft -> saluton_mondo.cpp

আমি বিশ্রী দেখতে পেলাম যে হার্ড লিঙ্কটি মূল এবং তাত্ত্বিকভাবে অনুলিপিটির মতো একই আকারের। যদি হার্ড লিঙ্ক এবং আসলটি একই ইনোডটি ভাগ করে, যার মধ্যে ডেটা রয়েছে এবং কেবল ফাইলের নাম অনুসারে পৃথক হয়, তবে হার্ড লিঙ্কটি 205 বাইটের পরিবর্তে কেবল তার নামের স্থানটি গ্রহণ করবে না? বা মূল ফাইলটি যে আকারটি ls -lhফিরে আসে? তবে তারপরে আমি কীভাবে জানতে পারি যে ফাইলের নামটি কী গ্রহণ করে? এখানে এটি বলেছে যে হার্ড লিঙ্কগুলির কোনও আকার নেই। তাদের ফাইলের নামটি কি মূল ফাইলের নামের সাথে রাখা হয়? হার্ড লিঙ্কগুলির ফাইলের নাম কোথায় সংরক্ষণ করা হয়েছে?

উত্তর:


16

একটি ফাইল হ'ল মেটা ডেটা সহ একটি ইনোড যার মধ্যে পয়েন্টারগুলির একটি তালিকা কোথায় ডেটা সন্ধান করতে পারে।

অর্ডার একটি ফাইল অ্যাক্সেস করতে সক্ষম হবেন জন্য, আপনাকে করতে হবে প্রতি সংযোগ আছে একটি ডিরেক্টরিতে এটা, একটি সংযুক্ত করতে একাধিক ডিরেক্টরি এক এক বা একাধিক এন্ট্রি যোগ (ফোন ডিরেক্টরি, না ফোল্ডার যেমন ডিরেক্টরি মনে) নাম যে ফাইল সঙ্গে।

এই লিঙ্কগুলি, সেই ফাইলগুলির নাম একই ফাইলটিতে নির্দেশ করে। আসলটি এবং লিংকগুলির মধ্যে একটিও নেই। তারা ডিরেক্টরি ট্রিতে একই ফাইলে (একই ইনোড) সমস্ত অ্যাক্সেস পয়েন্ট। আপনি যখন ফাইলটির আকার ( lstatসিস্টেম কল) পান, আপনি ইনোডে সঞ্চিত তথ্য (উপরে যে মেটাডেটা উল্লেখ করেছেন) পুনরুদ্ধার করছেন, কোন ফাইলের নাম, আপনি কোন লিঙ্কটি সেই ফাইলটি উল্লেখ করার জন্য তা বিবেচনা করে না ।

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

$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a

ফাইল নম্বরটির উপরে 10486707 একটি নিয়মিত ফাইল। বর্তমান ডিরেক্টরিতে দুটি এন্ট্রি (নামের aসাথে একটি, নামের সাথে একটি b) এর সাথে লিঙ্ক রয়েছে। লিঙ্কের গণনা 2 হওয়ায় আমরা জানি যে বর্তমান ডিরেক্টরি বা অন্য কোনও ডিরেক্টরিতে সেই ফাইলটির অন্য কোনও নাম নেই। ফাইল নম্বর 10502404 হ'ল আরেকটি ফাইল, টাইপ সিমলিংকের বর্তমান সময়ের সাথে দুবার লিঙ্ক হয়েছে linked এর সামগ্রী (লক্ষ্য) আপেক্ষিক পথ "এ"।

নোট করুন যে যদি 10502404 বর্তমানের তুলনায় অন্য ডিরেক্টরিতে লিঙ্ক করা থাকে তবে এটি সাধারণত এটি কীভাবে অ্যাক্সেস করা হয়েছিল তার উপর নির্ভর করে একটি আলাদা ফাইলের দিকে নির্দেশ করবে।

$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a

2:
total 92
10608674 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar

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

আপনি লক্ষ্য করবেন যে কোনও ফাইল সরানোর জন্য সিস্টেম কল unlink। অর্থাৎ, আপনি ফাইলগুলি সরাবেন না, আপনি যে ডিরেক্টরিগুলি উল্লেখ করেছেন সেগুলি থেকে তাদের লিঙ্কমুক্ত করে দিন a খোলা)।


আহ ... এখন দেখছি। সুতরাং "হাই" নামক একটি ফাইল এবং "ajhĝjdmjefsjmksgskgjkmŝŭna" নামক এর যথাযথ অনুলিপি ঠিক একই স্থানের শুরুর দিকে নিয়ে যায়; কারণ তাদের নামগুলি সেই lstatসিস্টেম কলের জন্য গণনা করে না যা তাদের আকার পায়।
জেএমসিএফ 125

@ জেএমসিএফ 125, হ্যাঁ তাদের নামগুলির দ্বারা নেওয়া আকারটি হ'ল সংশ্লিষ্ট ডিরেক্টরিতে প্রবেশ, এটি ডিরেক্টরিগুলির ফাইল আকারে অঙ্কিত।
স্টাফেন চেজেলাস

ধন্যবাদ। আপনি কি আপনার উত্তরে অন্তর্ভুক্ত করতে পারেন? অপেক্ষা করুন, আমি আমার প্রশ্নটি প্রথমে পরিষ্কার করব।
জেএমসিএফ 125

5

হার্ড লিঙ্কটি মূলত আসল ফাইল। সুতরাং, আপনি যে আকারটি প্রতিবেদন করেছেন তা হ'ল ফাইলটির সাথে লিঙ্ক করা হচ্ছে। এটি নরম লিঙ্কগুলি যা কেবল তাদের নামের স্থান (ক্যান্ডা) গ্রহণ করে।

যতদূর ফাইল সিস্টেম সম্পর্কিত, হার্ড লিঙ্ক এবং মূল একই জিনিস, তারা একই ইনোডে নির্দেশ করে যাতে একই আকারের প্রতিবেদন করা হয়।


তবে হার্ড লিঙ্কের নাম অবশ্যই স্থান নিতে হবে, তাই না?
JMCF125

নীচে @ স্টেফান এর উত্তর দেখুন, তিনি এটি আরও ভাল ব্যাখ্যা করেছেন।
টেরডন

2
@ JMCF125 হ্যাঁ, তবে সেই স্থানটি ডিরেক্টরিতে রয়েছে। যদি আপনি পর্যাপ্ত ফাইল তৈরি করেন তবে আপনি লক্ষ্য করবেন যে ডিরেক্টরিটির আকার আরও বেড়েছে। কোনও ফাইলের আকারে এর মেটাডেটা যেমন এর নামের অন্তর্ভুক্ত থাকে না।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলিস, ধন্যবাদ, কিন্তু @ স্টাফেন ইতিমধ্যে সেই তথ্যটি দিয়ে তার উত্তর আপডেট করেছেন। এছাড়াও, এখন আমি ভাল মনে করি, নাম /নিজেই সংরক্ষণ করা হবে, যেমন যদি আপনি না cd ..মধ্যে /আপনি থাকতে /
জেএমসিএফ 125
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.