Ich verwende BSD und Linux täglich und es ist mir noch nie passiert, dass ich rmdir(1) statt rm(1) verwenden musste. Was ist der Zweck der Existenz von rmdir?
Antwort1
Der Hauptgrund ist wahrscheinlich historischer Natur. In den alten, alten Tagen gab es keine rmdir(2)
Systemaufrufe mkdir(2)
(wir sprechen hier von UNIX™ 7th Edition) und es rmdir(1)
gab (notwendigerweise) ein SUID-Root-Programm, das den unlink(2)
Systemaufruf zum Entfernen von Verzeichnissen verwendete.
Die UNIX-Handbücher der 7. Ausgabe sind online verfügbar unterhttp://cm.bell-labs.com/7thEdMan(zuletzt geprüft am 23.04.2017); Sie sind auch verfügbar unterhttp://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 zurFreeBSDSite für die Befehle und Systemaufrufe in Band 1.
Der rm
Befehl (ein normales Nicht-SUID-Programm) rief den rmdir(1)
Befehl zum Entfernen leerer Verzeichnisse auf. Er konnte dies nicht selbst tun; dazu waren Root-Rechte erforderlich. Der rmdir(1)
Befehl (sieheHierfür seinen Quellcode in Unix V7) existierte zum Entfernen leerer Verzeichnisse, und der rm
Befehl entfernte selbst keine leeren Verzeichnisse.
Um rm
Verzeichnisse zu entfernen, müssen Sie die -r
Option angeben.
Es gibt auch ein Symmetrie-Argument. Sie benötigen einen Befehl, mkdir(1)
um Verzeichnisse zu erstellen; es erscheint sinnvoll, einen Befehl zu haben, rmdir(1)
um das mkdir(1)
Geschehene rückgängig zu machen. Außerdem sind sie (heutzutage) einfache Executoren der Systemaufrufe the rmdir(2)
und mkdir(2)
– ja, damals in der 7. Edition von UNIX war es auch ein SUID-Root-Programm, das den Aufruf zum Erstellen eines Verzeichnisknotens und den Aufruf zum Erstellen der und Einträge im Verzeichnis mkdir(1)
verwendete .mknod(2)
link(2)
.
..
Antwort2
"rm" funktioniert nicht mit Verzeichnissen. Sie müssen entweder rmdir verwenden oder den Schalter -r für eine rekursive Löschung angeben. Der Grund ist historisch: unlink
und rmdir
sind separate Systemaufrufe und bestehen seit den frühen Tagen von Unix.
Antwort3
Außerdem entfernt rmdir nurleerVerzeichnisse. Wenn Sie sicherstellen möchten, dass Sie keine zusätzlichen Dateien in einem Verzeichnis löschen, rmdir
ist dies sicherer als rm -r
(außer wenn Sie rm so aliasiert haben, dass Sie immer bestätigen müssen, was Sie löschen, d. h. alias rm='rm -i'
in ~/.bashrc oder was auch immer Sie verwenden).
Antwort4
Außerdem rmdir
können leere Verzeichnisse mithilfe von Globbing-Ausdrücken (Platzhaltern) leicht entfernt werden. So entfernen Sie beispielsweise alle leeren Verzeichnisse, /tmp
ohne Dateien oder Verzeichnisse mit Inhalt zu berühren:
cd /tmp ; rmdir *