जवाबों:
मुख्य कारण शायद ऐतिहासिक है। पुराने, पुराने दिनों में, कोई 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)
बनाने के लिए कॉल कर सकता है ; और निर्देशिका प्रविष्टियों को हटाने के लिए कॉल का उपयोग कर सकता है । .
..
root
unlink(2)
इसके अलावा rmdir केवल खाली निर्देशिका को हटाता है । यदि आप यह सुनिश्चित करना चाहते हैं कि आप किसी निर्देशिका में किसी अतिरिक्त फ़ाइल को नहीं हटाते हैं, rmdir
तो इससे अधिक सुरक्षित है rm -r
(सिवाय इसके कि यदि आप उर्फ आरएम ऐसे हैं, तो आपको हमेशा पुष्टि करनी होगी कि आप क्या हटाते हैं, अर्थात alias rm='rm -i'
~ / .bashrc या आप जो भी उपयोग कर रहे हैं। )।
इसके अलावा, rmdir
ग्लोबिंग (वाइल्डकार्ड) अभिव्यक्तियों के साथ खाली निर्देशिकाओं को निकालना आसान बनाता है। उदाहरण के लिए, /tmp
सामग्री के साथ किसी भी फाइल या निर्देशिका को छूने के बिना सभी खाली निर्देशिकाओं को हटाने के लिए :
cd /tmp ; rmdir *
rmdir /tmp/*
। यदि /tmp
निर्देशिका वास्तव में बड़ी है, तो यह नाम प्रति अतिरिक्त पाँच वर्णों के कारण तर्कों के लिए थोड़ी जल्दी निकल सकता है, लेकिन इसके लिए cd
आपको निर्देशिका पदानुक्रम के आसपास जाने की आवश्यकता नहीं है । यह rmdir /tmp/* 2>/dev/null
त्रुटि संदेशों को देखने से बचने के लिए भी विचार करने योग्य है (आमतौर पर बहुत कुछ होगा, और उनमें से लगभग सभी उस कार्य के लिए अप्रासंगिक होंगे)।