Yanıtlar:
Ana sebep muhtemelen tarihseldir. Geri eski, eski günlerde, hiçbir vardı rmdir(2)ve mkdir(2)sistem çağrıları (burada ™ 7. Baskı UNIX tartışıyoruz) ve rmdir(1)(mecburen) kullanılan bir SUID kök programdı unlink(2)dizinleri kaldırmak için sistem çağrısı.
7. Sürüm UNIX el kitaplarına çevrimiçi olarak http://cm.bell-labs.com/7thEdMan adresinden ulaşılabilir (son kontrol tarihi 2017-04-23); Bunlara http://plan9.bell-labs.com/7thEdMan adresinden de ulaşılabilir (son kontrol edilen 2017-04-23). - Ayrıca İnternet'ten en az bir alternatif kaynak var gibi görünüyor http://wolfram.schneider.org/bsd/7thEdManVol2/ bir bağlantı ile, Cilt 2 makaleler için - FreeBSD Cilt 1 komutlar ve sistem çağrıları için sitede .
rmKomutu (normal olmayan SUID programı) çağrılan rmdir(1)boş dizinleri kaldırmak için komut. Kendisi bunu yapamadı; kök ayrıcalıkları gerektiriyordu. Bu nedenle, boş dizinleri kaldırmak için rmdir(1)komut ( Unix V7'deki kaynak kodu için buraya bakın ) vardı ve rmkomut boş dizinlerin kendisini kaldırmadı.
rmDizinleri kaldırmak için kullanmak için -rseçeneği vermeniz gerekir .
Bir simetri argümanı da var. mkdir(1)Dizin oluşturmak için bir komuta ihtiyacınız var ; yaptıklarını rmdir(1)geri almak için bir komuta sahip olmak makul görünmektedir mkdir(1). Artı onlar (bu gün) basit egzersizler rmdir(2)ve mkdir(2)sistem çağrıları - evet, geri 7. Baskı UNIX, mkdir(1)aynı zamanda bir SUID kök programı, mknod(2)bir dizin düğümü link(2)oluşturmak için çağrı ve oluşturmak için çağrı kullanarak .ve.. ve dizinde girişleri .
fsck(1)hayatta kalan.
"rm" dizinlerde çalışmaz. Özyinelemeli silme için rmdir kullanmanız veya -r anahtarını belirtmeniz gerekir. Nedeni tarihseldir unlinkve rmdirayrı sistem çağrılarıdır ve Unix'in ilk günlerinden beri olmuştur.
rmdir(2)de mkdir(2)vardı; kullanıcı rootkullanabilir mknod(2)bir dizin düğümü ve oluşturmak için çağrı link(2)oluşturmak için çağrı .ve ..dizindeki girdileri; ve çağrıyı dizin girişlerini kaldırmak için rootkullanabilir unlink(2).
Ayrıca rmdir yalnızca boş dizinleri kaldırır . Bir dizindeki herhangi bir ek dosyayı silmediğinizden emin olmak istiyorsanız rmdir, daha güvenli olur rm -r(rm'yi her zaman sildiğinizi onaylamanız gerekir, örneğin alias rm='rm -i'~ / .bashrc veya ne kullanırsanız kullanın) ).
Ayrıca, rmdirboş dizinlerin globbing (joker karakter) ifadeleriyle kaldırılmasını kolaylaştırır. Örneğin, /tmpiçeriğe sahip dosyalara veya dizinlere dokunmadan içindeki tüm boş dizinleri kaldırmak için :
cd /tmp ; rmdir *
rmdir /tmp/*. Eğer /tmpdizin gerçekten büyük, bu durum adı başına fazladan beş karakter biraz çabuk argümanlar için alanı tükendi olabilir, ama gerektirmez cddizin hiyerarşisi etrafında hareket. Ayrıca rmdir /tmp/* 2>/dev/nullhata mesajlarını görmekten kaçınmaya değer (tipik olarak çok fazla olacak ve neredeyse hepsi bu görevle alakasız olacaktır).