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 .
rm
Komutu (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 rm
komut boş dizinlerin kendisini kaldırmadı.
rm
Dizinleri kaldırmak için kullanmak için -r
seç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 unlink
ve rmdir
ayrı sistem çağrılarıdır ve Unix'in ilk günlerinden beri olmuştur.
rmdir(2)
de mkdir(2)
vardı; kullanıcı root
kullanabilir 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 root
kullanabilir 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, rmdir
boş dizinlerin globbing (joker karakter) ifadeleriyle kaldırılmasını kolaylaştırır. Örneğin, /tmp
içeriğe sahip dosyalara veya dizinlere dokunmadan içindeki tüm boş dizinleri kaldırmak için :
cd /tmp ; rmdir *
rmdir /tmp/*
. Eğer /tmp
dizin 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 cd
dizin hiyerarşisi etrafında hareket. Ayrıca rmdir /tmp/* 2>/dev/null
hata mesajlarını görmekten kaçınmaya değer (tipik olarak çok fazla olacak ve neredeyse hepsi bu görevle alakasız olacaktır).