সম্প্রতি আমাকে একটি কাজের সাক্ষাত্কারের সময় জিজ্ঞাসা করা হয়েছিল। আমি সত্যই বলেছি এবং আমি জানি যে একটি প্রতীকী লিঙ্কটি কীভাবে আচরণ করে এবং কীভাবে এটি তৈরি করতে হয়, তবে হার্ড লিঙ্কটির ব্যবহার এবং এটি কীভাবে প্রতীকী থেকে পৃথক হয় তা বুঝতে পারি না।
সম্প্রতি আমাকে একটি কাজের সাক্ষাত্কারের সময় জিজ্ঞাসা করা হয়েছিল। আমি সত্যই বলেছি এবং আমি জানি যে একটি প্রতীকী লিঙ্কটি কীভাবে আচরণ করে এবং কীভাবে এটি তৈরি করতে হয়, তবে হার্ড লিঙ্কটির ব্যবহার এবং এটি কীভাবে প্রতীকী থেকে পৃথক হয় তা বুঝতে পারি না।
উত্তর:
ফাইল সিস্টেমের নীচে ফাইলগুলি ইনোড দ্বারা প্রতিনিধিত্ব করা হয়। (বা এটি একাধিক আইনোড? নিশ্চিত নয়))
ফাইল সিস্টেমের একটি ফাইল মূলত একটি ইনোডের লিঙ্ক।
একটি শক্ত লিঙ্ক, তারপরে, ঠিক একই অন্তর্নিহিত ইনোডের লিঙ্ক সহ অন্য একটি ফাইল তৈরি করে।
আপনি যখন কোনও ফাইল মুছবেন, এটি অন্তর্নিহিত ইনোডের একটি লিঙ্ক সরিয়ে ফেলবে। যখন ইনোডের সমস্ত লিঙ্ক মুছে ফেলা হয় তখনই ইনোডটি মুছে ফেলা হয় (বা ডিলেটযোগ্য / ওভার-লিখনযোগ্য)।
প্রতীকী লিঙ্কটি ফাইল সিস্টেমের অন্য নামের একটি লিঙ্ক।
একবার একটি হার্ড লিঙ্ক তৈরি হয়ে গেলে লিঙ্কটি ইনোডের হয়। মূল ফাইলটি মুছে ফেলা, নামকরণ করা, বা সরানো শক্ত লিঙ্কটিকে প্রভাবিত করবে না কারণ এটি অন্তর্নিহিত ইনোডের সাথে লিঙ্ক করে। ইনোডের ডেটাতে যে কোনও পরিবর্তন সেই ফাইলটিতে প্রতিফলিত হয় যা সেই ইনোডকে উল্লেখ করে।
দ্রষ্টব্য: হার্ড লিঙ্কগুলি কেবল একই ফাইল সিস্টেমের মধ্যে বৈধ। সিম্বলিক লিঙ্কগুলি ফাইল সিস্টেমগুলিকে স্প্যান করতে পারে কারণ এগুলি কেবল অন্য ফাইলের নাম।
কিছু দুর্দান্ত অন্তর্দৃষ্টি যা কোনও লিনাক্স (ইশ) কনসোল ব্যবহার করে সহায়তা করতে পারে।
দুটি ফাইল তৈরি করুন:
$ touch foo; touch bar
তাদের মধ্যে কিছু তথ্য প্রবেশ করুন:
$ echo "Cat" > foo
$ echo "Dog" > bar
(আসলে, আমি প্রথমে প্রতিধ্বনি ব্যবহার করতে পারতাম, কারণ এটি উপস্থিত না থাকলে ফাইলগুলি তৈরি করে ... তবে মনে রাখবেন না))
এবং যেমন প্রত্যাশিত:
$cat foo; cat bar
Cat
Dog
আসুন শক্ত এবং নরম লিঙ্কগুলি তৈরি করুন:
$ ln foo foo-hard
$ ln -s bar bar-soft
আসুন দেখুন কী ঘটেছিল:
$ ls -l
foo
foo-hard
bar
bar-soft -> bar
ফু এর নাম পরিবর্তন করা কোনও বিষয় নয়:
$ mv foo foo-new
$ cat foo-hard
Cat
ফাইলটির ইনড, বিষয়বস্তুগুলিতে ফু-হার্ড পয়েন্টস - এটি পরিবর্তন করা হয়নি।
$ mv bar bar-new
$ ls bar-soft
bar-soft
$ cat bar-soft
cat: bar-soft: No such file or directory
ফাইলটির বিষয়বস্তু সন্ধান করা যায়নি কারণ নরম লিঙ্কটি নামের দিকে নির্দেশ করে, এটি পরিবর্তিত হয়েছিল, এবং সামগ্রীতে নয়।
তেমনি, যদি foo
মুছে ফেলা হয়, foo-hard
তবুও বিষয়বস্তু ধারণ করে; যদি bar
মুছে ফেলা bar-soft
হয় তবে এটি একটি অ-বিদ্যমান ফাইলের লিঙ্ক।
touch blah1; touch blah2
সংক্ষিপ্ত করা যেতে পারেtouch blah1 blah2
প্রবাদটি যেমন চলে যায়, একটি ছবির হাজার শব্দের মূল্য রয়েছে। আমি এখানে এটি কীভাবে দেখি:
আমরা কীভাবে সেই ছবিটিতে পৌঁছলাম:
myfile.txt
ফাইল সিস্টেমে এমন একটি নাম তৈরি করুন যা একটি নতুন ইনোডকে নির্দেশ করবে (যার মধ্যে ফাইলের মেটাডেটা রয়েছে এবং এতে ডেটাগুলির ব্লকগুলিকে নির্দেশ করে যা এর বিষয়বস্তুগুলি রয়েছে, যেমন "হ্যালো, ওয়ার্ল্ড!" পাঠ্য:
$ echo 'Hello, World!' > myfile.txt
my-hard-link
ফাইলটিতে একটি হার্ড লিঙ্ক তৈরি করুন myfile.txt
যার অর্থ "একই ফাইলের মধ্যে একটি ফাইল তৈরি করা উচিত যা একই ইনোডকে myfile.txt
নির্দেশ করবে":
$ ln myfile.txt my-hard-link
my-soft-link
ফাইলটিতে একটি নরম লিঙ্ক তৈরি করুন myfile.txt
যার অর্থ "একটি ফাইল তৈরি করুন যা ফাইলটির দিকে নির্দেশ করবে myfile.txt
":
$ ln -s myfile.txt my-soft-link
myfile.txt
মুছে ফেলা হলে (বা সরিয়ে নেওয়া) এখন কী হবে তা দেখুন : my-hard-link
এখনও একই বিষয়বস্তুগুলিতে ইঙ্গিত করে এবং এইভাবে প্রভাবিত হয় না, my-soft-link
এখন এখন কিছুই দেখায় না। অন্যান্য উত্তরগুলি প্রতিটির পক্ষে ভাল / ধারণা নিয়ে আলোচনা করে।
myfile.txt
)। নরম লিঙ্কটির জন্য, এটির রেফারেন্সটি ইনোড নয় (এতে ডেটা রয়েছে), বরং এটির রেফারেন্সটি হ'ল ফাইল সিস্টেমের পথ myfile.txt
(উদাহরণস্বরূপ /home/Documents/myfile.txt
)
মূল লিঙ্কটি চারপাশে সরানো হলে হার্ড লিঙ্কগুলি কার্যকর হয়। উদাহরণস্বরূপ, / বিন থেকে / ইউএসআর / বিন বা / ইউএসআর / স্থানীয় / বিনে কোনও ফাইল সরিয়ে নেওয়া। / বিনে ফাইলটিতে যে কোনও সিমলিংক এটির মাধ্যমে ভেঙে ফেলা হবে, তবে হার্ডলিংক, ফাইলটির জন্য সরাসরি ইনোডের লিঙ্ক হওয়ার কারণে, এটি পাত্তা দেবে না।
হার্ড লিঙ্কগুলি কেবলমাত্র একটি ডিরেক্টরি এন্ট্রি গ্রহণ করায় ডিস্কের জায়গা কম নিতে পারে, অন্যদিকে একটি সিমলিংকের যে নামটির দিকে ইঙ্গিত করা হয় সেটিকে সংরক্ষণ করার জন্য তার নিজস্ব ইনোড প্রয়োজন।
হার্ড লিঙ্কগুলি সমাধান করতেও কম সময় নেয় - সিমলিংকগুলি অন্যান্য সিমলিংকের দিকে নির্দেশ করতে পারে যা সিমলিঙ্কযুক্ত ডিরেক্টরিতে রয়েছে। এবং এর কয়েকটি এনএফএস বা অন্যান্য উচ্চ-ল্যাটেন্সি ফাইল সিস্টেমে থাকতে পারে এবং এর ফলে নেটওয়ার্ক ট্র্যাফিকের সমাধান হতে পারে। হার্ড লিঙ্কগুলি সর্বদা একই ফাইল সিস্টেমে থাকায় সর্বদা একক চেহারাতে সমাধান করা হয় এবং নেটওয়ার্ক ল্যাটেন্সিটি কখনই জড়িত না (যদি এটি কোনও এনএফএস ফাইল সিস্টেমে একটি হার্ডলিঙ্ক হয় তবে এনএফএস সার্ভারটি রেজোলিউশনটি করবে এবং এটি অদৃশ্য হবে) ক্লায়েন্ট সিস্টেম)। কখনও কখনও এটি গুরুত্বপূর্ণ। আমার জন্য নয়, তবে আমি উচ্চ-পারফরম্যান্স সিস্টেমগুলি কল্পনা করতে পারি যেখানে এটি গুরুত্বপূর্ণ হতে পারে।
আমি এমএমএপ (2) এবং এমনকি উন্মুক্ত (2) এর মতো ফাইলগুলি ফাইলের ইনোডকে সক্রিয় রাখতে হার্ডলিঙ্কগুলির মতো একই কার্যকারিতা ব্যবহার করে যাতে ফাইলটি লিঙ্কমুক্ত (2) এড হয়ে গেলেও প্রক্রিয়াটি অব্যাহত অ্যাক্সেসের অনুমতি দেওয়ার জন্য ইনোডটি থেকে যায়, এবং কেবল একবার প্রক্রিয়াটি বন্ধ হয়ে গেলে ফাইলটি সত্যই দূরে যায়। এটি অনেক বেশি নিরাপদ অস্থায়ী ফাইলগুলির জন্য অনুমতি দেয় (যদি আপনি অ্যাটমিকভাবে ওপেন এবং লিঙ্ক সংঘটন করতে পারেন তবে এটির জন্য একটি পসিক্স এপিআই থাকতে পারে যা আমি মনে করি না, তবে আপনার কাছে সত্যিকারের একটি নিরাপদ অস্থায়ী ফাইল রয়েছে) যেখানে আপনি পড়তে / লিখতে পারবেন আপনার ডেটা অ্যাক্সেস করতে সক্ষম না হয়ে। ঠিক আছে, এটি আগে সত্য ছিল / proc প্রত্যেককে আপনার ফাইল বর্ণনাকারীর দিকে নজর দেওয়ার ক্ষমতা দিয়েছিল তবে এটি অন্য গল্প।
যার কথা বলার পরে, প্রক্রিয়া A এ খোলা একটি ফাইল পুনরুদ্ধার করা, তবে ফাইল সিস্টেমে লিঙ্কযুক্ত না থাকা ইনড লিঙ্কগুলি পুনরায় তৈরি করতে হার্ডলিঙ্কগুলি ব্যবহার করে ঘুরে বেড়ায় যাতে যে ফাইলটি খোলা আছে তা বন্ধ হয়ে যায় বা চলে যায় তখন ফাইলটি যায় না।
সফট লিঙ্ক :
নরম বা প্রতীক চিহ্নটি মূল ফাইলটির শর্ট কাট এর বেশি .... আপনি যদি শর্টকাটটি মুছে ফেলেন তবে শর্টকাট ব্যর্থ হয় এবং আপনি যদি শর্টকাটটি মুছুন তবে মূলটির সাথে কিছুই হয় না।
নরম লিঙ্ক সিনট্যাক্স :ln -s Pathof_Target_file link
আউটপুট: link -> ./Target_file
প্রমাণ: readlink link
এছাড়াও ls -l link
আউটপুট আপনি প্রথম অক্ষর বড় দেখতে হবে lrwxrwxrwx
যেমন ঠ যা লক্ষণ যে ফাইল একটি নরম লিঙ্ক।
লিঙ্কটি মোছা হচ্ছে: unlink link
দ্রষ্টব্য: আপনি যদি চান তবে আপনার সফটলিঙ্কটি বর্তমান দির থেকে অন্য কোথাও সরিয়ে যাওয়ার পরেও কাজ করতে পারে। নরম লিঙ্কটি তৈরি করার সময় আপনি নিখুঁত পথটি দিয়েছেন এবং আপেক্ষিক পাথটি দিচ্ছেন না তা নিশ্চিত করুন। উদাহরণস্বরূপ (/ root / ব্যবহারকারী / টার্গেট_ফাইল থেকে শুরু করে এবং। / টার্গেট_ফাইলে নয়)
হার্ড লিঙ্ক:
হার্ড লিঙ্কটি মিরর অনুলিপি বা একই ফাইলটিতে একাধিক পাথ। ফাইল 1-এ কিছু করুন এবং এটি ফাইল 2 এ প্রদর্শিত হবে one একটি মুছে ফেলা অন্যটিকে ঠিক রাখে।
ইনড (বা ফাইল) কেবল তখনই মুছে ফেলা হয় যখন সমস্ত (হার্ড) লিঙ্কগুলি বা (একই ফাইল) ইনোডের সমস্ত পথ মুছে ফেলা হয়।
একবার একটি হার্ড লিঙ্ক তৈরি হয়ে গেলে লিঙ্কটিতে মূল ফাইলটির ইনোড থাকে। মূল ফাইলটির নাম পরিবর্তন করা বা মুছলে মুছলে শক্ত লিঙ্কটি প্রভাবিত হবে না কারণ এটি অন্তর্নিহিত ইনোডের সাথে লিঙ্ক করে। ইনোডের ডেটাতে যে কোনও পরিবর্তন সেই ফাইলটিতে প্রতিফলিত হয় যা সেই ইনোডকে উল্লেখ করে।
হার্ড লিঙ্ক সিনট্যাক্স :ln Target_file link
আউটপুট: টার্গেটফিলের মতো একই ইনোড নম্বর দিয়ে নাম লিঙ্কযুক্ত একটি ফাইল তৈরি করা হবে।
প্রুফ: ls -i link Target_file
(তাদের ইনোডগুলি পরীক্ষা করুন)
লিঙ্কটি মোছা হচ্ছে: rm -f link
(সাধারণ ফাইলের মতোই লিঙ্কটি মুছুন)
দ্রষ্টব্য : সিম্বলিক লিঙ্কগুলি ফাইল সিস্টেমগুলি স্প্যান করতে পারে কারণ সেগুলি কেবল অন্য কোনও ফাইলের নাম। যেখানে হার্ড লিঙ্কগুলি কেবল একই ফাইল সিস্টেমের মধ্যে বৈধ।
প্রতীকী লিঙ্কগুলিতে কিছু বৈশিষ্ট্য রয়েছে হার্ড লিঙ্কগুলি অনুপস্থিত:
আপনি তাত্ক্ষণিকভাবে জানেন যেখানে প্রতীকী লিঙ্কটি হার্ড লিঙ্কগুলির সাথে ইঙ্গিত করে, একই ইনোড ভাগ করে নেওয়ার ফাইলগুলি খুঁজতে আপনাকে পুরো ফাইল সিস্টেমটি অন্বেষণ করতে হবে।
# find / -inum 517333
/home/bobbin/sync.sh /root/synchro
হার্ড-লিঙ্কগুলি ডিরেক্টরিতে নির্দেশ করতে পারে না।
হার্ড লিঙ্কগুলির দুটি সীমাবদ্ধতা রয়েছে:
একটি হার্ড লিঙ্ক এবং একটি প্রতীকী লিঙ্কের মধ্যে পার্থক্যটি দেখার একটি সহজ উপায় হল একটি সাধারণ উদাহরণ। একটি ফাইলের একটি হার্ড লিঙ্কটি সেই স্থানটি নির্দেশ করবে যেখানে ফাইলটি সঞ্চয় করা আছে, বা সেই ফাইলটির ইনোড। একটি প্রতীকী লিঙ্কটি আসল ফাইলটিতে নিজেই নির্দেশ করবে।
সুতরাং যদি আমাদের কাছে "a" নামে একটি ফাইল থাকে এবং একটি হার্ড লিঙ্ক "বি" এবং একটি প্রতীকী লিঙ্ক "সি" তৈরি করে যা সকলেই ফাইল "এ" উল্লেখ করে:
echo "111" > a
ln a b
ln -s a c
"A", "b" এবং "c" এর আউটপুট হবে:
cat a --> 111
cat b --> 111
cat c --> 111
এখন ফাইল "ক" মুছে ফেলুন এবং দেখুন "ক", "বি" এবং "সি" এর আউটপুটটির কি হবে:
rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory
তাহলে কি হয়েছে?
কারণ ফাইল "সি" ফাইলটি "এ" নিজেই নির্দেশ করে, যদি "a" ফাইলটি মুছে ফেলা হয় তবে ফাইল "সি" ফাইলটিতে নির্দেশ করার কিছুই থাকবে না, বাস্তবে এটিও মুছে ফেলা হয়।
তবে ফাইল "বি" ফাইল "এ" ফাইলের সঞ্চয় স্থান বা ইনোডের দিকে নির্দেশ করে। সুতরাং যদি ফাইল "এ" মুছে ফেলা হয় তবে এটি আর ইনোডের দিকে নির্দেশ করবে না, তবে "বি" ফাইলটি করার ফলে ইনোডটি "এ" এর সাথে সম্পর্কিত যে কোনও বিষয়বস্তু আর কোনও হার্ড লিঙ্কগুলিতে নির্দেশ না করা অবধি সংরক্ষণ করবে।
প্রতীকী লিঙ্কগুলি একটি নামের নামের সাথে লিঙ্ক করে। এটি সিস্টেমের ফাইল গাছের যে কোনও জায়গায় থাকতে পারে এবং লিংকটি তৈরি হওয়ার পরেও উপস্থিত থাকতে হবে না। লক্ষ্য পথ আপেক্ষিক বা পরম হতে পারে।
হার্ড লিঙ্কগুলি একটি ইনোডের অতিরিক্ত পয়েন্টার, যার অর্থ কেবলমাত্র লক্ষ্য হিসাবে একই ভলিউমে থাকতে পারে। কোনও ফাইলের অতিরিক্ত হার্ড লিঙ্কগুলি কোনও ফাইলের রেফারেন্সের জন্য ব্যবহৃত "মূল" নাম থেকে পৃথক পৃথক।
আমি আপনাকে উইকিপিডিয়ায় নির্দেশ করব:
কয়েকটি বিষয়:
ইনক্রিমেন্টাল ব্যাকআপগুলি করার সময় হার্ড লিঙ্কগুলি খুব কার্যকর। উদাহরণস্বরূপ, আরএসএন্যাপশট দেখুন । হার্ড লিঙ্কগুলি ব্যবহার করে অনুলিপি করার ধারণাটি রয়েছে:
নতুন ব্যাকআপটি আপনি যে কোনও পরিবর্তন করেছেন সেগুলি ছাড়া কোনও অতিরিক্ত স্থান গ্রহণ করবে না, যেহেতু সমস্ত ইনক্রিমেন্টাল ব্যাকআপগুলি ফাইলগুলির জন্য একই সেট ইনোডগুলিতে নির্দেশ করবে যা কোনও পরিবর্তন হয়নি।
আমি নিকের প্রশ্নটি যুক্ত করছি: হার্ড লিঙ্কগুলি কখন দরকারী বা প্রয়োজনীয়? আমার মনে একমাত্র অ্যাপ্লিকেশন আসে যা প্রতীকী লিঙ্কগুলি কাজ করবে না, একটি ক্রোয়েড পরিবেশে সিস্টেম ফাইলের একটি অনুলিপি সরবরাহ করছে।
একটি প্রতীকী লিঙ্কটি একটি ফাইল-সিস্টেম অবজেক্ট যা অন্য কোনও ফাইল সিস্টেমের অবজেক্টকে নির্দেশ করে। যে বস্তুটির দিকে ইশারা করা হচ্ছে তাকে লক্ষ্য বলে।
প্রতীকী লিঙ্কগুলি ব্যবহারকারীদের কাছে স্বচ্ছ; লিঙ্কগুলি সাধারণ ফাইল বা ডিরেক্টরি হিসাবে প্রদর্শিত হয় এবং ব্যবহারকারী বা অ্যাপ্লিকেশন দ্বারা ঠিক একই পদ্ধতিতে কাজ করতে পারে।
প্রতীকী লিঙ্কগুলি ইউএনআইএক্স অপারেটিং সিস্টেমের সাথে মাইগ্রেশন এবং অ্যাপ্লিকেশনের সামঞ্জস্যের ক্ষেত্রে সহায়তা করার জন্য ডিজাইন করা হয়েছে। মাইক্রোসফ্ট ইউনিক্স লিঙ্কের মতোই কাজ করতে তার প্রতীকী লিঙ্কগুলি কার্যকর করেছে।
প্রতীকী লিঙ্কগুলি হয় নিরঙ্কুশ বা আপেক্ষিক লিঙ্ক হতে পারে। পরম লিঙ্কগুলি লিঙ্কগুলি যা পথের নামের প্রতিটি অংশ নির্দিষ্ট করে; আপেক্ষিক লিঙ্কগুলি নির্ধারিত হয় যেখানে সম্পর্কিত – লিঙ্ক নির্দিষ্টকরণ নির্দিষ্ট স্থানে থাকে to
পরম প্রতীক লিঙ্কের একটি উদাহরণ
X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"
আপেক্ষিক প্রতীকী লিঙ্কগুলির একটি উদাহরণ
X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"
একটি হার্ড লিঙ্ক হ'ল একটি ফাইলের ফাইল সিস্টেমের প্রতিনিধিত্ব যার দ্বারা একাধিক পাথ একই ভলিউমে একটি ফাইলকে রেফারেন্স করে ।
উইন্ডোগুলিতে একটি হার্ড লিঙ্ক তৈরি করতে, লিংকটি তৈরি করতে হবে সেখানে যান এবং এই আদেশটি প্রবেশ করুন:
mklink /H Link_name target_path
দ্রষ্টব্য যে আপনি যে কোনও অর্ডারে তৈরি করা হয়েছে তা নির্বিশেষে হার্ড লিঙ্কগুলি যে কোনও অর্ডার মুছতে পারেন। এছাড়াও, যখন হার্ড লিঙ্কগুলি তৈরি করা যায় না
এনটিএফএস জংশন নামক আর একটি লিঙ্ক প্রকারকে সমর্থন করে। এমএসডিএন এটি নীচে সংজ্ঞায়িত করেছে:
একটি জংশন (একটি সফট লিঙ্কও বলা হয়) একটি হার্ড লিঙ্ক থেকে পৃথক যে স্টোরেজ অবজেক্টের উল্লেখ রয়েছে এটি পৃথক ডিরেক্টরি এবং একটি জংশন একই কম্পিউটারে বিভিন্ন স্থানীয় ভলিউমে অবস্থিত ডিরেক্টরিগুলি লিঙ্ক করতে পারে । অন্যথায়, জংশনগুলি হার্ড লিঙ্কগুলিতে অভিন্নভাবে কাজ করে।
হার্ড লিঙ্ক বিভাগ এবং জংশন বিভাগের গাed় অংশগুলি উভয়ের মধ্যে মূল পার্থক্য দেখায়।
উইন্ডোতে একটি জংশন তৈরির আদেশ, লিঙ্কটি যেখানে তৈরি করা হবে সেখানে নেভিগেট করুন এবং তারপরে প্রবেশ করুন:
mklink /J link_name target_path
এছাড়াও:
সহজভাবে, হার্ড লিঙ্ক: একটি ফাইলের মধ্যে কেবল নতুন নাম যুক্ত করা হয়, তার অর্থ, একই সময়ে একটি ফাইলের অনেকগুলি নাম থাকতে পারে, সমস্ত নাম একে অপরের সাথে সমান, কেউ পছন্দ করে না, হার্ড লিঙ্কটি সমস্ত বিষয়বস্তু অনুলিপি করা নয় ফাইলের ফাইল এবং নতুন ফাইল তৈরি করা তা নয়, এটি কেবল পরিচিত একটি বিকল্প নাম জানা যায় ..
সিম্বলিক লিঙ্ক (সিমলিংক): অন্য একটি ফাইলের জন্য একটি ফাইল পয়েন্টার, যদি প্রতীকী লিঙ্কটি কোনও বিদ্যমান ফাইলকে পরে মুছে ফেলা হয়, তবে প্রতীকী লিঙ্কটি একই ফাইলটির নাম ধরে রাখবে যদিও নামটি আর কোনও ফাইলের নাম রাখে না names
আপনি একটি সাধারণ "ফাইল" হিসাবে যা ভাবেন তা আসলে দুটি পৃথক জিনিস: কোনও ফাইলের ডেটা এবং ডিরেক্টরি এন্ট্রি। আপনি যখন কোনও ফাইলের জন্য একটি হার্ড লিঙ্ক তৈরি করেন, আপনি আসলে দ্বিতীয় ডিরেক্টরি এন্ট্রি তৈরি করেন যা একই তথ্যকে বোঝায়। উভয় ডিরেক্টরি এন্ট্রি ঠিক একই কার্যকারিতা আছে; এটি পড়ার জন্য প্রত্যেককেই ফাইলটি খোলার জন্য ব্যবহার করা যেতে পারে। সুতরাং আপনার কাছে "ফাইল যুক্ত একটি হার্ড লিঙ্ক" নেই, আপনার কাছে "দুটি ডিরেক্টরি এন্ট্রি সহ ফাইল ডেটা" রয়েছে। আপনি কোনও ফাইল মুছে ফেলা হিসাবে যা ভাবেন তা আসলে একটি ডিরেক্টরি এন্ট্রি মুছে দেয় এবং যখন ডেটার জন্য শেষ ডিরেক্টরি এন্ট্রি মুছে ফেলা হয়, তখন ডেটা নিজেই মুছে ফেলা হয়। কেবলমাত্র একটি ডিরেক্টরি এন্ট্রি থাকা সাধারণ ফাইলগুলির জন্য ডিরেক্টরি এন্ট্রি মোছা ডেটা বরাবরের মতো মুছে ফেলবে। (একটি ফাইল খোলার সময়, ওএস ফাইলের জন্য একটি অস্থায়ী লিঙ্ক তৈরি করে,
উদাহরণস্বরূপ, A.txt একটি ফাইল তৈরি করুন, একটি হার্ড লিঙ্ক B.txt, এবং A.txt মুছুন। আপনি A.txt তৈরি করার সময় কিছু ডেটা তৈরি হয়েছিল এবং ডিরেক্টরিতে এন্টেক্স এন্টেক্স করা হবে। আপনি যখন হার্ড লিঙ্কটি তৈরি করেছিলেন, তখন একই ডিরেক্টরিটি নির্দেশ করে অন্য ডিরেক্টরি এন্ট্রি B.txt তৈরি করা হয়েছিল। আপনি যখন A.txt মুছবেন, তখনও আপনার কাছে সমস্ত ডেটা এবং একটি একক ডিরেক্টরি এন্ট্রি B.txt থাকে ঠিক ঠিক যেন আপনি প্রথম স্থানটিতে একটি B.txt ফাইল তৈরি করেছেন।
একটি সফট লিঙ্কটি কেবলমাত্র একটি (প্রায়) সাধারণ ফাইল, এটিতে ডেটা থাকে না তবে অন্য ডিরেক্টরি প্রবেশের পথ। আপনি যদি নরম লিঙ্কটি উল্লেখ করে সেই ফাইলটি মুছে ফেলেন, তবে নরম লিঙ্কটিতে এমন একটি পথ থাকবে যা কোনও ডিরেক্টরিতে প্রবেশের নির্দেশ দেয় না; এটা ভেঙ্গে গেছে. আপনি যদি নরম লিঙ্কটি মুছে ফেলেন তবে এটি অন্য কোনও ফাইল মোছার মতো, এটি যে ফাইলটি নির্দেশ করে তা অকার্যকর।
একটি ডিরেক্টরি এন্ট্রি একটি কাঠামোর লিঙ্ক:
struct dentry{
ino_t ino;
char name[256];
}
ইনো হ'ল ইনোডের সংখ্যা, নামটি ফাইলের নাম, ইনোড কাঠামো সম্ভবত like
struct inode{
link_t nlink;
...
}
উদাহরণস্বরূপ আপনি একটি ফাইল / 1 তৈরি করেন, ডিরেক্টরি এন্ট্রি সম্ভবত পছন্দ করে:
struct dentry{
ino_t ino; /* such as 15 */
char name[256]; /* "1" */
}
ইনোড স্ট্রাক্ট এর মতো হতে পারে:
struct inode{ /* inode number 15 */
link_t nlink; /* nlink = 1 */
...
}
তারপরে আপনি একটি হার্ড লিঙ্ক তৈরি করতে পারেন (হতে পারে / 100), ডিরেক্টরি এন্ট্রি হতে পারে:
struct dentry{
ino_t ino; /* 15 */
char name[256]; /* 100 */
}
ইনোড স্ট্রাক্ট এর মতো হতে পারে:
struct inode{ /* inode numebr 15 */
link_t nlink; /* nlink = 2 */
...
}
তারপরে আপনি 1 ফাইল করতে একটি প্রতীকী লিঙ্ক তৈরি করতে পারেন (200 / হতে পারে), ডিরেক্টরি এন্ট্রি হতে পারে:
struct dentry{
ino_t ino; /* such as 16 */
char name[256]; /* "200" */
}
ইনোড স্ট্রাক্ট এর মতো হতে পারে:
struct inode{ /* inode number 15 */
link_t nlink; /* nlink = 2 */
...
}
struct inode{ /* inode number 16 */
link_t nlink; /* nlink = 1 */
...
} /* the data of inode 16 maybe /1 or 1 */
উপরের সমস্ত উত্তর যুক্ত করে, হার্ডলিঙ্ক এবং সফটলিঙ্ক ফাইল অনুসন্ধানের পার্থক্যটি নীচের হিসাবে বোঝা যাবে:
আমার f6
আমার বর্তমান ডিরেক্টরিতে একটি ফাইল রয়েছে, পাশাপাশি একটি ডিরেক্টরিও রয়েছে t2
।
ফাইলটির নাম দেওয়া হয়েছে f1
এবং ./t2/f2
এর প্রতীকী লিঙ্কগুলি f6
।
ফাইলটির নাম দেওয়া হয়েছে f7
এবং ./t2/f8
এর হার্ড লিঙ্কগুলি f6
।
নরম পাশাপাশি হার্ড লিঙ্কটি সন্ধান করতে আমরা ব্যবহার করতে পারি:
$ find -L . -samefile f6
> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8
কেবলমাত্র হার্ডলিঙ্কটি খুঁজতে আমরা ব্যবহার করতে পারি:
$ find . -xdev -samefile f6
> ./f6
> ./f7
> ./t2/f8
যেহেতু হার্ডলিঙ্কগুলি একই ফাইল সিস্টেমে তৈরি করা যায়, তাই আমরা একই ফাইল-সিস্টেম / মাউন্ট-পয়েন্টে বিকল্প -L
( -xdev
বিকল্প সহ) ব্যবহার না করে সমস্ত হার্ডলিঙ্কগুলি অনুসন্ধান করতে পারি । এটি অপ্রয়োজনীয় অনুসন্ধানকে বিভিন্ন মাউন্ট পয়েন্টে সংরক্ষণ করে।
সুতরাং হার্ডলিঙ্কটি অনুসন্ধান করা কিছুটা দ্রুত এবং সফটলিঙ্কগুলি অনুসন্ধান করা (দয়া করে আমি ভুল হয়েছি বা পরিষ্কার না হলে সংশোধন করুন)।
প্রতীকী লিঙ্কগুলি হার্ড লিঙ্কগুলির অনুরূপ কোনও ফাইলকে অন্য একটি নাম দেয়। বাকী প্রতীকী লিঙ্কগুলি থাকা সত্ত্বেও কোনও ফাইল মোছা যায়।
ব্যবহারে আমার দুটি সেন্ট:
সফট লিঙ্কগুলি দীর্ঘ পথের নামগুলি সংক্ষিপ্ত করতে ব্যবহৃত হতে পারে, যেমন:
ln -s /long/folder/name/on/long/path/file.txt /short/file.txt
করা পরিবর্তনগুলি /short/file.txt
মূল ফাইলটিতে প্রয়োগ করা হবে।
বড় বড় ফাইলগুলি ঘুরে দেখার জন্য হার্ড লিঙ্কগুলি ব্যবহার করা যেতে পারে:
$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin
ln /myapp/dev/application.bin /myapp/prd/application.bin
বিভিন্ন ফোল্ডারে তাত্ক্ষণিক অনুলিপি এবং মূল ফাইলটি (অন /myapp/dev
) ফাইলটি স্পর্শ না করেই সরানো বা মোছা হতে পারে/myapp/prd
আমি একটি সাধারণ দৃশ্যে হার্ড লিঙ্কগুলি বোঝার সহজ উপায়টি পেয়েছি, সফ্টওয়্যার ইনস্টল।
একদিন আমি Downloads
ইনস্টলের জন্য ফোল্ডারে একটি সফ্টওয়্যার ডাউনলোড করেছি । আমি করার পরে sudo make install
, কিছু এক্সিকিউটেবল cp
স্থানীয় বিন ফোল্ডারে এড করা হয়েছিল । এখানে, হার্ড লিঙ্কcp
তৈরি করে । আমি সফ্টওয়্যারটি নিয়ে খুশি হয়েছিলাম তবে শীঘ্রই বুঝতে পেরেছিলাম যে দীর্ঘ সময়ের জন্য এটি ভাল জায়গা নয়। সুতরাং আমি সফ্টওয়্যার ফোল্ডার ডিরেক্টরিতে এডিট । ওয়েল, আমি উইন্ডোজ এর মতো কোনও টার্গেট লিঙ্কের জিনিস নিয়ে চিন্তা না করে আগের মতো এখনও সফটওয়্যারটি চালাতে পারি। এর অর্থ হার্ড লিঙ্কটি সরাসরি ইনোড এবং চারপাশের অন্যান্য ফাইলগুলি সন্ধান করে।Downloads
mv
source
এই উত্তরে আমি যখন কোনও ফাইল বলি তখন মেমরির অবস্থান বোঝায়
সংরক্ষিত সমস্ত ডেটা মেমোরিতে ইনোড নামক একটি ডেটা স্ট্রাকচার ব্যবহার করে সংরক্ষণ করা হয় প্রতিটি আইনের একটি আইওনডাম্বার থাকে The ইনোড নম্বরটি ইনোড অ্যাক্সেস করতে ব্যবহৃত হয় a কোনও ফাইলের সমস্ত হার্ড লিঙ্কের বিভিন্ন নাম থাকতে পারে তবে একই ইনোড নম্বরটি ভাগ করে নিতে পারে। যেহেতু সমস্ত হার্ড লিঙ্কগুলিতে একই ইনোডেনবার থাকে (যা একই ইনোডে প্রবেশ করে) তাই এগুলি সমস্ত একই শারীরিক স্মৃতিতে নির্দেশ করে।
একটি প্রতীকী লিঙ্কটি একটি বিশেষ ধরণের ফাইল S এটি ফাইলের পরে এটির একটি ফাইলের নাম এবং একটি ইনোড নম্বরও থাকবে Aআনোড নম্বরের উপরে যেমন একটি ইনোড প্রবেশ করে যা ডেটা দেখায় ow এখন প্রতীকী লিঙ্কটি কী বিশেষ করে তা হ'ল প্রতীকী লিঙ্কগুলিতে থাকা ইনোডিং সংখ্যাগুলি সেই আইওনডগুলিতে অ্যাক্সেস করে যা অন্য কোনও ফাইলের দিকে "পাথ" দেখায় M বিশেষত প্রতীকী লিঙ্কের ইনোড নম্বরটি সেই ইনোডগুলিকে অ্যাক্সেস করে যা অন্য হার্ড লিঙ্কে নির্দেশ করে।
আমরা যখন জিইউআই-তে কোনও ফাইল সরিয়ে, অনুলিপি করে, মুছে ফেলছি তখন আমরা ফিজিকাল মেমরির পরিবর্তে ফাইলটির হার্ডলিঙ্কগুলি নিয়ে খেলি w আমরা যখন কোনও ফাইল মুছি তখন আমরা ফাইলটির হার্ডলিঙ্কটি মোছা করছি। আমরা শারীরিক স্মৃতি মুছে ফেলছি না file যদি ফাইলের সমস্ত হার্ডলিঙ্কগুলি মুছে ফেলা হয় তবে সঞ্চিত ডেটা অ্যাক্সেস করা সম্ভব হবে না যদিও এটি মেমরিতে এখনও উপস্থিত থাকতে পারে