Y a-t-il un scénario où rm -rf -no-preserve-root est nécessaire?


27

J'ai vu quelques questions ici où les gens font accidentellement rm -rf --no-preserve-rootou rm -rf *effacent la plupart ou la totalité de leur système de fichiers avant de pouvoir réagir.

Y a-t-il jamais une raison d'utiliser --no-preserve-root, que ce soit en utilisation normale, en tant que développeur ou en tant qu'administrateur?


4
Je ne peux imaginer aucun cas utile… Je pense que cette option existe simplement pour obtenir l'orthogonalité du principe UNIX (en termes de garder les mêmes choses sans exception). Vous voulez très probablement l'exception dans le cas de /, mais le «cas général» est toujours représenté. En d'autres termes: «Ce n'est pas le travail de mon ordinateur de me dire quoi faire.« Et ça ne devrait pas l'être.
Andreas Wiese

C'est là une arme possible à utiliser lorsque SkyNet prend le relais.
Mitch Dart

Réponses:


26

IMPORTANT: les systèmes UEFI modernes montent le micrologiciel sous le /sysrépertoire et le mettent à la disposition du système d'exploitation. N'EXÉCUTEZ PAS cette commande sur un système moderne car cela supprimera ce micrologiciel, essentiellement en brickant votre machine.


Le scénario le plus simple auquel je peux penser est que quelqu'un souhaite supprimer toutes les données de son lecteur. Il peut y avoir des raisons parfaitement légitimes de le faire et la façon la plus simple à laquelle je peux penser est

rm -rf --no-preserve-root /

Il s'avère que celui-ci est en fait donné comme exemple dans info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Une autre bonne raison est que vous souhaitez supprimer un système de fichiers monté dans lequel vous avez chrootentré. Dans ce cas, rm -rf --no-preserve-root /supprimera le système dans l' chrootenvironnement mais laissera le vôtre intact.

Je suis sûr qu'il y a plus de raisons possibles, mais en général, il semble très raisonnable que mon système me permette d'en faire ce que je veux. C'est mon travail de faire attention, le système ne doit me permettre que de faire ce que je veux faire. Si ce que je veux est stupide, c'est mon problème et non celui du système d'exploitation.

Quoi qu'il en soit, il s'agit d'une restriction relativement nouvelle, elle a été ajoutée dans la 7e version de la spécification POSIX (la précédente est ici), avant que ce rm -rf /soit une commande parfaitement valide. Sur une note historique, les répertoires .et ..ont toujours été protégés depuis rm, depuis 1979, date à laquelle ils ont rmacquis la possibilité de supprimer des répertoires. Plus à ce sujet ici .


21
NE PAS UTILISER CELA POUR SUPPRIMER TOUTES LES DONNÉES SI VOTRE SYSTÈME EST UEFI (nouveaux ordinateurs) .Cela supprime toutes les variables du firmware et rend la carte mère aussi inutile qu'une brique
Suici Doga

5
@SuiciDoga: source ou explication supplémentaire? Le firmware de la carte mère ne doit pas être stocké sur le disque dur, sinon il serait perdu si vous tirez sur le lecteur.
Tarka

15
@Tarka: / sys / firmware / efi / efivars / peut être monté et la suppression récursive peut supprimer ces variables. Cela ne devrait vraiment pas briquer un système, mais le pourrait. Voir thenextweb.com/insider/2016/02/01/...
cyanique

4
@Tarka, ils ne sont pas stockés sur le disque dur et tirer sur le disque ne les affecterait pas. Cependant, pour des raisons que je n'ai pas encore comprises, ils sont montés et sont donc réellement accessibles sous /.
terdon

20
La bonne façon de vider un disque est de reformater ses partitions (ou de le repartitionner complètement). Tous les systèmes de fichiers ne sont pas des disques durs, donc en utilisant rm -rf /vous pouvez effacer une machine distante sur le montage NFS / CIFS / SSHFS de quelqu'un par exemple.
Score_Under

12

L'existence du --no-preserve-rootcommutateur n'est pas pour ajouter des fonctionnalités supplémentaires mais pour remplacer une réduction très saine des fonctionnalités. Ce commutateur est probablement basé sur la philosophie selon laquelle l'ordinateur doit faire ce qui lui est demandé et que des commandes doivent être disponibles pour exprimer toute action souhaitée. Ce commutateur est antérieur à l'UEFI, et d'après mon expérience, je dis qu'il est désormais obsolète.

Dans la pratique moderne, sans ce commutateur, la rmcommande évite la suppression accidentelle du répertoire racine lors de l'utilisation d'une variable non initialisée ou d'un espace parasite.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Note de bas de page amusante: la protection n'était pas son intention. Selon un blog de Sun Microsystems, la suppression du /répertoire supprimera implicitement le répertoire de travail actuel, une violation de la considération spéciale déjà faite pour les répertoires .et ... C'est pourquoi leur comité des normes a autorisé cette exception spéciale - pas pour prévenir un accident. Cette modification a été introduite pour la première fois avec Solaris 10 build 36.

http://archive.is/5lmc9


Merci pour le lien! J'espérais que ce petit morceau historique serait cité car je me demandais quelle était la raison du changement.
Cameron Gagnon

Informations supplémentaires intéressantes - merci
Mark

1

Ce n'est peut-être pas une réponse que le demandeur d'origine veut, mais il existe un cas d'utilisation qui doit supprimer tous les fichiers de manière récursive du répertoire racine. Bien que cela ne passe pas par la rmcommande, cela fait partie du processus switch_root (8) lors du démarrage de votre système Linux (non intégré).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.