হার্ড লিঙ্কটি তৈরি করা হলে কোন ফাইলটি আসল তা কীভাবে বলা যায়


34

উদাহরণস্বরূপ, আমার একটি ফাইল আছে myold_file। তারপরে আমি lnএকটি হার্ড লিঙ্ক তৈরি করতে ব্যবহার করি mylink:

ln myold_file mylink

তারপরে, এমনকি ব্যবহার করেও ls -aআমি বলতে পারি না কোনটি পুরানো।

যাইহোক বলার আছে কি?


2
পাল্টা প্রশ্ন: আপনি যদি করেন ls > a; ln a b; rm a; ln b c, কোনটি অপরের চেয়ে "বেশি মূল"? aচলে গেছে, আপনার সাথে bআর বাকি রয়েছে c...
glglgl

2
আপনি কি অর্জন করার চেষ্টা করছেন? আপনি কি অর্জন করার চেষ্টা করছেন? এর মতো কোনও "আসল" নেই। একটি ফাইল হ'ল মেটা ডেটাযুক্ত একটি ইনোড এবং ডেটাযুক্ত ব্লকগুলির সংকলন। একটি ডিরেক্টরিতে ফাইলটির একটি লিঙ্ক থাকতে পারে এবং এই লিঙ্কটি ফাইলটির নাম এবং ইনোড নম্বর। আপনি কোনও ফাইলের লিঙ্কের সংখ্যা তৈরি করতে পারেন। ফাইলগুলির একটিরও বেশি লিঙ্ক কখনও না থাকতে পারে।
জোহান

এই প্রশ্নের গৃহীত উত্তর একটি বিস্তারিত ব্যাখ্যার জন্য: এর গৃহীত উত্তর দেখার যে প্রশ্ন
উত্কু

উত্তর:


93

আপনি পারবেন না, কারণ এগুলি আক্ষরিক অর্থে একই ফাইল, কেবলমাত্র বিভিন্ন পাথ দ্বারা পৌঁছে। প্রথমটির কোনও বিশেষ মর্যাদা নেই।


4
এটি পরিষ্কারভাবে সঠিক উত্তর: ওপির প্রশ্নটি একটি ভুল বোঝাবুঝির ভিত্তিতে।
ড্যানিয়েল আরউইকার

8
@ আদনান আসলে, না: দুটি হার্ড লিঙ্ক একই ফাইল। তারা বিভিন্ন ডিরেক্টরি এন্ট্রি। জেনি ডি এর পরিভাষা সঠিক।
গিলস

1
@ গিলস আমি দেখতে পাচ্ছি না কীভাবে এটি সঠিক হতে পারে। দুটি শক্ত লিঙ্ক দুটি ফাইল নয় ; হার্ড লিঙ্কগুলি ফাইল নয়। তারা বাতলান , অত সংযোগ আছে , একই ফাইলে (যা ডিস্কে ফিজিক্যাল লোকেশনে যায়)। "দু'টি শক্ত লিঙ্ক আক্ষরিক অর্থে একই ফাইল" বলা ভুল।
আদি

1
@ জেনিডি এবং এটিই কেবলমাত্র "হার্ড লিঙ্ক" ব্যবহার করা শুনলাম; একটি ইনোডে একটি ফাইল সিস্টেম পয়েন্টার। ঠিক আছে, আমি অনুমান করি আমরা সব ভুল এবং সঠিক। এটি অর্থহীন বলে আমি এই তর্ক বন্ধ করব। আপনার উত্তরটি আমার কাছে সঠিক বলে মনে হচ্ছে, আপনার কাছ থেকে আমার একটি +1 আছে এবং আমি এটি ছেড়ে দেব।
আদি

