উত্তর:
@ কুসালানন্দ দ্বারা উল্লিখিত হিসাবে, সাধারণত পুরানো ফাইল মুছে ফেলা এবং একই নামের সাথে একটি নতুন তৈরি করে আপগ্রেড করা হয়। এটি আসলে একটি নতুন ইনোড সহ একটি নতুন ফাইল তৈরি করবে, সিস্টেমটি যতক্ষণ না খোলা থাকবে ততক্ষণ পুরানোটিকে ব্যবহারের জন্য মুক্ত রাখবে।
সরলীকৃত উদাহরণ হিসাবে স্টাফ পছন্দ করে
rm /bin/cat
cp /new/version/of/cat /bin/cat
একটি যৌক্তিকভাবে নতুন ফাইল তৈরি করবে এবং cat
চলমান থাকা সত্ত্বেও কাজ করে । একই গ্রন্থাগারের জন্য যায়। (উপরেরটি উদাহরণ, প্রকৃত বিশ্বে কোনও ফাইল আপগ্রেড করার শক্তিশালী উপায় নয়))
কেউ একই নামের সাথে একটি নতুন তৈরি করার পরিবর্তে স্থানটিতে বাইনারি পরিবর্তনের চেষ্টা করতে পারে। এই ক্ষেত্রে, কমপক্ষে লিনাক্স প্রকৃতপক্ষে ব্যবহারযোগ্য একটি এক্সিকিউটেবলের পরিবর্তন করতে বাধা দেয়:
window 1 # ./cat
window 2 # echo foobar > cat
-bash: cat: Text file busy
যাইহোক, এটি গতিশীল লোড করা লাইব্রেরিগুলির সাথে কাজ করবে বলে মনে হচ্ছে না ...
আমি libc.so.6
পরীক্ষার জন্য একটি অনুলিপি তৈরি করেছি এবং এটি ব্যবহারের সময় শূন্যে এটি পূর্ণ করে রেখেছি :
window 1 /tmp/lib# LD_LIBRARY_PATH=/tmp/lib ldd ./cat
linux-vdso.so.1 (0x00007ffcfaf30000)
libc.so.6 => /tmp/lib/libc.so.6 (0x00007f1145e67000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1146212000)
window 1 /tmp/lib# LD_LIBRARY_PATH=/tmp/lib ./cat
foo
foo
Segmentation fault
(ইতিমধ্যে অন্য উইন্ডোতে, foo
সেগফল্টের আগে , এর পরে )
window 2 /tmp/lib# dd if=/dev/zero of=libc.so.6 bs=1024 count=2000
আমি এর কোডটি অনলাইনে কার্যকরভাবে সম্পাদনা করার পরে প্রোগ্রামটি নিজেই এর বিরুদ্ধে কিছুই করতে পারে না।
(এটি সম্ভবত সিস্টেম নির্ভর হবে, আমি দেবিয়ান জেসি .5.৫, লিনাক্স ৩.১k..7-সিকিটি 25-2 + ডিবি 833-তে পরীক্ষা করেছি particular
সুতরাং আমি অনুমান করি উত্তরটি হ'ল আপগ্রেডগুলি এমনভাবে করা হয় যা কোনও সমস্যা এড়ায় এবং এটি ফাইল সিস্টেম ইন্টার্নাল দ্বারা সহায়তা করে। তবে (লিনাক্সে) গতিশীল লাইব্রেরিগুলিকে দূষিত করার বিরুদ্ধে কোনও সুরক্ষা বলে মনে হচ্ছে না।
install
উপযোগ সাধারণভাবে ভালো কাপড় ব্যবহার করা হয়। আপনার rm
গন্তব্য ফাইলটি স্পষ্ট করে বলার দরকার নেই । এছাড়াও এটি বিদ্যমান ফাইলের অনুমতিগুলি সংরক্ষণ করে, ব্যাকআপ নিতে পারে, একটি নতুন মোড সেট করতে পারে ইত্যাদি Example উদাহরণ ব্যবহারের জন্য:install /new/version/of/cat /bin/cat
rm
+ + cp
একটি উদাহরণ হিসাবে অভিপ্রেত ছিল। নতুন নামটি একটি নতুন নাম দিয়ে নতুন জায়গায় রেখে দেওয়া স্মার্টও হতে পারে, একটি ছোট উইন্ডো এড়ানো যাতে কোনও সংস্করণ পাওয়া যায় না। (যদিও জিএনইউ install
এমনকি এটি করে বলে মনে হচ্ছে না, এইচএমপিএফ)
rm
) মুছে ফেলা হয় , তবে এটি এখনও মুছে ফেলা হয়নি। এটি ডিস্কে উপস্থিত থাকবে এবং এখনও এটি খোলার সমস্ত প্রক্রিয়া দ্বারা পড়া যেতে পারে। এটি কেবল তখনই মুছে ফেলা হবে যখন এর হার্ড-লিঙ্কের গণনা শূন্যে পৌঁছে যাবে এবং ফাইলটি খোলার সাথে প্রেরেসের সংখ্যা শূন্যে পৌঁছে যাবে।
install
ইউটিলিটিটি বিশেষত অনিরাপদ! এটি লক্ষ্য ফাইলটি পরমাণুর পরিবর্তে পরিবর্তিত করার পরিবর্তে জায়গায় ওভাররাইট করে। mv
(একই ডিরেক্টরিতে উত্স এবং গন্তব্য সহ, উত্স সাধারণত একটি টেম্প ফাইল হয়) ফাইলগুলি ইনস্টল করার একমাত্র নিরাপদ উপায়।
strace
কথা অনুসারে install
জিএনইউ কোর্টিলগুলিতে টার্গেট ফাইলটি লিঙ্কযুক্ত করে তার জায়গায় একটি নতুন ফাইলটি অনুলিপি করে। যার অর্থ এখানে একটি সংক্ষিপ্ত উইন্ডো রয়েছে যার সময় ফাইলটি আংশিক থাকে। এটি কোনও নাম পরিবর্তন করে ফাইলটিকে পরমাণুভাবে সেট করে না।
ফাইলগুলি খোলার সময় লিঙ্কযুক্ত থাকলে ফাইলগুলি "সঠিকভাবে মোছা" হবে না। এগুলি বন্ধ হয়ে গেলে, তারা যে ডিস্ক স্থানটি ব্যবহার করেছিল তা আবার "মুক্ত" হিসাবে বিবেচিত হবে। এটি বর্তমানে চলমান অ্যাপ্লিকেশন এবং তাদের ভাগ করা লাইব্রেরিগুলির জন্য যায়।
আমি কেবল ব্যর্থতা দেখতে পাচ্ছিলাম যদি কোনও প্রোগ্রাম dlopen()
চাহিদার ভিত্তিতে একটি ভাগ করা লাইব্রেরি লোড করতে পারে, বা প্রোগ্রামটি যদি চাহিদা অনুযায়ী অন্যান্য ফাইল যেমন অভিধান, থিম ফাইলগুলি বা হঠাৎ অদৃশ্য হয়ে যায় এমন অন্যান্য ফাইলগুলিতে অ্যাক্সেস করতে হয়।
উদাহরণস্বরূপ: অন্য শেল সেশনে vim
ইনস্টলেশন মুছে ফেলার সময় একটি শেল সেশনে চালানো vim
"দুর্নীতিগ্রস্থ" বা বর্তমান চলমান vim
অধিবেশনটি শেষ করতে পারবে না । তবে কিছু জিনিস ব্যর্থ হতে শুরু করবে, উদাহরণস্বরূপ বানান যাচাইয়ের জন্য, যার vim
ইনস্টলেশনগুলির মধ্যে ফাইলগুলি খোলার প্রয়োজন ।
ln -sf
লাইব্রেরিগুলিতে অদলবদল করার সময় আপনার কীভাবে ব্যবহার করা উচিত সে সম্পর্কে একটি লিনাক্স বই পড়ার বিষয়টি মনে রাখবেন , কারণ-f
আপনাকে নতুন চিহ্নের সাথে প্রতীকী লিঙ্কের বিদ্যমান গন্তব্যটি "ওভাররাইট" করার অনুমতি দেওয়া হয়েছে, এটি কখনও "ভাঙা" না হয়ে (যদি আপনিrm
অনুসরণ না করেন তবে ভিন্ন) কln -s
)। কমান্ডের আগে, গ্রন্থাগার.স . পুরানো সংস্করণে নির্দেশ করেছেন, যেমন। গ্রন্থাগার.স.৪. ... কমান্ডের পরে, এটি কেবল গ্রন্থাগারের দিকে নির্দেশ না করে গ্রন্থাগার.সো .5 (বা যাই হোক না কেন) দিকে নির্দেশ করে।