187 votes

Comment puis-je éviter le rm -rf /* accidentel ?

J'ai simplement exécuté accidentellement rm -rf /*, mais je voulais dire rm -rf ./* (remarquez l'étoile après le slash).

alias rm='rm -i' et --preserve-root par défaut ne m'ont pas sauvé, alors y a-t-il des protections automatiques pour cela ?


Je n'étais pas en root et j'ai annulé la commande immédiatement, mais il y avait des permissions relax quelque part ou quelque chose parce que j'ai remarqué que mon invite de commandes Bash était déjà cassée. Je ne veux pas compter sur les permissions et ne pas être en root (je pourrais faire la même erreur avec sudo), et je ne veux pas chasser des bugs mystérieux à cause d'un fichier manquant quelque part dans le système, donc, les sauvegardes et sudo sont bien, mais je voudrais quelque chose de mieux pour ce cas spécifique.


À propos de réfléchir à deux fois et d'utiliser le cerveau. Je l'utilise en fait ! Mais je l'utilise pour résoudre une tâche de programmation complexe impliquant 10 choses différentes. Je suis tellement plongé dans cette tâche qu'il ne reste plus de puissance cérébrale pour vérifier les drapeaux et les chemins, je ne pense même pas en termes de commandes et d'arguments, je pense en termes d'actions comme 'vider le répertoire actuel', une partie de mon cerveau les traduit en commandes et parfois il fait des erreurs. Je veux que l'ordinateur les corrige, du moins les plus dangereuses.

17 votes

Pour information, vous pouvez également faire rm -rf . /mydir au lieu de rm -rf ./mydir et supprimer le répertoire dans lequel vous vous trouviez. Je trouve que cela arrive plus souvent.

31 votes

Pour utiliser une analogie avec les armes à feu, cette question demande de faire en sorte que le pistolet reconnaisse que je vise mon pied et ne tire pas, mais je ne veux pas avoir la responsabilité de ne pas viser mon pied en premier lieu. Les armes à feu, tout comme les ordinateurs, sont stupides et si vous faites une chose stupide, vous obtiendrez des résultats similaires. En suivant cette analogie avec les armes à feu, rien ne vous empêchera de vous faire du mal sauf la vigilance et la pratique.

82 votes

@slillibri Sauf que rm n'est pas un pistolet, c'est un programme informatique, il pourrait être assez intelligent pour déterminer que l'utilisateur s'apprête à supprimer des fichiers importants et émettre un avertissement (comme il le fait réellement si vous essayez de faire rm -rf / sans étoile).

8voto

Sam Roberts Points 115

Il semble que le meilleur moyen de réduire ce risque est d'avoir une suppression en deux étapes comme la plupart des interfaces graphiques. C'est-à-dire, remplacer rm par quelque chose qui déplace les choses vers un répertoire de corbeille (sur le même volume). Ensuite, nettoyez cette corbeille après suffisamment de temps pour remarquer toute erreur.

Un tel utilitaire, trash-cli, est discuté sur Unix StackExchange, ici.

0 votes

C'est la première chose que j'installe sur chaque machine. Ce devrait être l'outil de suppression par défaut, avec rm n'étant utilisé que lorsque vous devez absolument supprimer quelque chose tout de suite. Je suis triste qu'il n'ait pas encore décollé, mais un jour il le fera. Probablement après une instance très publique de rm causant un énorme problème qui n'aurait pas pu être résolu par des sauvegardes. Probablement quelque chose où le temps de récupération joue un rôle énorme.

0 votes

+1 Après avoir utilisé Linux pendant 20 ans, je pense toujours qu'il devrait y avoir une sorte de comportement de corbeille pour rm.

3voto

Khaled Points 35208

Un facteur clé important pour éviter ce type d'erreurs est de ne pas se connecter en utilisant le compte root. Lorsque vous vous connectez en utilisant un utilisateur normal non privilégié, vous devez utiliser sudo pour chaque commande. Ainsi, vous devez être plus prudent.

5 votes

Je ne suis pas convaincu que sudo empêcherait quelque chose comme ça. Vous pouvez faire la même faute de frappe que l'OP, même si vous tapez "sudo" avant "rm".

1 votes

Indiqué avoir travaillé en tant que root dans l'édition.

0 votes

Si vous n'êtes toujours pas convaincu d'utiliser sudo et des sauvegardes. Jetez un œil à cette page: forum.synology.com/wiki/index.php/…. Il parle de la création d'une corbeille. J'espère que cela vous aidera!

3voto

Wyzard Points 1133

Lorsque je supprime un répertoire de manière récursive, je place les -r, et -f si applicable, à la fin de la commande, par exemple rm /foo/bar -rf. De cette manière, si j'appuie accidentellement sur Entrée trop tôt, sans avoir encore tapé tout le chemin, la commande n'est pas récursive donc elle est probablement inoffensive. Si j'appuie sur Entrée en essayant de taper le slash après /foo, j'aurai écrit rm /foo plutôt que rm -rf /foo.

Cela fonctionne bien sur les systèmes utilisant les coreutils GNU, mais les utilitaires sur d'autres Unix ne permettent pas que les options soient placées à la fin de cette manière. Heureusement, je n'utilise pas souvent de tels systèmes.

3voto

Sciolist Points 1481

J'aime l'approche de Windows avec la corbeille de recyclage.

Je crée généralement un répertoire nommé "/tmp/recyclebin" pour tout ce que je dois supprimer :

mkdir /tmp/recyclebin

Et je n'utilise jamais rm -rf, j'utilise toujours :

mv dossier_cible /tmp/recyclebin

Ensuite, plus tard, je vide la corbeille de recyclage en utilisant un script ou manuellement.

2voto

Rilindo Points 5018

Il peut être compliqué, mais vous pouvez configurer des rôles dans SELinux de sorte que même si l'utilisateur devient root via sudo su - (ou su simple), la capacité de supprimer des fichiers peut être limitée (vous devez vous connecter directement en tant que root pour supprimer des fichiers). Si vous utilisez AppArmor, vous pouvez faire quelque chose de similaire.

Bien sûr, l'autre solution serait de vous assurer que vous avez des sauvegardes. :)

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