5
একটি হার্ড লিঙ্ক "একটি" বলে একটি ফাইল বিভিন্ন বিভাগের জিনিসগুলির সাথে তুলনা করে যা প্রযুক্তিগতভাবে ভুল। তবে প্রদত্ত যে আমরা সাধারণত বলি যে "" .bashrcএটি একটি ফাইল রয়েছে ... "যখন আমাদের অর্থ," আপেক্ষিক পথ .bashrcবলতে বোঝায় এমন একটি ফাইলকে বোঝায় ... ", এটি বিভাগগুলির একটি সাধারণ সংমিশ্রণ এবং আমাদের বুঝতে হবে যে যখনই কেউ এটি উল্লেখ করে কোনও পথ বা ডিরেক্টরি এন্ট্রি একটি ফাইল "থাকার" অর্থ, আমাদের বোঝায় যে ফাইলটি এটি উল্লেখ করে। এই বোঝার সাথে, দুটি হার্ড লিঙ্ক একই ফাইল "হতে" পারে। আনুষ্ঠানিক ভাষার পক্ষে এই সম্মেলনটি প্রত্যাখ্যান করা, তারা পারবে না। উভয় অবস্থানেরই তাদের জায়গা রয়েছে :-)
স্টিভ জেসপ

16

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

হার্ড লিঙ্কটি তৈরি করা লিঙ্কটি অন্তর্ভুক্ত ডিরেক্টরিটিতে একটি রাইটিং অপারেশন। সুতরাং এটি ডিরেক্টরি আপডেট করে mtime। সুতরাং যদি

  1. লিঙ্কগুলি বিভিন্ন ডিরেক্টরিতে রয়েছে

  2. এবং আপনি জানেন যে দ্বিতীয় হার্ড লিঙ্কটি তৈরি হওয়ার পরে এই ডিরেক্টরিগুলির কোনওটিরই পরিবর্তন করা হয়নি (ফাইল যুক্ত, মুছে ফেলা, নাম পরিবর্তন করা বা ফাইলের মেটাডেটা পরিবর্তন) তবে আপনি কেবল ডিরেক্টরিগুলির সাথে তুলনা করতে পারেন mtime

বিশেষ কেস: যদি কোনও ডিরেক্টরিতে mtimeফাইলের (আইওনডের) পূর্বে থাকে mtimeএবং আপনি যুক্তিসঙ্গতভাবে নিশ্চিত হতে পারেন যে ফাইলটি তৈরি হওয়ার পরে একটি মুহুর্তের পরে লেখা হয়নি তবে এই ডিরেক্টরিটির লিঙ্কটি পুরানো এটি।

লিঙ্কগুলি যদি একই ডিরেক্টরিতে থাকে (যা আপনার প্রশ্নের ক্ষেত্রে মনে হয়) তবে এটি আরও খারাপ হয়। তারপরে আপনি ব্যবহার করতে পারেন

ls -lU

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


2
সেলিনাক্স, অডিট ট্রেল, বা ফাইল সিস্টেম জার্নিতে গুপ্তচরবৃত্তির কোনও উল্লেখ নেই ??? অডিট ট্রেইল ছাড়া স্মারক , এটি জানার উপায় নেই - অন্য যে কোনও কিছুই গণনা অনুমান
রিকি বিম

1
@ মিমিকার্জ আপনি যদি অন্যকে এভাবে শেখাতে চান তবে আপনার কমপক্ষে সঠিকভাবে উদ্ধৃতি শিখতে হবে। এটি প্রশ্নের মধ্যে "কোন ফাইল" বলে না । এমনকি যদি এটি হয় তবে এটি কেবল একটি কথার সমস্যা এবং প্রশ্নটি বোঝার জন্য কিছু মস্তিষ্ক নিক্ষেপ করলে সহজেই এটি প্রকৃতপক্ষে কী তা প্রকাশিত হবে।
হউক লেগেছে 31'14

