লিনাক্স প্রতীকী লিঙ্কগুলির সাথে কীভাবে কাজ করে?


11

মানে কিছু প্রক্রিয়া যখন একটি সিমলিংক পড়তে চায় তখন কী হচ্ছে? যখন পড়া বা এমনকি লেখার প্রক্রিয়া চলাকালীন কিছু যখন একটি সিমলিংক পরিবর্তন করে তখন কী হচ্ছে?

উদাহরণস্বরূপ: আমার কাছে 2 টি বিশাল, অনুরূপ 100G ফাইল /mnt/1এবং /mnt/2/mnt/1সিমলিংকের মাধ্যমে উপলব্ধ /home/user/file। কিছু প্রোগ্রাম Aপড়া শুরু /home/user/file। আর কিছুদিনের কিছুর পর থেকে লিঙ্ক পরিবর্তন /mnt/1করতে /mnt/2, কিন্তু Aএখনও ফাইল পড়া হয়।

প্রোগ্রামটি কি পরম পথে ক্যাশে করে?

এটি কি ব্যর্থ হবে এবং ত্রুটি হবে, কারণ সিমলিংক পরিবর্তন করা হয়েছিল বা এটি কি ঠিক হয়নি, যেমন কিছুই হয়নি?

/home/user/fileকোনও ব্লক ডিভাইসের সাথে যুক্ত হওয়ার ক্ষেত্রে এটি উদাহরণস্বরূপ পৃথক হবে (উদাহরণস্বরূপ 2 টি প্রতিলিপিযুক্ত ইস্কি ডিস্ক)?

উত্তর:


9

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


4
আপনি ফাইলটির সমস্ত লিঙ্কগুলি সরিয়ে ফেলতে পারেন এবং একবার খোলার পরেও এটি পড়া চালিয়ে যেতে পারেন। এজন্য আপনি উইন্ডোতে যেমন রিবুট না করে প্যাকেজগুলি আপগ্রেড করতে পারেন; কারণ আপনি প্রোগ্রামটি চালানো সত্ত্বেও এক্সিকিউটেবল ফাইলটি আরএম করতে পারেন।
psusi

1
@ পিছুসি আমি জানি ডেটা এবং ইনোড এখনও আছে এবং কেবল আর কোনও দিকে ইঙ্গিত করা হয়নি, তবে একবার ফাইলটি মুছে ফেলা হয়ে গেলে সিস্টেমটি ডিস্কের সেই স্পটটি ওভাররাইট করতে পারে, তাই না? সুতরাং যদি ফাইলটি খুব বড় আকারের 100 কেজি ফাইলের মতো ফাইলের ক্যাশে ফিট করতে পারে তবে তার কিছু অংশ যদি শেষের আগে ওভাররাইট করা হয় তবে কী হবে? এটি জটিল সিস্টেম ফাইলগুলির জন্য উদ্বেগের বিষয় নয় কারণ এগুলি ক্যাশে লোড করা হয় এবং সেখানে রাখা হয় তবে 100 জিবি যথেষ্ট বড় যে আমি মনে করি এটি উদ্বেগের কারণ হতে পারে।
কেভিন

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

2
এই উত্তরটি একটি সমালোচনামূলক পয়েন্টটি মিস করে, যে একটি সিমিলিংকে লক্ষ্যযুক্ত ফাইলের নাম রয়েছে ।
কিথ থম্পসন

6

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

আপনি যখন একটি সিমিলিংক খুলবেন, ওএস লক্ষ্য ফাইলটি খুঁজতে অবস্থানটি অনুসরণ করবে। লক্ষ্য নিজেই একটি সিমবলিক লিঙ্ক হয়, তাহলে এটি হিসাবে ভাল (1) (2) যে একটি ফাইলে অবস্থান পয়েন্ট পর্যন্ত তার অবস্থান অনুসরণ করে না একটি সিমবলিক লিঙ্ক (এটা কল দিন FinalFile )। তারপর ওএস সংগ্রহ inode এর FinalFile (inode পরিমার্জন-টাইম মত মেটাডাটা রয়েছে এবং ফাইল এর ডাটা একটি পয়েন্টার আছে)। অবশেষে ফাইনালফায়ালের ইনোডটি খোলে। এখন থেকে প্রক্রিয়াটি ফাইলটিতে পড়তে / লেখার জন্য সেই ইনোড ব্যবহার করে। ফলে সিমবলিক লিঙ্ক নাম অথবা পাথ পরিবর্তন সিমবলিক লিঙ্ক মোছা পাথ অথবা নাম পরিবর্তন FinalFile বা এমনকি মুছে ফেলার FinalFile(৩) প্রক্রিয়াটির কোনও প্রভাব নেই; এটি এখনও একই ইনোড থেকে পড়ছে।

