202 votes

Jusqu'où pouvez-vous aller avec une commande 'rm -rf /' ?

Je me suis souvent demandé jusqu'où irait le système si on le faisait tourner. rm -rf / . Je doute que le système d'exploitation soit capable de s'effacer lui-même ( ?).

Question bonus : Après l'exécution de la commande, le rm s'est retiré lui-même ?

Update: J'ai testé ceci dans quelques unes des principales distributions Unix en utilisant VirtualBox et les réponses décrivent exactement ce qui se passe. Si les paramètres sont corrects, rm supprimera chaque bit physique de données sur le disque. Cependant, j'ai rencontré quelques problèmes en utilisant une version de rm autre que celle de GNU. Par exemple, je crois que BusyBox a sa propre version et elle ne vous permet pas de supprimer autant de données que vous le pourriez.

Cette question était un Question de la semaine pour les super utilisateurs .
Lire l'article du 7 juillet 2011 entrée de blog pour plus de détails ou soumettez votre propre La question de la semaine.

4voto

jlliagre Points 13539

rm -rf / ne devrait pas être autorisé sur les implémentations récentes car il a été suggéré qu'il violait le standard POSIX :

" rm -rf / "Protection sur le blog d'Oracle

Quoi qu'il en soit, nous avons fini par modifier la spécification, et Solaris 10 possède (depuis la version 36) une version de /usr/bin/rm (/bin est un lien symbolique vers /usr/bin sous Solaris) et de /usr/xpg4/bin/rm qui se comporte ainsi :

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

3voto

CarlF Points 8772

Un point que je n'ai pas vu mentionné par quelqu'un d'autre : les fichiers qui sont actuellement ouverts (par exemple rm lui-même), même s'ils sont supprimés, ne disparaîtront pas réellement du disque avant d'être fermés.

1voto

Anarko_Bizounours Points 280

Pour l'avoir essayé une fois (sur un serveur qui me faisait chier), connecté en root, en terminal, vous perdrez presque tout. La seule chose qui ne sera pas effacée sera seulement le processus qui était essentiel pour l'OS.

1voto

kenorb Points 22006

Jusqu'où vous pouvez aller, cela dépend essentiellement des distributions Unix/Linux spécifiques.

Mais pour répondre à votre question de base, oui - rm serait supprimée avec elle ainsi que toute autre commande standard dans /bin et d'autres dossiers.

Voici le test simple que j'ai effectué sous Linux Ubuntu 15.04 en utilisant une VM.

  1. Initialiser la machine virtuelle via vagrant :

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
  2. Ensuite, lorsque vous essayez de supprimer tous les fichiers de la manière standard, vous ne pouvez pas le faire :

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -fr /
    rm: it is dangerous to operate recursively on '/'
    rm: use --no-preserve-root to override this failsafe
  3. Essayons donc --no-preserve-root . Vérifiez toujours que vous êtes connecté à la machine virtuelle (afin d'avoir vagrant@vagrant-ubuntu-vivid-64:~$ ), puis courir (n'essayez pas ça à la maison) :

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -vfr --no-preserve-root /
    removed directory: '/lost+found'
    removed directory: '/opt'
    removed '/bin/nc'
    removed '/bin/less'
    removed '/bin/wdctl'
    removed '/bin/nano'
    ...
    removed '/bin/rmdir'
    removed '/bin/sh'
    removed '/bin/rm'
    ...
    removed directory: '/bin'
    removed directory: '/usr/games'
    removed '/usr/bin/byobu-launcher-install'
    removed '/usr/bin/ipcmk'
    removed '/usr/bin/sum'
    removed directory: '/usr/bin'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    removed '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    removed directory: '/usr/lib/gcc/x86_64-linux-gnu/5'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    removed directory: '/run/initramfs'
    removed directory: '/media'
    rm: cannot remove '/proc/fb': Operation not permitted
    rm: cannot remove '/proc/fs/ext4/sda1/options': Operation not permitted
    ...
    removed '/vmlinuz'
    removed '/boot/config-3.19.0-23-generic'
    removed '/boot/grub/grubenv'
    ...
    removed directory: '/boot'
    removed '/lib64/ld-linux-x86-64.so.2'
    rm: cannot remove '/dev/hugepages': Device or resource busy
    rm: cannot remove '/dev/mqueue': Device or resource busy
    rm: cannot remove '/dev/shm': Device or resource busy
    removed '/dev/vcsa7'
    ...
    removed '/dev/mem'
    removed '/dev/rfkill'
    removed '/dev/vga_arbiter'
    ...
    rm: cannot remove '/sys/fs/ecryptfs/version': Operation not permitted
    removed directory: '/etc'
    removed directory: '/mnt'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    removed '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/id'
    removed '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    removed '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    removed directory: '/vagrant/.vagrant/machines/default/virtualbox'
    removed directory: '/vagrant/.vagrant/machines/default'
    removed directory: '/vagrant/.vagrant/machines'
    removed directory: '/vagrant/.vagrant'
    removed '/vagrant/Vagrantfile'
    rm: cannot remove '/vagrant': Device or resource busy

    Après cela, il revient à l'invite Shell comme si rien ne s'était passé, mais vous ne pouvez plus exécuter aucune commande en dehors des quelques commandes intégrées et de celles qui ne le sont pas. kill pour que vous puissiez finir votre travail et tuer votre session :)

    Par exemple :

    $ rm
    rm: command not found
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    $ which kill
    -bash: /usr/bin/which: No such file or directory
    $ kill -9 $$
    Connection to 127.0.0.1 closed.

Donc ça a pratiquement tout enlevé, y compris rm , ls et toutes les autres commandes, mais vous êtes toujours connecté. Il y a quelques dossiers spéciaux qui n'ont pas été supprimés, comme certains dispositifs de /dev , /proc o /sys qui ne sont pas des répertoires/fichiers ordinaires, mais un pseudo-système de fichiers fournissant des interfaces aux données du processus et du noyau.

Si vous ne disposez pas de Vagrant ou de Linux, vous pouvez jouer avec quelques Émulateurs JavaScript Linux x86 .

Si vous êtes intéressé par les possibilités de récupération après un tel désastre, vérifiez :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X