Das Entfernen des aktuellen Verzeichnisses wirkt sich nicht auf die Dateisystemintegrität oder die logische Organisation aus. Das .
Entfernen wird verhindert, indem der POSIX-Standard befolgt wird, der auf der rmdir(2)
Handbuchseite wie folgt lautet :
Wenn sich das path-Argument auf einen Pfad bezieht, dessen letzte Komponente entweder dot oder dot-dot ist, schlägt rmdir () fehl.
Eine Begründung finden Sie in der rm
Handbuchseite:
Es ist dem rm-Dienstprogramm untersagt, die Namen dot und dot-dot zu entfernen, um die Folgen einer versehentlichen Ausführung folgender Aktionen zu vermeiden:
rm -r. *
Andererseits ist das explizite Entfernen des aktuellen Verzeichnisses (dh durch Angabe seines vollständigen oder relativen Pfads) unter Unix eine zulässige Operation, zumindest seit SVR3, wie es mit Unix-Version 7 bis SVR2 verboten war. Dies ist sehr ähnlich zu dem, was passiert, wenn Sie eine Datei entfernen, in die gerade gelesen oder geschrieben wird. Prozesse, die auf die Löschdatei zugreifen, setzen ihre Lese- und Schreibvorgänge fort, als wäre nichts geschehen. Nachdem Sie ein aktuelles Prozessverzeichnis entfernt haben, kann auf dieses Verzeichnis nicht mehr über seinen Pfad zugegriffen werden, aber sein Inode verbleibt im Dateisystem, bis der Prozess abstürzt oder sein eigenes Verzeichnis ändert.
Beachten Sie, dass der Prozess keinen Pfad relativ zu seinem aktuellen Verzeichnis verwenden kann, um seine CWD zu ändern (z. B. cd ..
), da ..
in seinem aktuellen Verzeichnis kein Eintrag mehr vorhanden ist .
Wenn jemand etwas eingibt rmdir .
, erwartet er wahrscheinlich, dass der aktuelle Verzeichniseintrag entfernt wird, aber wenn ein Verzeichnis (unter Verwendung seines Pfads) entfernt wird .
, werden tatsächlich drei Verzeichniseinträge,, ..
und das Verzeichnis selbst entfernt.
Wenn Sie nur .
den Verzeichniseintrag dieses Verzeichnisses entfernen und nicht, wird ein nicht konformes Verzeichnis erstellt. Wie bereits erwähnt, ist dies jedoch vom Standard verboten.
Wie @Emmanuel zu Recht bemerkte, gibt es einen zweiten Grund, warum das Entfernen .
nicht erlaubt ist. Es gibt mindestens ein POSIX-kompatibles Betriebssystem (Mac OS X mit HFS +), das mit strengen Einschränkungen das Erstellen von Hardlinks zu vorhandenen Verzeichnissen unterstützt. In einem solchen Fall gibt es keine eindeutige Möglichkeit, aus dem Verzeichnis herauszufinden, welcher Hardlink entfernt werden soll.