Copyright © 2000 Eric Fischer
Copyright © 2000 Xavier Serpaggi
Article paru dans le n°49 de la Gazette Linux de janvier 2000.
Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Contrairement à la plupart des utilitaires de base d'Unix et de Linux, le nom de la commande rm n'est en fait pas plus vieux qu'Unix lui-même. Dans les prédécesseurs d'Unix, le CTSS (Compatible Time Sharing System) et Multics, la commande utilisée pour supprimer des fichiers était appelée delete, ce qui en Multics pouvait éventuellement être abrégé par dl. En Unix, le nom est devenu rm, probablement pour retracer le changement de philosophie entre le fait d'effacer des fichiers et de supprimer les entrées d'un répertoire liées à ceux-ci.
La commande rmdir servant à effacer des répertoires faisait également
partie d'Unix au moment de la parution de son manuel Première Edition (le 3
Novembre 1971). Aujourd'hui, la commande rmdir fait juste un appel système
à rmdir()
pour chacun de ses arguments et rapporte les erreurs s'il y en a.
Mais en 1971 il n'y avait pas d'appel système rmdir()
, de telle manière que
le programme rmdir devait faire tout le travail lui-même.
Il devait s'assurer que le répertoire à effacer était bien vide, que ses
permissions étaient correctes et alors seulement il supprimait les liens spéciaux
.
et ..
avant de délier le répertoire lui-même.
Cette situation a perduré jusqu'en 1983, quand l'introduction du nouveau Fast File
System (Système de Fichiers Rapide) par 4.2BSD a transféré vers le noyau les
responsabilités de création et de suppression des répertoires.
La version de 1971 de rm n'avait aucune des options de la version actuelle. Elle était également disposée à supprimer les fichiers en lecture seule bien que dans le manuel il soit écrit qu'elle « devrait sûrement poser la question ». Cela a été changé de telle manière qu'elle pose effectivement la question (comme le delete du CTSS le faisait en 1965) dans la nouvelle version dont le manuel était daté du 20 Janvier 1973, et qui comprenait ces options :
rm -f ne demande pas confirmation avant d'effacer des fichiers en lecture seule.
rm -r supprime récursivement les sous-répertoires.
La façon dont l'option -r
de rm était codée à cette époque faisait
que quand rm rencontrait un sous-répertoire au milieu des fichiers qu'il
était sensé supprimer, il faisait un cd vers ce répertoire (alors nommé
chdir) et lançait une autre instance de rm -r * pour supprimer son
contenu.
Une version faisant la récursion dans un seul et même processus est apparue
dans la Septième Edition d'Unix en 1979, qui introduisait également une
nouvelle option :
rm -i demande si chaque fichier ou répertoire doit être supprimé.
Cela permettait de taper rm -i * pour supprimer de manière interactive les fichiers désirés d'un répertoire, même ceux dont le nom avait été massacré au point qu'il devienne impossible de le taper sur le clavier. Cette fonctionnalité était en fait nécessaire bien avant mais antérieurement à la Septième Edition, cela était fait par un programme séparé, à présent tombé dans l'oubli, appelé dsw.
Le nom de dsw était plus mystérieux que celui de n'importe quelle autre commande, même dans ce système d'exploitation connu pour ses noms obscurs. Le manuel de la Sixième Edition accablait de sarcasmes les curieux avec la note précisant que « le nom dsw est une relique d'un passé lointain. Son étymologie est amusante. » La Première Edition avait ajouté « ...mais le nom est malgré tout peu judicieux », mais cela disparut dans les manuels suivants.
Les spéculations sur la signification réelle du nom dsw
(delete s--t work ?
« effacer ce travail de m---- ? » do
svidaniya ? NdT : !?!?) a pris fin
quand Dennis Ritchie révéla en 1981 dans un message Usenet que le nom
signifiait à l'origine delete from
switches (« effacer en fonction des commutateurs »).
C'était une référence aux commutateurs de la façade de l'ordinateur PDP-7 sur
lequel tournait les premières versions d'Unix (certaines machines plus récentes
avaient également des commutateurs sur leurs consoles, et les Editions Trois à
Six avaient un appel système getcsw()
que les programmes
pouvaient utiliser pour savoir comment ils étaient positionnés).
Pour utiliser le dsw original, vous deviez positionner les commutateurs pour qu'ils forment un nombre, puis lancer dsw qui lisait alors ce nombre d'entrées dans le répertoire courant, imprimait sur le terminal le nom de la dernière qu'il avait lue et se faisait planter lui-même, laissant derrière lui un fichier core. Vous pouviez alors, si vous le vouliez, effacer le fichier qu'il avait nommé en ré-exécutant le fichier core. Quand cette affreuse interface utilisateur a été remplacée par une plus raisonnable, le nom est resté tant que le programme complet n'a pas été remplacé par rm -i.
A ce point, l'évolution de la commande rm tira, pour la plus grande partie,
à sa fin.
Une version légèrement modifiée, datée du 1er avril 1981 et distribuée avec 4.2 BSD,
introduisait un terminateur d'option « - » pour faciliter la suppression de fichiers
dont le nom commençait par un tiret.
Pour être homogène avec les autres commandes, le standard POSIX l'a changée en « -- »
et a permis également d'utiliser l'option majuscule -R
pour effacer les répertoires
récursivement.
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.