web-dev-qa-db-fra.com

Existe-t-il un scénario dans lequel rm -rf -no-preserve-root est nécessaire?

J'ai vu des questions sur des cas où des personnes auraient accidentellement fait rm -rf --no-preserve-root ou rm -rf *, effaçant la plupart ou la totalité de leur système de fichiers avant de pouvoir réagir.

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

22
Nzall

IMPORTANT: Les systèmes UEFI modernes montent le microprogramme dans le répertoire /sys et le mettent à la disposition du système d'exploitation. NE LANCEZ PAS cette commande sur un système moderne, car il supprimera ce micrologiciel, ce qui nuirait essentiellement à votre machine.


Le scénario le plus simple auquel je puisse penser est celui de quelqu'un qui souhaite supprimer toutes les données de son lecteur. Il peut y avoir des raisons parfaitement légitimes de le faire et le moyen le plus simple auquel je puisse penser est

rm -rf --no-preserve-root /

Il s'avère que celui-ci est en fait donné à titre d'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 très bonne raison est que vous souhaitez supprimer un système de fichiers monté dans lequel vous avez chroot-. Dans ce cas, rm -rf --no-preserve-root / supprimera le système dans l'environnement chroot 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 de faire ce que je veux. C'est mon travail d'être prudent, le système ne devrait me permettre que de faire ce que je veux faire. Si ce que je veux est stupide, c'est mon problème et pas celui de l'OS.

Quoi qu’il en soit, il s’agit d’une restriction relativement nouvelle, elle a été ajoutée à la 7ème version de la spécification POSIX (la précédente un est ici), avant que rm / ne soit une commande parfaitement valide. Sur une note historique, les répertoires . et .. ont toujours été protégés de rm, depuis 1979, date à laquelle rm a acquis le droit de supprimer des répertoires. Plus sur cela ici .

22
terdon

L'existence du commutateur --no-preserve-root ne consiste pas à ajouter des fonctionnalités supplémentaires , mais à remplacer une réduction très saine de la fonctionnalité. Ce commutateur est probablement basé sur la philosophie voulant que l’ordinateur fasse ce qui lui est dit et que des commandes soient disponibles pour exprimer toute action souhaitée. Ce commutateur est antérieur à l'UEFI et, selon mon expérience, il est désormais obsolète.

Dans la pratique moderne, sans ce commutateur, la commande rm é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, ce qui constitue une violation de la considération spéciale déjà prise pour les répertoires . et ... C'est pourquoi leur comité des normes a autorisé cette exception spéciale - pas pour empêcher un accident. Ce changement a été introduit pour la première fois avec Solaris 10 build 36.

http://archive.is/5lmc9

9
durette

Peut-être que ce n’est pas une réponse que le demandeur initial souhaite, 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 se fasse pas via la commande rm, cela fait partie du processus switch_root (8) lors du démarrage de votre système Linux (non intégré).

1
Explorer09