উল্লিখিত হিসাবে কেন একটি সফ্টওয়্যার প্যাকেজ আপগ্রেড করা হচ্ছে এমনকি ঠিক জরিমানা হয়? , লকটি ফাইলের নাম নয় ইনোডে রাখা হয়েছে। আপনি যখন কোনও বাইনারি লোড এবং সম্পাদন করেন, ফাইলটি ব্যস্ত হিসাবে চিহ্নিত করা হয় - এজন্য আপনি যখন এটি লেখার চেষ্টা করেন আপনি ETXTBSY (ফাইল ব্যস্ত) ত্রুটি পান।
এখন, ভাগ করা লাইব্রেরিগুলির জন্য এটি কিছুটা পৃথক: লাইব্রেরিগুলি প্রক্রিয়াটির ঠিকানা স্পেসের সাথে মেমরি ম্যাপ করে mmap()
। যদিও MAP_DENYWRITE
নির্দিষ্ট করা যেতে পারে, লিনাক্সের অন্তত গ্লিবক চুপচাপ এটিকে উপেক্ষা করে (ম্যান পৃষ্ঠা অনুসারে, উত্সগুলি পরীক্ষা করতে নির্দ্বিধায়) - এই থ্রেডটি পরীক্ষা করে দেখুন । সুতরাং আপনাকে আসলে ফাইলটি লেখার অনুমতি দেওয়া হয়েছে এবং যেমন এটি মেমরি ম্যাপ করা আছে, কোনও পরিবর্তন প্রায় সঙ্গে সঙ্গেই দৃশ্যমান হয় - যার অর্থ আপনি যদি যথেষ্ট চেষ্টা করেন তবে আপনি লাইব্রেরিকে ওভাররাইট করে আপনার মেশিনটি ইটভাটা করতে পারবেন ।
অতএব আপডেট করার সঠিক উপায় হ'ল:
ফাইলটি সরিয়ে ফেলা যা ফাইল সিস্টেম থেকে ডেটা সম্পর্কিত রেফারেন্স সরিয়ে দেয়, যাতে এটি নতুনভাবে তৈরি হওয়া অ্যাপ্লিকেশনগুলির জন্য অ্যাক্সেসযোগ্য না হয় যা ইতিমধ্যে এটি উন্মুক্ত (বা ম্যাপড) প্রত্যেকের জন্য ডেটা অ্যাক্সেসযোগ্য রেখে দেয় ;
আপডেট করা সামগ্রী সহ একটি নতুন ফাইল তৈরি করা হচ্ছে।
নতুন তৈরি হওয়া প্রক্রিয়াগুলি আপডেট হওয়া সামগ্রীগুলি ব্যবহার করবে, চলমান অ্যাপ্লিকেশনগুলি পুরানো সংস্করণে অ্যাক্সেস করবে। কোনও বুদ্ধিমান প্যাকেজ পরিচালনার ইউটিলিটি এটি করে। মনে রাখবেন যে এটি কোনও বিপদ ছাড়াই সম্পূর্ণ নয় - উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলি গতিশীলভাবে লোডিং কোড (ব্যবহার dlsym()
এবং বন্ধুরা) সমস্যার সম্মুখীন হবে যদি গ্রন্থাগারের এপিআই নিঃশব্দে পরিবর্তন হয়।
আপনি যদি সত্যই, সত্যই নিরাপদ দিকে থাকতে চান, সিস্টেমটি বন্ধ করে দিন, অন্য অপারেটিং সিস্টেম থেকে ফাইল সিস্টেমটি মাউন্ট করুন, আপডেট করুন এবং আপডেট হওয়া সিস্টেমটি আবার আনতে পারেন।
.so
ফাইলটি চেক করতে পারেনldd filename.so