4
ডিরেক্টরি এমটাইম ট্রিক কাজ করবে যদি পরিস্থিতি ঠিক থাকে (যা বিরল)। তবে আপনি যেভাবে এটি উপস্থাপন করছেন, আপনি কখনও কখনও বিপরীত সিদ্ধান্তে পৌঁছবেন। ডিরেক্টরি এমটাইম কেবলমাত্র একটি সার্থক ইঙ্গিত যদি এটি ফাইলের সিটিটাইমের সমান হয়। তবে ls -lUকৌশলটি আধুনিক ফাইল সিস্টেমগুলিতে (এক্সট 4, বিটিআরএফএস, জেডএফএস) কাজ করবে না, সেখানে এন্ট্রিগুলি ক্রম ক্রম হিসাবে প্রদর্শিত হয় না।
গিলস

2
@ মাইকজারভ - ওপির প্রশ্নটি একটি ভুল বোঝাবুঝির ভিত্তিতে। যদি তারা তা করে থাকে rm myold_fileতবে mylinkএখনও বিদ্যমান থাকবে এবং নিখুঁতভাবে কাজ করবে, কারণ এটি একই অন্তর্নিহিত ইনোডকে উল্লেখ করে সমানভাবে উত্তম এন্ট্রি is উভয়ই মুছে ফেলা হয়েছে কেবল তখনই সিস্টেমটি ইনোডটি বাতিল করতে পারে। একবার একই লিঙ্কটি উল্লেখ করে দুটি ফাইল সিস্টেম এন্ট্রি তৈরি করতে হার্ড লিঙ্কিং ব্যবহার করা হলে, তারা সমতুল্য। । (নোট যে "ফাইল" এখানে মানে "একটি inode হিসাবে একটি ডিরেক্টরি উল্টোদিকে যে, একটি ফাইল জন্য তথ্য ঝুলিতে) দেখুন: en.wikipedia.org/wiki/Inode
ড্যানিয়েল Earwicker

1
-1 কারণ, টেবিলগুলি আপডেট করার সময় কিছু ফাইল সিস্টেমে ডিরেক্টরি কীভাবে পরিবর্তিত হয় সে সম্পর্কে তথ্য থাকলেও, এই উত্তরটি "মূল ফাইল" একাধিক হার্ডলিংকের ক্ষেত্রে সম্পত্তি নয় এমন প্রশ্নের মধ্যে উপস্থিত মিস-বোঝাপড়া পরিষ্কার করতে ব্যর্থ হয়- একটি একক ইনোডে। সেই অর্থে যখন উপাখ্যানিকভাবে আকর্ষণীয় হয় তবে এই প্রশ্নটিতে অবতীর্ণ বেশিরভাগ লোকই কট্টর লিঙ্কগুলির মৌলিক ধারণা সম্পর্কে শিখতে পারে না। এই ইস্যুটি কোনও "প্রত্যক্ষ পরিষ্কার উপায়" এর অভাব নয়, সমস্যাটি হ'ল প্রথম স্থানে "এটি" নেই
কালেব

10

আপনি যদি ডিরেক্টরিগুলির শেষ সংশোধন সময়ের উপর নির্ভর করেন এবং কীভাবে এবং কখন সেই ডিরেক্টরিগুলি পরিবর্তন করা হয় তা আপনি জানেন না, এমটাইম উপর নির্ভর করা আপনাকে সময়ের কিছু শতাংশ ভুল হতে পরিচালিত করবে। এখানে সমস্যাটি হ'ল ফাইলটি কোনও সিস্টেমের প্রবেশের দ্বারা নয়, একটি ইনোড দ্বারা ফাইল-সিস্টেমে প্রতিনিধিত্ব করা হয়। ডিরেক্টরি এন্ট্রি (ফাইলের নাম) ফাইল নয়, ইনোডে নির্দেশ করে।

আমি মনে করি যে আমি কেন কোনও ডিরেক্টরি এন্ট্রি পুরানো এবং কীভাবে এটি জানার প্রয়োজন এড়াতে হবে তা কেন জানতে হবে তা নিয়ে আমি কিছু নাভি দেখছিলাম।


8

আমি মনে করি এই প্রশ্নটি (যথেষ্ট যুক্তিসঙ্গতভাবে) একটি হার্ড লিঙ্ক আসলে কী তা ভ্রান্ত। আমি মনে করি তবে সবচেয়ে সঠিক প্রত্যক্ষ উত্তরটি 'তারা দু'জনেই'

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

আপনি যদি কোনও 'অরিজিনাল' ফাইল এবং একটি নতুন ধারণার ধারণাকে ধরে রাখতে চান তবে আপনি সম্ভবত এর পরিবর্তে প্রতীকী লিঙ্কটি সন্ধান করছেন, এগুলি একটি অতিরিক্ত নাম, ওএসের কেবলমাত্র একটি নির্দেশ যা এটি একটি পথে চালিত হওয়া উচিত নীচে ফাইল কাঠামো পরিবর্তন না করে অন্যটিতে ছিল। (আপনি এগুলি "ln -s ফাইল লিঙ্ক" দিয়ে তৈরি করতে পারেন।


আপনি জানেন, বব / জো তার বয়স সম্পর্কে সত্যই সংবেদনশীল হতে পারে ... হার্ড / নরম লিঙ্কের তুলনাটি একটি ভাল - বিশেষত যখন আপনি বিবেচনা করেন যে হার্ড-লিঙ্কটি কেবল একটি ডিরেক্টরি ফাইলটিতে একটি এন্ট্রি যুক্ত করবে - ইতিমধ্যে বিদ্যমান ইনোড - তবে একটি সফট-লিঙ্কটি একটি নিজস্ব ডানদিকের একটি ফাইল এবং এটি তার নিজস্ব নিজস্ব ইনোড নির্ধারিত হয়। তবুও, উভয় ক্ষেত্রেই পরিবর্তনের সময়টি কেবলমাত্র লিঙ্কযুক্ত ফাইলের জন্যই প্রাসঙ্গিক, কারণ যে কোনও তাত্পর্য একটি লিঙ্কে করা যেতে পারে কেবলমাত্র সৃষ্টি / মুছে ফেলা।
মাইকসার্ভ

2

উপরের বেশ কয়েকটি অন্যের দেওয়া উত্তরের ক্রুসটি হ'ল প্রতিটি ফাইলের নাম একটি ফাইলের একটি হার্ড লিঙ্ক। কোনও আসল মূল নেই, সম্ভবত প্রথমটি one

একটি ডিরেক্টরিটিকে একটি টেবিল হিসাবে ভাবুন যা ফাইলের নাম এবং ইনোড-সংখ্যা তালিকাভুক্ত করে।

প্রথমটি সহ প্রতিটি হার্ড লিঙ্ক হ'ল একটি ডিরেক্টরিতে একটি এন্ট্রি যা ইনোড নম্বরটিতে একটি "ফাইলের নাম" বরাদ্দ করে, যাতে আপনি সেই নামে ফাইলটি অ্যাক্সেস করতে পারেন।

ফাইলটি ডিস্কে থাকা ব্লকগুলির একটি সংগ্রহ যা একটি ইনোডে সজ্জিত মেটা ডেটা দ্বারা পরিচালিত এবং ট্র্যাক করা হয়। একটি ফাইলের একটি ইনোড নম্বর থাকে।

ফাইলের নামের মাধ্যমে কোনও ফাইলের ডেটা অ্যাক্সেস করা একটি তিন ধাপ প্রক্রিয়া: ফাইলের নামটি ইনোড নম্বর পেতে ডিরেক্টরিতে সন্ধান করা হয়। এরপরে ইনোডটি ডেটাযুক্ত প্রাসঙ্গিক ডিস্ক ব্লক (বা ব্লক) সন্ধান করার জন্য উল্লেখ করা হয়। তারপরে অবশেষে blocks ব্লকগুলি পড়া / লিখিত হয়।

সুতরাং মূলত যা যা তা থেকে গৃহ গ্রহণ: প্রথম ("আসল") ব্যবহার করে ফাইলের বিষয়বস্তু অ্যাক্সেস করার পরে বা পরে তৈরি করা হার্ড লিঙ্কগুলির মধ্যে একেবারেই কোনও পার্থক্য নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.