GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la raison pour laquelle rmdir(1) et rm(1) coexistent ?

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).


Linux
  1. Quelle est l'interface pour les appels système ARM et où est-elle définie dans le noyau Linux ?

  2. Quelle est la différence entre adduser et useradd ?

  3. Quel est l'ID de partition/le type de système de fichiers pour UDF ?

  4. Quelle est la différence entre $(CC) et $CC ?

  5. Quel est le nom d'utilisateur et le mot de passe par défaut pour un Ubuntu Live CD ?

Quelle est la différence entre Linux et Unix ?

Le point d'Uniq -u et à quoi ça sert ??

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre `su -` et `su --login` ?

Quelle est la différence entre unlink et rm ?