La principale raison est probablement historique. Au bon vieux temps, il n'y avait pas de rmdir(2)
et mkdir(2)
appels système (nous parlons ici de la 7e édition d'UNIX™) et rmdir(1)
était (par nécessité) un programme racine SUID qui utilisait le unlink(2)
appel système pour supprimer des répertoires.
Les manuels UNIX de la 7e édition sont disponibles en ligne à l'adresse http://cm.bell-labs.com/7thEdMan (dernière vérification le 2017-04-23) ; Ils sont également disponibles sur http://plan9.bell-labs.com/7thEdMan (dernière vérification le 2017-04-23). Il semble également y avoir au moins une source alternative en ligne - http://wolfram.schneider.org/bsd/7thEdManVol2/ - pour les articles du volume 2, avec un lien vers le site FreeBSD pour les commandes et les appels système du volume 1 .
Le rm
la commande (un programme normal non-SUID) a invoqué le rmdir(1)
commande pour supprimer les répertoires vides. Il ne pouvait pas le faire lui-même; qui nécessitait des privilèges root. Donc, le rmdir(1)
commande (voir ici pour son code source dans Unix V7) existait pour supprimer les répertoires vides, et le rm
la commande n'a pas supprimé les répertoires vides elle-même.
Pour utiliser rm
pour supprimer des répertoires, il faut donner le -r
option.
Il y a aussi un argument de symétrie. Vous avez besoin d'une commande mkdir(1)
créer des répertoires; il semble raisonnable d'avoir une commande rmdir(1)
pour défaire quoi mkdir(1)
a fait. De plus, ce sont (de nos jours) de simples exerciteurs du rmdir(2)
et mkdir(2)
appels système - oui, de retour dans la 7e édition UNIX, mkdir(1)
était aussi un programme racine SUID, utilisant le mknod(2)
appelez pour créer un nœud de répertoire et le link(2)
appeler pour créer le .
et ..
entrées dans le répertoire.
"rm" ne fonctionne pas sur les répertoires. Vous devez soit utiliser rmdir, soit spécifier le commutateur -r pour une suppression récursive. La raison est historique :unlink
et rmdir
sont des appels système distincts depuis les premiers jours d'Unix.
De plus, rmdir ne supprime que empty répertoires. Si vous voulez vous assurer de ne pas supprimer de fichiers supplémentaires dans un répertoire, rmdir
est plus sûr que rm -r
(sauf si vous avez aliasé rm de sorte que vous devez toujours confirmer ce que vous supprimez, c'est-à-dire alias rm='rm -i'
dans ~/.bashrc ou tout ce que vous utilisez).