একটি সফ্টওয়্যার প্যাকেজ যখন আপগ্রেড করা হচ্ছে তখনও কেন ঠিক চলছে?


29

বলুন আমি একটি সফ্টওয়্যার চালাচ্ছি, এবং তারপরে আমি সফ্টওয়্যারটি আপগ্রেড করতে প্যাকেজ ম্যানেজার চালাচ্ছি, আমি লক্ষ্য করেছি যে লিনাক্স প্যাকেজ আপগ্রেডের জন্য চলমান প্রক্রিয়াটি কমিয়ে দেয় না - এটি এখনও ঠিক চলছে। লিনাক্স এটি কিভাবে করে?

উত্তর:


35

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

এটি ইউনিক্স এবং উইন্ডোজের মধ্যে অন্যতম প্রধান পার্থক্য। লক হওয়া কোনও ফাইল আপডেট করতে পারে না কারণ এটি ফাইলের নাম এবং আইওডগুলির মধ্যে একটি স্তর অনুপস্থিত থাকে যা কিছু প্যাকেজ আপডেট করতে বা ইনস্টল করতে এমনকি একটি বড় রিবুট প্রয়োজন কারণ এটি একটি বড় ঝামেলা তৈরি করে।


10
স্পষ্ট করার জন্য, লিনাক্সের অধীনে আপনি চলমান অবস্থায় এক্সিকিউটেবল ফাইলটি পরিবর্তন করতে পারবেন না । তবে আপনি ফাইলটিকে লিঙ্কমুক্ত করতে এবং একই নামের নতুন ফাইলের সাথে এটি প্রতিস্থাপন করতে পারেন।
সিজেএম

লিনাক্সের অধীনে, আপনি চলমান অবস্থায় এক্সিকিউটেবল ফাইলটি পরিবর্তন করতে পারেন। আপনি সম্ভবত কী করছেন তা যদি না জেনে থাকেন তবে ফলাফলটি সম্ভবত অনাকাঙ্ক্ষিত হতে পারে। স্পষ্টভাবে বলা হয়নি যে "একই নাম" পয়েন্ট যোগ।
jlliagre

4
@ জেলিয়াগ্রে যদি আমি ভুল বোঝাবুঝি না করি তবে আপনি যতদূর আমি অবগত নন
ক্রিস ডাউন

2
যদিও এনএফটিএস সম্পর্কে একটি ঝরঝরে জিনিস - আপনি যদি কমান্ড লাইন বা অন্য কোনও প্রোগ্রাম থেকে কোনও নতুন নাম সম্পাদন করেন তবে আপনি একই নামের একটি ফাইল আবার সেখানে রাখতে পারেন, এবং এটি সেই প্রোগ্রামগুলিকে প্রভাবিত করবে না যা আসল ফাইলটি খোলা আছে। (এক্সপ্লোরার পুনর্নবীকরণ কমান্ড এটির জন্য কাজ করে না)
স্টিফান ডোনাল

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

18

এক্সিকিউটেবলগুলি সাধারণত একবার খোলার পরে কোনও ফাইল বর্ণনাকারীর সাথে সংযুক্ত থাকে এবং মৃত্যুর একক সময়কালে তাদের বাইনারিগুলিতে পুনরায় খোলার কোনও ফাইল বিবরণী থাকে না। উদাহরণস্বরূপ, যদি আপনি চালানো bash, exec()সাধারণত শুধুমাত্র সৃষ্টি inode জন্য একটি ফাইল বর্ণনাকারী দ্বারা প্রতি ইঙ্গিত /bin/bashএকবার - আবাহন করেন।

এর প্রায়শই অর্থ হ'ল যে সরল বাইনারিগুলি যাঁরা মৃত্যুদন্ড কার্যকর করার সময় নিজেকে পুনরায় পড়ার চেষ্টা করেন না (যে পথ দিয়ে তারা আহ্বান করেছিলেন সেগুলি ব্যবহার করে), ক্যাশে থাকা সামগ্রীটি ঝোলা ইনোড হিসাবে বৈধ থাকে stay এর অর্থ এটি কার্যকরভাবে সম্পাদনযোগ্য এর পূর্ববর্তী সংস্করণটির একটি প্রতিলিপি রয়েছে।

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

সাধারণ ব্যবহারের ক্ষেত্রে যদিও প্রক্রিয়াটি আরম্ভ না করেই আপগ্রেড করা নিরাপদ।


1
অপরটি বিপদ এমনকি সাধারণ ক্ষেত্রেও এটি হ'ল কারণ চলমান অ্যাপ্লিকেশনটি বাইনারিটির ক্যাশেড অনুলিপি ব্যবহার করছে, আপনি যতক্ষণ না অ্যাপ্লিকেশনটি ম্যানুয়ালি পুনরায় চালু করবেন ততক্ষণ এটি কোডের পুরানো সংস্করণটি চালাচ্ছে। যদিও এটি বেশিরভাগ সময় বিবেচনা করে না; যদি আপগ্রেডটিতে সুরক্ষা সংশোধন অন্তর্ভুক্ত থাকে তবে প্যাচ ইনস্টল হওয়া সত্ত্বেও আপনার সিস্টেমটি এখনও দুর্বল কারণ পুরানো সংস্করণ এখনও চলছে।
ড্যান নীলি

1
আমি ভয় করি যে আপনার প্রথম অনুচ্ছেদটি সঠিক নয়। ইউনিক্স / লিনাক্স কার্নেলগুলি একবারে এক্সিকিউটেবল প্রোগ্রাম লোড করে না তবে মেমরি তাদের মানচিত্র করে। এর অর্থ আসলে ব্যবহৃত পৃষ্ঠাগুলি অবশেষে এটি র‍্যামে পরিণত হয়। এটি লিনাক্সের অধীনে "পাঠ্য ফাইল ব্যস্ত" সুরক্ষার পুরো পয়েন্ট। এক্সিকিউটেবলের কিছু অংশ চালু হওয়ার অনেক পরে পড়তে হবে না এর কোনও গ্যারান্টি নেই। তবুও কিছু পৃষ্ঠাগুলি বড় পর্যাপ্ত প্রোগ্রামগুলির জন্য কখনই লোড হবে না এবং এটি গতিশীল লোড গ্রন্থাগারগুলির জন্য আরও সত্য। উদাহরণস্বরূপ bashবাইনারি প্রায় 200 4K পৃষ্ঠাগুলি, নিশ্চিত না যে এগুলি সবই একটি গড় সেশনে ব্যবহৃত হয়।
jlliagre

@ জেলিয়াগ্রে আমি ialloc()পাতাগুলির মেমরি ম্যাপিংয়ের জন্য নয়, পড়ার জন্য একটি কার্নেল স্ট্রাক্টের সাথে কথা বলছিলাম । আমি কি এই ভেবে সঠিকভাবে বুঝতে পারি না যে আধুনিক এক্সট্রা * ফাইল সিস্টেমে, ইনোডটি শেষ পর্যন্ত ইন-কার্নেলের সাথে সামঞ্জস্যপূর্ণ হয় (এবং ভিএম সাবসিস্টেমের অভ্যন্তরে)?
ক্রিস ডাউন

এক্সিকিউটেবল কন্টেন্টের কোনও গ্যারান্টি নেই যে এটি চালানোর পরে খুব বেশি সময় পড়বে না, এবং কোনও গ্যারান্টি নেই যে মৃত্যুদন্ড কার্যকর করার সময় একই পৃষ্ঠাগুলি আবার পড়া হবে না।
jlliagre

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