`Rm -rf` কি পারমাণবিক নয়?


11

আমি সবেমাত্র একটি বিভ্রান্তিকর ত্রুটি পেয়েছি:

rm: cannot remove `xxx/app/cache/prod': Directory not empty

যা নিম্নলিখিত আদেশের ফলে ঘটেছিল:

rm -rf $cache_dir/*

যেখানে $cache_dirহিসাবে সংজ্ঞায়িত করা হয়xxx/app/cache

সুতরাং আমি এটি দেখতে চাই: দির rmসমস্ত কিছু মুছে ফেলা হয়েছে cache/prod, তারপরে এটি cache/prodডিরেক্টরি সরানোর চেষ্টা করার ঠিক আগে - অন্য প্রোগ্রামটির মধ্যে একটি ফাইল / ডিরেক্টরি তৈরি হয়েছিল যাতে এটি rmব্যর্থতার কারণ হয়ে দাঁড়ায়।

আমার ধারণা সঠিক?


7
আপনার অনুমানটি সঠিক - rm -rপারমাণবিক নয়। আপনি যদি নিশ্চিত হতে চান যে rm -rfচলমান অবস্থায় ডিরেক্টরিতে আর কোনও ফাইল তৈরি হয় না , আপনি প্রথমে এটির পুনরায় নামকরণ করতে পারেন, তারপরে নাম পরিবর্তন করা ডিরেক্টরিটি সরিয়ে ফেলুন।
জনি

@ জোহনি: হ্যাঁ, আমি এটি ইতিমধ্যে বাস্তবায়িত করেছি :-)
জেরকামস

যদিও এটি সম্পূর্ণ নিরাপদ নয়। যদি কোনও অ্যাপ্লিকেশনটি বর্তমানে ডিরেক্টরিটি থেকে পরিচালনা করে থাকে, তবে এটি কেবল পদক্ষেপের সাথে চলে যাবে এবং স্বাভাবিকভাবে অপারেটিং চালিয়ে যাবে।
প্যাট্রিক

rm -rfথ্রেড নিরাপদ হওয়ার সাথে এর কোনও যোগসূত্র নেই: আপনি যদি একই ডিরেক্টরিটিতে একযোগে একাধিক বার চালনা করেন তবে ডিরেক্টরিটি মুছে ফেলা হবে। এটি rm -rপারমাণবিক না হওয়ার বিষয়ে ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস: এটি নির্ভর করে: "কোডের একটি অংশটি থ্রেড-সেফ হয় যদি এটি কেবলমাত্র এমনভাবে ভাগ করা ডেটা স্ট্রাকচারগুলিকে ম্যানিপুলেটেড করে যা একই সাথে একাধিক থ্রেড দ্বারা নিরাপদ প্রয়োগের গ্যারান্টি দেয়"। সুতরাং আমরা যদি একটি rmআমন্ত্রণ হিসাবে "থ্রেড" ধরে নিই , আমরা থ্রেড-সুরক্ষা সম্পর্কে বলতে পারি। তবে যাইহোক, এটি কোনও পরিবর্তন করে না
zerkms

উত্তর:


7

প্রদত্ত ত্রুটি বার্তাটি ছিল "ডিরেক্টরি খালি নয়" ( ENOTEMPTY), এটি আপনার অনুমানটি সঠিক বলে মনে হচ্ছে, এটি এমন একটি রেসের শর্ত যেখানে কোনও প্রোগ্রাম ডিরেক্টরিটিকে rmসরিয়ে দেওয়ার চেষ্টা করার ঠিক আগে ডিরেক্টরিটিকে অন্তর্ভুক্ত ENOTEMPTYথেকে ত্রুটিযুক্ত ত্রুটি প্রদান করে directory ডিরেক্টরিতে একটি ফাইল তৈরি করে rmdir(2)

দ্রষ্টব্য: নিরাপদ পাশে থাকতে আপনি ডিরেক্টরিটিকে নতুন নামে সরিয়ে / নতুন নামকরণ করতে এবং তারপরে এই ডিরেক্টরিটি মুছে ফেলাতে পারেন।


2
এই উত্তরটি ভুল, আপনি কোনও ফাইল ব্যবহারের সময় ডিরেক্টরি এন্ট্রিগুলি সরিয়ে ফেলতে পারেন এবং তারপরে ডিরেক্টরিটি মুছতে পারেন। একটি সহজ পরীক্ষা mkdir x; cat > x/a &; tail -f x/a &; rm -r xদেখায় যে ফাইল পড়তে বা লেখার জন্য উন্মুক্ত কিনা তা বিবেচনা না করে ফাইল ব্যবহার করার সময়ও একটি ডিরেক্টরি সরানো যেতে পারে।
উইজেডসবারমারিনার

1
হ্যাঁ, ফাইলগুলি এখনও বিদ্যমান, তবে ডিরেক্টরি মুছতে কেন সফল হয়নি তার সাথে এর কোনও সম্পর্ক নেই। আপনার উত্তরের এই বক্তব্যটি বিশেষত মিথ্যা: "সিস্টেমটি এমন কোনও ডিরেক্টরি মুছে ফেলবে না যা এতে থাকা ফাইলগুলিকে এতে পড়ে / লেখার মোডে খোলা থাকে" " আপনার উত্তরে কিছু ভাল স্টাফ রয়েছে, এটি কেবল প্রশ্নের সাথে সম্পর্কিত নয় :)
উইজেডসবারমারিনার

1
এছাড়াও, ফাইলের সাথে ফাইল বর্ণনাকারীদের বিভ্রান্ত না করার বিষয়ে সতর্কতা অবলম্বন করুন। ফাইল বর্ণনাকারী কখনও মুছে ফেলা হয় না, শুধুমাত্র বন্ধ।
উইজেডসবারমারিনার

1
আপনার প্রথম অনুচ্ছেদেও কিছু কাজের প্রয়োজন হতে পারে। আপনি ঠিক বলেছেন যে ফাইলগুলি মুছে ফেলা হবে না তখনও ফাইলটি মুছে ফেলা হচ্ছে না, কেবল একবার that ডিরেক্টরি থেকে ফাইলটি লিঙ্কযুক্ত হয়ে গেলে তারা ডিরেক্টরিটি মোছা থেকে বাধা দেয় না। হ্যাঁ, এর অর্থ UNIX ফাইলগুলিকে এমন কোনও অস্তিত্বের অনুমতি দেয় যা কোনও ডিরেক্টরিতে নেই, প্রথমটির মতো অদ্ভুত।
উইজেডসবমারিনার

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