La suppression du répertoire en cours n'affecte pas l'intégrité du système de fichiers ni son organisation logique. Pour empêcher la .
suppression, il faut suivre la norme POSIX indiquée dans la rmdir(2)
page de manuel:
Si l'argument path fait référence à un chemin dont le composant final est un point ou un point, dot, rmdir () doit échouer.
Une raison peut être trouvée dans la rm
page de manuel:
Il est interdit à l'utilitaire rm de supprimer les noms point et point point afin d'éviter les conséquences de faire par inadvertance quelque chose comme:
rm -r. *
D'autre part, supprimer explicitement le répertoire en cours (c'est-à-dire en indiquant son chemin complet ou relatif) est une opération autorisée sous Unix, du moins depuis SVR3 car il était interdit avec Unix version 7 jusqu'à SVR2. Ceci est très similaire à ce qui se produit lorsque vous supprimez un fichier en cours de lecture ou d'écriture. Les processus accédant au fichier de suppression continuent leurs opérations de lecture et d'écriture comme si rien ne s'était passé. Une fois que vous avez supprimé un répertoire de processus en cours, ce répertoire n'est plus accessible par son chemin, mais son inode reste présent sur le système de fichiers jusqu'à la fin du processus ou la modification de son propre répertoire.
Notez que le processus ne pourra pas utiliser un chemin relatif à son répertoire actuel pour changer son cwd (par exemple cd ..
) car il n'y a plus d' ..
entrée dans son répertoire actuel.
Lorsque le type de quelqu'un rmdir .
, ils attendent probablement l'entrée du répertoire en cours à supprimer , mais quand un répertoire est supprimé ( en utilisant son chemin), trois entrées du répertoire sont effectivement supprimés, .
, ..
et le répertoire lui - même.
Supprimer uniquement .
et pas l'entrée de répertoire de ce répertoire créerait un répertoire non conforme, mais comme déjà indiqué, il est interdit par la norme.
Comme @Emmanuel l'a fait remarquer à juste titre, il y a une deuxième raison pour laquelle le retrait .
n'est pas autorisé. Il existe au moins un système d'exploitation compatible POSIX (Mac OS X avec HFS +) qui, avec de fortes restrictions, prend en charge la création de liens durables vers des répertoires existants. Dans ce cas, il n’existe aucun moyen clair, à l’intérieur du répertoire, de savoir quel lien physique est celui qui doit être supprimé.