GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi est-ce Rm -rf et non Rmdir -rf ?

J'ai toujours été curieux de savoir pourquoi la commande pour tout supprimer dans un répertoire est rm -rf .

Pourquoi n'y a-t-il pas de drapeaux pour faire la même chose avec rmdir ?

Ne serait-il pas plus intuitif d'utiliser rmdir pour les opérations sur les répertoires ?

Réponse acceptée :

Au début du système de fichiers Unix (au moins à l'époque de la V7 vers 1970), les répertoires étaient implémentés en tant que fichiers spéciaux et seul root pouvait utiliser le mknod(2) appel système qui les a créés et seul root pouvait unlink(2) un fichier spécial de répertoire.

Ces protections ont été mises en place afin de maintenir la cohérence de la structure du système de fichiers. Par exemple, si un utilisateur était autorisé à écrire dans un fichier spécial de répertoire, il pourrait rendre son répertoire parent .. pointe vers lui-même (spécifiquement son propre i-node). Cela créerait une référence circulaire dans le système de fichiers, ce qui serait une mauvaise chose. Bien sûr, il y a d'autres incohérences que l'on pourrait faire, ceci n'est qu'un exemple clair.

La cohérence a été maintenue par des programmes de l'espace utilisateur comme mkdir(1) et rmdir(1) qui étaient racine Set-UID afin qu'ils puissent effectuer les appels système privilégiés au nom d'un utilisateur non privilégié. Lorsque la récursivité a été ajoutée à rm(1) , la commande de suppression s'exécuterait en tant qu'UID actuel, puis appellerait rmdir(1) uniquement pour supprimer les répertoires vides. Il s'agit toujours d'une méthode assez standard d'élévation des autorisations :n'utilisez pas plus d'autorisations que nécessaire.

Quelque temps plus tard mkdir(2) et rmdir(2) ont été ajoutés en tant que leurs propres appels système mais la relation entre rm(1) et rmdir(1) reste.

Personnellement, je trouve un peu plus satisfaisant de rmdir junk et sachez que le pire que j'ai fait a été de supprimer un répertoire vide.


Linux
  1. Pourquoi obtenez-vous cp:omission d'une erreur de répertoire sous Linux et comment résoudre

  2. $var Vs ${var} Et citer ou ne pas citer ?

  3. Autorisations SSH et répertoire personnel ?

  4. Pourquoi Nullglob n'est-il pas par défaut ?

  5. Pourquoi Deis et qu'est-ce que c'est ?

Pourquoi mon lien symbolique crée-t-il un fichier et non un dossier ?

Pourquoi un dossier doit-il être exécutable ?

Pourquoi le terrible 'rm -rf /' est-il même autorisé ?

pourquoi sftp rmdir ne fonctionne-t-il pas?

Pourquoi utilisons-nous su - et pas seulement su ?

Pourquoi ma crontab ne fonctionne-t-elle pas et comment puis-je la dépanner ?