উদাহরণস্বরূপ, আমার একটি ফাইল আছে myold_file
। তারপরে আমি ln
একটি হার্ড লিঙ্ক তৈরি করতে ব্যবহার করি mylink
:
ln myold_file mylink
তারপরে, এমনকি ব্যবহার করেও ls -a
আমি বলতে পারি না কোনটি পুরানো।
যাইহোক বলার আছে কি?
উদাহরণস্বরূপ, আমার একটি ফাইল আছে myold_file
। তারপরে আমি ln
একটি হার্ড লিঙ্ক তৈরি করতে ব্যবহার করি mylink
:
ln myold_file mylink
তারপরে, এমনকি ব্যবহার করেও ls -a
আমি বলতে পারি না কোনটি পুরানো।
যাইহোক বলার আছে কি?
উত্তর:
আপনি পারবেন না, কারণ এগুলি আক্ষরিক অর্থে একই ফাইল, কেবলমাত্র বিভিন্ন পাথ দ্বারা পৌঁছে। প্রথমটির কোনও বিশেষ মর্যাদা নেই।
.bashrc
এটি একটি ফাইল রয়েছে ... "যখন আমাদের অর্থ," আপেক্ষিক পথ .bashrc
বলতে বোঝায় এমন একটি ফাইলকে বোঝায় ... ", এটি বিভাগগুলির একটি সাধারণ সংমিশ্রণ এবং আমাদের বুঝতে হবে যে যখনই কেউ এটি উল্লেখ করে কোনও পথ বা ডিরেক্টরি এন্ট্রি একটি ফাইল "থাকার" অর্থ, আমাদের বোঝায় যে ফাইলটি এটি উল্লেখ করে। এই বোঝার সাথে, দুটি হার্ড লিঙ্ক একই ফাইল "হতে" পারে। আনুষ্ঠানিক ভাষার পক্ষে এই সম্মেলনটি প্রত্যাখ্যান করা, তারা পারবে না। উভয় অবস্থানেরই তাদের জায়গা রয়েছে :-)
এটি করার কোনও প্রত্যক্ষ, পরিষ্কার (নির্ভরযোগ্য) উপায় নেই। তবে উপযুক্ত পরিস্থিতিতে এটি সম্ভব (বা কমপক্ষে সম্ভাব্য)। সমস্যাটি হ'ল দুটি হার্ড লিঙ্ক আছে তবে কেবল একটি ফাইল। পরিবর্তন, পরিবর্তন এবং (সম্ভবত) তৈরির সময় কেবল ফাইল (আইনোড) এর জন্য সংরক্ষণ করা হয় তবে ডিরেক্টরি এন্ট্রিগুলির জন্য নয় (হার্ড লিঙ্কগুলি)। সুতরাং আপনি যে তথ্য চান তা কেবলমাত্র মাধ্যমিক প্রভাব থেকে নেওয়া যেতে পারে যা ফাইলের সাথে সম্পর্কিত নয় এমন ক্রিয়াকলাপগুলি দ্বারা সহজেই ধ্বংস করা যায়। এমনকি আপনি এটি দেখতে পেলেন না যে এটি ধ্বংস হয়েছে। আপনি কেবল সেগুলি সম্পর্কে জানতে পারবেন যদি আপনি তাদের সম্পর্কে অবিকল সচেতন হন।
হার্ড লিঙ্কটি তৈরি করা লিঙ্কটি অন্তর্ভুক্ত ডিরেক্টরিটিতে একটি রাইটিং অপারেশন। সুতরাং এটি ডিরেক্টরি আপডেট করে mtime
। সুতরাং যদি
লিঙ্কগুলি বিভিন্ন ডিরেক্টরিতে রয়েছে
এবং আপনি জানেন যে দ্বিতীয় হার্ড লিঙ্কটি তৈরি হওয়ার পরে এই ডিরেক্টরিগুলির কোনওটিরই পরিবর্তন করা হয়নি (ফাইল যুক্ত, মুছে ফেলা, নাম পরিবর্তন করা বা ফাইলের মেটাডেটা পরিবর্তন) তবে আপনি কেবল ডিরেক্টরিগুলির সাথে তুলনা করতে পারেন mtime
।
বিশেষ কেস: যদি কোনও ডিরেক্টরিতে mtime
ফাইলের (আইওনডের) পূর্বে থাকে mtime
এবং আপনি যুক্তিসঙ্গতভাবে নিশ্চিত হতে পারেন যে ফাইলটি তৈরি হওয়ার পরে একটি মুহুর্তের পরে লেখা হয়নি তবে এই ডিরেক্টরিটির লিঙ্কটি পুরানো এটি।
লিঙ্কগুলি যদি একই ডিরেক্টরিতে থাকে (যা আপনার প্রশ্নের ক্ষেত্রে মনে হয়) তবে এটি আরও খারাপ হয়। তারপরে আপনি ব্যবহার করতে পারেন
ls -lU
ক্রম যাতে প্রবেশগুলি তৈরি করা হয়েছে তার একটি ধারণা পেতে। এটিকে সঠিক ক্রমের দরকার নেই কারণ এন্ট্রি মুছতে পারে যাতে ডিরেক্টরি তালিকার মাঝখানে নতুন এন্ট্রি করা যায়। গিলস যেহেতু ইঙ্গিত করেছেন এটি নতুন ফাইল সিস্টেমগুলির সাথে মোটেও কাজ করে না।
ls -lU
কৌশলটি আধুনিক ফাইল সিস্টেমগুলিতে (এক্সট 4, বিটিআরএফএস, জেডএফএস) কাজ করবে না, সেখানে এন্ট্রিগুলি ক্রম ক্রম হিসাবে প্রদর্শিত হয় না।
rm myold_file
তবে mylink
এখনও বিদ্যমান থাকবে এবং নিখুঁতভাবে কাজ করবে, কারণ এটি একই অন্তর্নিহিত ইনোডকে উল্লেখ করে সমানভাবে উত্তম এন্ট্রি is উভয়ই মুছে ফেলা হয়েছে কেবল তখনই সিস্টেমটি ইনোডটি বাতিল করতে পারে। একবার একই লিঙ্কটি উল্লেখ করে দুটি ফাইল সিস্টেম এন্ট্রি তৈরি করতে হার্ড লিঙ্কিং ব্যবহার করা হলে, তারা সমতুল্য। । (নোট যে "ফাইল" এখানে মানে "একটি inode হিসাবে একটি ডিরেক্টরি উল্টোদিকে যে, একটি ফাইল জন্য তথ্য ঝুলিতে) দেখুন: en.wikipedia.org/wiki/Inode
আপনি যদি ডিরেক্টরিগুলির শেষ সংশোধন সময়ের উপর নির্ভর করেন এবং কীভাবে এবং কখন সেই ডিরেক্টরিগুলি পরিবর্তন করা হয় তা আপনি জানেন না, এমটাইম উপর নির্ভর করা আপনাকে সময়ের কিছু শতাংশ ভুল হতে পরিচালিত করবে। এখানে সমস্যাটি হ'ল ফাইলটি কোনও সিস্টেমের প্রবেশের দ্বারা নয়, একটি ইনোড দ্বারা ফাইল-সিস্টেমে প্রতিনিধিত্ব করা হয়। ডিরেক্টরি এন্ট্রি (ফাইলের নাম) ফাইল নয়, ইনোডে নির্দেশ করে।
আমি মনে করি যে আমি কেন কোনও ডিরেক্টরি এন্ট্রি পুরানো এবং কীভাবে এটি জানার প্রয়োজন এড়াতে হবে তা কেন জানতে হবে তা নিয়ে আমি কিছু নাভি দেখছিলাম।
আমি মনে করি এই প্রশ্নটি (যথেষ্ট যুক্তিসঙ্গতভাবে) একটি হার্ড লিঙ্ক আসলে কী তা ভ্রান্ত। আমি মনে করি তবে সবচেয়ে সঠিক প্রত্যক্ষ উত্তরটি 'তারা দু'জনেই' ।
ইউনিক্স ফাইল সিস্টেমগুলি সাধারণত আই-নোডগুলিতে প্রকৃত ফাইল সামগ্রী এবং ডেটা সংরক্ষণ করে, এগুলির কোনও পথ নেই, পাথগুলির পরে এই আই-নোডগুলির সাথে একাধিক সম্পর্ক রয়েছে। সাদৃশ্য হিসাবে বিবেচনা করুন এমন একটি ব্যক্তি যিনি দুটি নাম বব এবং জো রেখে যান। কেউ বলতে পারেননি যে বব জোয়ের চেয়ে বড় বা বিপরীত, তারা একই ব্যক্তির নাম মাত্র।
আপনি যদি কোনও 'অরিজিনাল' ফাইল এবং একটি নতুন ধারণার ধারণাকে ধরে রাখতে চান তবে আপনি সম্ভবত এর পরিবর্তে প্রতীকী লিঙ্কটি সন্ধান করছেন, এগুলি একটি অতিরিক্ত নাম, ওএসের কেবলমাত্র একটি নির্দেশ যা এটি একটি পথে চালিত হওয়া উচিত নীচে ফাইল কাঠামো পরিবর্তন না করে অন্যটিতে ছিল। (আপনি এগুলি "ln -s ফাইল লিঙ্ক" দিয়ে তৈরি করতে পারেন।
উপরের বেশ কয়েকটি অন্যের দেওয়া উত্তরের ক্রুসটি হ'ল প্রতিটি ফাইলের নাম একটি ফাইলের একটি হার্ড লিঙ্ক। কোনও আসল মূল নেই, সম্ভবত প্রথমটি one
একটি ডিরেক্টরিটিকে একটি টেবিল হিসাবে ভাবুন যা ফাইলের নাম এবং ইনোড-সংখ্যা তালিকাভুক্ত করে।
প্রথমটি সহ প্রতিটি হার্ড লিঙ্ক হ'ল একটি ডিরেক্টরিতে একটি এন্ট্রি যা ইনোড নম্বরটিতে একটি "ফাইলের নাম" বরাদ্দ করে, যাতে আপনি সেই নামে ফাইলটি অ্যাক্সেস করতে পারেন।
ফাইলটি ডিস্কে থাকা ব্লকগুলির একটি সংগ্রহ যা একটি ইনোডে সজ্জিত মেটা ডেটা দ্বারা পরিচালিত এবং ট্র্যাক করা হয়। একটি ফাইলের একটি ইনোড নম্বর থাকে।
ফাইলের নামের মাধ্যমে কোনও ফাইলের ডেটা অ্যাক্সেস করা একটি তিন ধাপ প্রক্রিয়া: ফাইলের নামটি ইনোড নম্বর পেতে ডিরেক্টরিতে সন্ধান করা হয়। এরপরে ইনোডটি ডেটাযুক্ত প্রাসঙ্গিক ডিস্ক ব্লক (বা ব্লক) সন্ধান করার জন্য উল্লেখ করা হয়। তারপরে অবশেষে blocks ব্লকগুলি পড়া / লিখিত হয়।
সুতরাং মূলত যা যা তা থেকে গৃহ গ্রহণ: প্রথম ("আসল") ব্যবহার করে ফাইলের বিষয়বস্তু অ্যাক্সেস করার পরে বা পরে তৈরি করা হার্ড লিঙ্কগুলির মধ্যে একেবারেই কোনও পার্থক্য নেই।
ls > a; ln a b; rm a; ln b c
, কোনটি অপরের চেয়ে "বেশি মূল"?a
চলে গেছে, আপনার সাথেb
আর বাকি রয়েছেc
...