বেশিরভাগ ক্ষেত্রে সিমিলিঙ্কের ফাইল-ডেটা ক্রিয়াকলাপগুলি ফাইনালফাইলে প্রভাব ফেলবে (যেমন , সিমলিংকে লেখা এবং পড়া ফিনাল ফাইলে থেকে লেখা / পড়তে পারে ) তবে ব্যতিক্রম রয়েছে: সিস্টেম কলটি সিমলিংকেরreadlink() বিষয়বস্তু নিজেই পড়ে।

অন্যদিকে ফাইল-মেটাডেটা অপারেশনগুলি (নাম পরিবর্তন বা মুছার মতো) সাধারণত সিমলিংকে প্রভাবিত করে। তবে এখানেও ব্যাতিক্রম রয়েছে: lstat()সিস্টেম কলটি ফিনালফাইলে (2) এর stat()পরিবর্তে সিমলিংকে নিজেই তথ্য ফিরিয়ে দেয় except


(1) যদি সিমিলিংকের অবস্থানটি কোনও আপেক্ষিক পথ হয় তবে স্তরের সংখ্যা এবং জিনিসগুলি কিছুটা জটিল হয়ে যায় on

(২) সিমলিংক পড়ুন ()): আরও তথ্যের জন্য প্রতীকী লিঙ্ক হ্যান্ডলিংman 7 symlink

(3) rmকমান্ড বা unlink()সিস্টেম কল শারীরিকভাবে কোনও ফাইল সরিয়ে দেয় না। এটি ডিরেক্টরিটি এন্ট্রি সরিয়ে দেয় যা ফাইলের ইনোডকে নির্দেশ করে। কেবলমাত্র উভয়ই ফাইলটি অপসারণ করা হয় ক) এর কোনও আরও ডিরেক্টরি এন্ট্রি (হার্ড লিঙ্ক) নেই যা এর ইনোডটি উল্লেখ করে এবং খ) কোনও প্রক্রিয়াতেই ফাইলটি খোলা নেই।


1

এটি লিনাক্সের জন্য প্রায় স্বচ্ছ এবং অপারেটিং সিস্টেমের চেয়ে আপনি যে ফাইল সিস্টেমটি ব্যবহার করছেন তার সাথে এটি অনেক বেশি সম্পর্কিত।

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

একটি হার্ড লিঙ্কের প্রতীকী লিঙ্কের পার্থক্য হ'ল নিয়োগটি একটি হার্ড লিঙ্কের মতো ডেটা সেক্টরে পোয়েট করার পরিবর্তে একটি হার্ড লিঙ্কে হয়।

উদাহরণ:

পরীক্ষা 1:

echo 'data' >file.txt

এটি হার্ড লিঙ্ক ফাইল তৈরি করবে ttxt 10 থেকে 20 * সেক্টরকে নির্দেশ করে (কেবলমাত্র ব্যাখ্যা করার জন্য * সংখ্যা)।

পরীক্ষা 2:

এখন যদি হয়?

ln file.txt file_2.txt

এটি একটি হার্ডলিঙ্ক ফাইল 3.txt তৈরি করেছে যা 10 থেকে 20 সেক্টরগুলিতে নির্দেশ করে (ফাইল.txt একই), তাই আপনি যদি ফাইল.txt মুছে ফেলেন তবে 10 থেকে 20 সেক্টরগুলি এখনও সংরক্ষিত আছে এবং আপনি ফাইল_2.txt এর ভিতরে ডেটা দেখতে পারবেন ... । (file.txt এবং file_2.txt উভয়ই মূলের মতো)

পরীক্ষা 3:

ln -s file.txt file_sym.txt 

হার্ড লিংক file.txt- তে প্রতীকী লিঙ্ক file_sym.txt প্রেরণ করা হয়েছে, সুতরাং আপনি যখন file_sym.txt অ্যাক্সেস করার চেষ্টা করবেন তখন আপনি file.txt দেখতে পাবেন, কিন্তু আপনি যদি file.txt মুছে ফেলেন তবে ফাইল_সেইম আর লক্ষ্য খুঁজে পাবে না।

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

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