Der Hauptgrund ist wahrscheinlich historischer Natur. Früher gab es rmdir(2)
nicht und mkdir(2)
Systemaufrufe (wir besprechen hier die 7. Ausgabe von UNIX™) und rmdir(1)
war (notwendigerweise) ein SUID-Root-Programm, das den unlink(2)
verwendete Systemaufruf zum Entfernen von Verzeichnissen.
Die 7. Ausgabe der UNIX-Handbücher sind online verfügbar unter http://cm.bell-labs.com/7thEdMan (zuletzt geprüft am 23.04.2017); Sie sind auch verfügbar unter http://plan9.bell-labs.com/7thEdMan (zuletzt geprüft am 23.04.2017). Es scheint auch mindestens eine alternative Quelle online zu geben – http://wolfram.schneider.org/bsd/7thEdManVol2/ – für die Artikel in Band 2, mit einem Link zur FreeBSD-Site für die Befehle und Systemaufrufe in Band 1 .
Die rm
Befehl (ein normales Nicht-SUID-Programm) hat den rmdir(1)
aufgerufen Befehl zum Entfernen leerer Verzeichnisse. Es könnte es selbst nicht tun; das erforderte Root-Rechte. Also die rmdir(1)
Befehl (siehe hier für seinen Quellcode in Unix V7) existierte, um leere Verzeichnisse zu entfernen, und der rm
Befehl hat leere Verzeichnisse nicht selbst entfernt.
Um rm
zu verwenden Um Verzeichnisse zu entfernen, müssen Sie den -r
eingeben Option.
Es gibt auch ein Symmetrie-Argument. Sie benötigen einen Befehl mkdir(1)
Verzeichnisse erstellen; es erscheint vernünftig, einen Befehl rmdir(1)
zu haben um was rückgängig zu machen mkdir(1)
tat. Außerdem sind sie (heute) einfache Ausübende des rmdir(2)
und mkdir(2)
Systemaufrufe – ja, damals in der 7. Ausgabe von UNIX, mkdir(1)
war auch ein SUID-Root-Programm, das den mknod(2)
verwendete -Aufruf zum Erstellen eines Verzeichnisknotens und link(2)
Aufruf zum Erstellen von .
und ..
Einträge im Verzeichnis.
"rm" funktioniert nicht bei Verzeichnissen. Sie müssen entweder rmdir verwenden oder den Schalter -r für ein rekursives Löschen angeben. Der Grund ist historisch:unlink
und rmdir
sind separate Systemaufrufe und stammen aus den Anfängen von Unix.
Auch rmdir entfernt nur leer Verzeichnisse. Wenn Sie sicherstellen möchten, dass Sie keine weiteren Dateien in einem Verzeichnis löschen, rmdir
ist sicherer als rm -r
(außer wenn Sie rm so aliasiert haben, dass Sie immer bestätigen müssen, was Sie löschen, z. B. alias rm='rm -i'
in ~/.bashrc oder was auch immer Sie verwenden).