जवाबों:
मुख्य कारण शायद ऐतिहासिक है। पुराने, पुराने दिनों में, कोई rmdir(2)और mkdir(2)सिस्टम कॉल नहीं थे (हम यहां 7 वें संस्करण UNIX ™ पर चर्चा कर रहे हैं), और rmdir(1)एक SUID रूट प्रोग्राम था जो unlink(2)निर्देशिकाओं को हटाने के लिए सिस्टम कॉल का उपयोग करता था ।
7 वें संस्करण UNIX मैनुअल http://cm.bell-labs.com/7thEdMan पर ऑनलाइन उपलब्ध हैं (अंतिम बार 2017-04-23 की जाँच की गई); वे http://plan9.bell-labs.com/7thEdMan पर भी उपलब्ध हैं (अंतिम बार 2017-04-23 की जांच की गई)। वहाँ भी लगता है कि कम से कम एक वैकल्पिक स्रोत ऑनलाइन - http://wolfram.schneider.org/bsd/7thEdManVol2/ - वॉल्यूम 2 में लेखों के लिए, वॉल्यूम 1 में कमांड और सिस्टम कॉल के लिए FreeBSD साइट के लिंक के साथ। ।
rmआदेश (एक नियमित रूप से गैर SUID कार्यक्रम) लागू rmdir(1)खाली निर्देशिका को दूर करने के आदेश। यह स्वयं ऐसा नहीं कर सकता था; आवश्यक विशेषाधिकार तो, rmdir(1)आदेश (देखें यहाँ यूनिक्स V7 में अपने स्रोत कोड के लिए) खाली निर्देशिका दूर करने के लिए ही अस्तित्व में है, और rmआदेश खाली निर्देशिका खुद को नहीं निकाला।
rmनिर्देशिकाओं को हटाने के लिए उपयोग करने के लिए, आपको -rविकल्प देना होगा ।
एक सममिति तर्क भी है। mkdir(1)निर्देशिका बनाने के लिए आपको एक कमांड की आवश्यकता होती है ; यह उचित है कि rmdir(1)जो mkdir(1)किया उसे पूर्ववत करने का आदेश दिया। प्लस rmdir(2)और mkdir(2)सिस्टम कॉल के वे (इन दिनों) सरल अभ्यासकर्ता हैं - हां, 7 वें संस्करण में वापस UNIX, mkdir(1)एक SUID रूट प्रोग्राम भी था, mknod(2)डायरेक्टरी नोड link(2)बनाने के लिए कॉल का उपयोग करके .और ..डायरेक्टरी में और प्रविष्टियां बनाने के लिए कॉल। ।
fsck(1)जो बच गया है।
"आरएम" निर्देशिकाओं पर काम नहीं करता है। आपको या तो rmdir का उपयोग करना होगा या एक पुनरावर्ती विलोपन के लिए -r स्विच निर्दिष्ट करना होगा। कारण ऐतिहासिक है: unlinkऔर rmdirअलग-अलग सिस्टम कॉल हैं और यूनिक्स के शुरुआती दिनों से हैं।
rmdir(2)है और न ही mkdir(2)एक प्रणाली कॉल के रूप में अस्तित्व में थी; उपयोगकर्ता निर्देशिका नोड बनाने के rootलिए mknod(2)कॉल का उपयोग कर सकता है और निर्देशिका में प्रविष्टियां और प्रविष्टियां link(2)बनाने के लिए कॉल कर सकता है ; और निर्देशिका प्रविष्टियों को हटाने के लिए कॉल का उपयोग कर सकता है । ...rootunlink(2)
इसके अलावा rmdir केवल खाली निर्देशिका को हटाता है । यदि आप यह सुनिश्चित करना चाहते हैं कि आप किसी निर्देशिका में किसी अतिरिक्त फ़ाइल को नहीं हटाते हैं, rmdirतो इससे अधिक सुरक्षित है rm -r(सिवाय इसके कि यदि आप उर्फ आरएम ऐसे हैं, तो आपको हमेशा पुष्टि करनी होगी कि आप क्या हटाते हैं, अर्थात alias rm='rm -i'~ / .bashrc या आप जो भी उपयोग कर रहे हैं। )।
इसके अलावा, rmdirग्लोबिंग (वाइल्डकार्ड) अभिव्यक्तियों के साथ खाली निर्देशिकाओं को निकालना आसान बनाता है। उदाहरण के लिए, /tmpसामग्री के साथ किसी भी फाइल या निर्देशिका को छूने के बिना सभी खाली निर्देशिकाओं को हटाने के लिए :
cd /tmp ; rmdir *
rmdir /tmp/*। यदि /tmpनिर्देशिका वास्तव में बड़ी है, तो यह नाम प्रति अतिरिक्त पाँच वर्णों के कारण तर्कों के लिए थोड़ी जल्दी निकल सकता है, लेकिन इसके लिए cdआपको निर्देशिका पदानुक्रम के आसपास जाने की आवश्यकता नहीं है । यह rmdir /tmp/* 2>/dev/nullत्रुटि संदेशों को देखने से बचने के लिए भी विचार करने योग्य है (आमतौर पर बहुत कुछ होगा, और उनमें से लगभग सभी उस कार्य के लिए अप्रासंगिक होंगे)।