Quelle est la raison de cette séquence "rm" spécifique dans la blague xkcd?

14

Voici une partie de cette bande dessinée xkcd où l'idée est que l'auteur ne peut pas écrire un programme de tri donc il ajoute du code pour supprimer tous les fichiers

system("rm -rf ./");
system("rm -rf ~/*");
system("rm -rf /");

AFAIK la manière canonique de tout supprimer est de faire en rm /sorte que tout ce qui part de la racine soit supprimé. Voici la dernière commande et les deux commandes précédentes qui tentent d'accéder au rmrépertoire courant et au contenu du répertoire personnel.

Pourquoi pas juste rm /?

acéré
la source

Réponses:

19

Si vous commencez tout en haut, il est possible que vous effaciez quelque chose qui rm(ou une autre partie critique du système) doit continuer, et la perversité restera incomplète.

Ces commandes permettront de s'assurer qu'au moins le cwd et le répertoire personnel de l'utilisateur ont disparu avant de passer au nucléaire.

Flup
la source
5
JFTR lorsque rm est chargé dans la mémoire, il devrait fonctionner et continuer à fonctionner même si les variables nécessaires sont supprimées. Après avoir exécuté à rm -rf /partir d'une session interactive, votre shell devrait toujours fonctionner
Ulrich Dangel
8
Les rms récents échoueront sur la dernière commande avec rm: it is dangerous to operate recursively on ‘/’; autre que cela rmne nécessite pas d'accès à une ressource après l'initialisation. Une raison pour utiliser plusieurs commandes peut être que l'utilisateur peut avoir des autorisations d'accès différentes à ces répertoires.
Stéphane Gimenez
@UlrichDangel, j'ai découvert la voie difficile sur Solaris il y a longtemps ...
vonbrand
1
Ce sera. Vous devez réellement utiliserrm --no-preserve-root / pour que cela fonctionne réellement
Max
1
"Ces commandes garantiront qu'au moins le cwd et le répertoire personnel de l'utilisateur auront disparu avant de passer au nucléaire." Et si nous exécutons ce script lorsque nous sommes dans "/ bin /" :)? Les deux dernières commandes ne s'exécuteront pas du tout.
XzKto
8

Juste pour montrer des niveaux croissants de destructivité: supprimez le répertoire actuel, puis $HOMEdétruisez tout.

vonbrand
la source