Un bref historique des commandes `rm' et `rmdir' <author>Eric Fischer <!-- Compléter: Linux Gazette n°49 - Traducteur:Xavier SERPAGGI --> <!-- L'article sera coupé ici... --> <sect>Un bref historique des commandes `rm' et `rmdir' <p> Par Eric Fisher <tt>enf@pobox.com</tt> <!-- La traduction --> <!-- utiliser <sect1> pour les titres intermédiaires si l'article est long --> Contrairement à la plupart des utilitaires de base d'Unix et de Linux, le nom de la commande <tt/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 <tt/delete/, ce qui en Multics pouvait éventuellement être abrégé par <tt/dl/. En Unix, le nom est devenu <tt/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 <tt/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 <tt/rmdir/ fait juste un appel système à <tt/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 <tt/rmdir()/, de telle manière que le programme <tt/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 (<it/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 <tt/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 <tt/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 : <itemize> <item><tt/rm -f/ ne demande pas confirmation avant d'effacer des fichiers en lecture seule. <item><tt/rm -r/ supprime récursivement les sous-répertoires. </itemize> La façon dont l'option <tt/-r/ de <tt/rm/ était codée à cette époque faisait que quand <tt/rm/ rencontrait un sous-répertoire au milieu des fichiers qu'il était sensé supprimer, il faisait un <tt/cd/ vers ce répertoire (alors nommé <tt/chdir/) et lançait une autre instance de <tt/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 : <itemize> <item> <tt/rm -i/ demande si chaque fichier ou répertoire doit être supprimé. </itemize> Cela permettait de taper <tt>rm -i *</tt> 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é <tt/dsw/. Le nom de <tt/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 <em/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 <tt/dsw/ (delete s--t work ? <it/``effacer ce travail de m---- ?''/ <em/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'' (<it/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 <tt/getcsw()/ que les programmes pouvaient utiliser pour savoir comment ils étaient positionnés). Pour utiliser le <tt/dsw/ original, vous deviez positionner les commutateurs pour qu'ils forment un nombre, puis lancer <tt/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 <tt/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 <tt/rm -i/. A ce point, l'évolution de la commande <tt/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. </sect> <!-- ...et ici --> </article>