এটি আরএম-আরএফ এবং rmdir -rf নয়


13

আমি সবসময়ই আগ্রহী ছিলাম কেন একটি ডিরেক্টরিতে সমস্ত কিছু মোছার জন্য আদেশ রয়েছে rm -rf

একই জিনিসটি করার জন্য পতাকা কেন নেই rmdir?

rmdirডিরেক্টরি ক্রিয়াকলাপের জন্য ব্যবহার করা কি আরও স্বজ্ঞাত নয় ?


9
rmdirডিরেক্টরি মুছে ফেলা, rmমুছে ফেলা। rmdirনন-ডিরেক্টরিগুলি সরানোর জন্য এটি কেন স্বজ্ঞাত হবে ?
স্টাফেন চেজেলাস

5
কারণ তা নয়। আপনি এই প্রশ্নটি জিজ্ঞাসা করে 40 বছর দেরি করছেন এবং আপনি ভুল লোকদের জিজ্ঞাসা করছেন।
ব্যবহারকারী 207421

উত্তর:


25

প্রথমদিকে ইউনিক্স ফাইল সিস্টেমের মধ্যে (কমপক্ষে V7 দিনের প্রায় 1970 সালে) ডিরেক্টরিগুলি বিশেষ ফাইল হিসাবে প্রয়োগ করা হয়েছিল এবং কেবলমাত্র রুট সেই mknod(2)সিস্টেম কলটি ব্যবহার করতে পারে যা তাদের তৈরি করেছিল এবং কেবলমাত্র রুটই unlink(2)একটি ডিরেক্টরি বিশেষ ফাইল করতে পারে ।

ফাইল সিস্টেম কাঠামোটি ধারাবাহিক রাখতে এই সুরক্ষাগুলি কার্যকর ছিল। উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারীকে ডিরেক্টরি বিশেষ ফাইলটিতে লেখার অনুমতি দেওয়া হয়, তবে তিনি তার মূল ডিরেক্টরিটি ..নিজেই নির্দেশ করতে পারেন (বিশেষত নিজস্ব আই-নোড)। এটি ফাইল সিস্টেমে একটি বিজ্ঞপ্তি রেফারেন্স তৈরি করবে যা খারাপ কাজ হবে। অবশ্যই অন্যান্য অসঙ্গতি রয়েছে যেগুলি এটি করতে পারে, এটি কেবল একটি পরিষ্কার উদাহরণ।

ধারাবাহিকতাটি ব্যবহারকারী-স্পেস প্রোগ্রামগুলির মতো mkdir(1)এবং rmdir(1)যা সেট-ইউআইডি রুট দ্বারা পরিচালিত হয়েছিল যাতে তারা কোনও অনিবদ্ধ ব্যবহারকারীর পক্ষে সুবিধাভোগী সিস্টেম কল করতে পারে। যখন পুনরাবৃত্তি যুক্ত করা হয়েছিল rm(1), মুছে ফেলা কমান্ডটি বর্তমান ইউআইডি হিসাবে চলবে এবং তারপরে rmdir(1)খালি ডিরেক্টরিগুলি সরানোর জন্য কেবল কল করবে call এটি এখনও অনুমোদনের উত্থানের একটি দুর্দান্ত মান পদ্ধতি: আপনার প্রয়োজনের চেয়ে বেশি অনুমতি ব্যবহার করবেন না।

কিছু সময় পরে mkdir(2)এবং rmdir(2)তাদের নিজস্ব সিস্টেম কল হিসাবে যুক্ত করা হয়েছিল তবে এর মধ্যে সম্পর্ক rm(1)এবং rmdir(1)রয়ে গেছে।

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


1
শেষ বাক্যটি পুনরায়: সম্ভবতঃ পুনরাবৃত্তি মোছার অপারেশনটি থাকলে rmdirএটি এখনও একটি -rপতাকা লাগবে । ( rmdir -r junkপরিবর্তে rm -r junk, এবং rmdir junkএখনও ডিরেক্টরি খালি থাকলে কেবল কাজ করে)
ব্যবহারকারী 253751

7

এটি .তিহাসিক। rmফাইলগুলির রেফারেন্সগুলি মুছে ফেলার জন্য rmdirতৈরি করা হয়েছিল, সমান্তরালভাবে ডিরেক্টরিগুলি সরানোর জন্য তৈরি করা হয়েছিল mkdir। বহু বছর আগে, ইউনিক্স rmকেবলমাত্র অনুরোধ করে ডিরেক্টরিগুলি সরিয়ে ফেলতে পারে rmdir। কোনও rmdir(2)সিস্টেম কল ছিল না , rmdirএটি একটি প্রোগ্রাম ছিল যা ডেকেছিল unlink(2)

তথ্যসূত্র:


2

নিখুঁতভাবে মতামতের বিষয়, তবে ডিরেক্টরিগুলি সরানোর rmসময় ফাইলগুলি rmdirসরিয়ে দেয়। ডিরেক্টরি হ'ল একটি ফাইল, তবে একটি বিশেষ ধরণের ফাইল, সুতরাং rmএগুলি অপসারণ করার জন্য, তবে তাদের বিশেষভাবে চিকিত্সা করার জন্য (অর্থাত্ ক্ষমতা সক্ষম করার জন্য অতিরিক্ত বিকল্পের প্রয়োজন হয় to) অন্যদিকে সমস্ত ফাইল ডিরেক্টরি নয়, এবং এটি কোনও rmdirডিরেক্টরি নয় যা মুছে ফেলার জন্য আইএমএইচও-এর কোনও অর্থ নেই ।


1
যদি এটি হয় তবে কেন rmএকটি খালি ডিরেক্টরি (পুনরাবৃত্ত মোড ব্যতীত) সরাতে পারবেন না ?
ব্যবহারকারী 253751

একই কারণে এটি একটি সম্পূর্ণ ডিরেক্টরি মুছে ফেলতে পারে না - -rডিরেক্টরিটি বিশেষ-ফাইল বৈশিষ্ট্য সক্ষম করার জন্য এর পতাকা প্রয়োজন requires
ডারউইন ভন কোরাক্স

1
বিজ্ঞপ্তি যুক্তি সেখানে ...
ব্যবহারকার 253751

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