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).

2voto

Mohit Ranka Points 21

Mon processus de suppression sur les machines Unix est le suivant.

  • Tapez ls /chemin/vers/le/fichier_ou_dossier_voulu dans la fenêtre du terminal puis appuyez sur Entrée (ou Tab, selon votre préférence), pour voir la liste des fichiers.

Si tout semble bon,

  • appuyez sur la touche flèche vers le haut pour ramener ls /chemin/vers/le/fichier_ou_dossier_voulu de l'historique du terminal.

  • remplacez ls par rm ou rm -r ou rm -rf, selon vos besoins. Personnellement, je n'aime pas utiliser le drapeau -f.

Ce processus de validation empêche également l'exécution prématurée de la commande rm, quelque chose qui m'est arrivé avant de commencer à suivre ce processus.

0 votes

Prévisualiser les fichiers avant de les supprimer est une bonne idée, et il y a un moyen encore plus sûr et plus expressif de le faire en utilisant le find comme je l'explique dans ma réponse.

2voto

Andrej Panjkov Points 121

Évitez d'utiliser les globbings. En Bash, vous pouvez définir noglob. Mais encore une fois, lorsque vous passez à un système où noglob n'est pas défini, vous risquez d'oublier et de procéder comme s'il l'était.

Définissez noclobber pour empêcher mv et cp de détruire des fichiers.

Utilisez un explorateur de fichiers pour supprimer. Certains explorateurs de fichiers offrent une corbeille (par exemple, Konqueror).

Un autre moyen d'éviter les globbings est le suivant. En ligne de commande, j'exécute echo motifdefichier >> xxx. Ensuite, j'édite le fichier avec Vim ou vi pour vérifier quels fichiers vont être supprimés, (faites attention aux caractères spéciaux dans les noms de fichiers.) et ensuite utilisez %s/^/rm -f/ pour transformer chaque ligne en une commande de suppression. Source xxx. De cette façon, vous voyez chaque fichier qui va être supprimé avant de le faire.

Déplacez les fichiers dans un répertoire 'archive' ou dans une archive tar. Ou utilisez un gestionnaire de version (comme dit précédemment).

0 votes

+1 pour utiliser une méthode de prévisualisation de vos fichiers avant de les supprimer, cependant il existe des méthodes plus simples et plus sûres pour le faire en utilisant la commande find.

2voto

Benjamin Horstman Points 361

Le ZSH me demande (par défaut) avant d'exécuter un rm -rf *.

Et ZSH fournit également un plugin (zsh-safe-rm) pour ajouter la fonctionnalité safe-rm afin que rm déplace les fichiers dans la corbeille de votre système d'exploitation au lieu de les supprimer définitivement.

1voto

thinice Points 4656

En dehors de chattr, il n'y a pas beaucoup de protections contre l'exécution d'une telle commande en tant que root. C'est pourquoi il est important d'utiliser des groupes appropriés et des commandes prudentes lors de l'exécution de privilèges.

La prochaine fois, examinez les fichiers que vous prévoyez de supprimer - omettez 'f' de rm -rf, ou utilisez find et passez-le à xargs rm

0 votes

Il est bon que vous suggériez d'utiliser find, mais je recommande une manière plus sûre de l'utiliser dans ma réponse. Il n'est pas nécessaire d'utiliser xargs rm car toutes les versions modernes de find ont l'option -delete. De plus, pour utiliser en toute sécurité xargs rm, vous devez également utiliser find -print0 et xargs -0 rm, sinon vous rencontrerez des problèmes lorsque vous rencontrerez des noms de fichiers avec des espaces.

0 votes

Mon point ne portait pas sur les nuances concernant xargs mais plutôt sur l'utilisation de find d'abord, sans supprimer les fichiers, puis en continuant..

0 votes

Oui, je pense que l'exploration des fichiers en utilisant find est une bonne suggestion, cependant les subtilités de xargs sont importantes si vous suggérez de l'utiliser, sinon cela entraîne de la confusion et de la frustration lors de la rencontre de fichiers avec des espaces (ce qui est évité en utilisant l'option -delete).

1voto

Valentin Nemcev Points 1955

Quelques alias de sécurité pour d'autres commandes, pour éviter des désastres similaires, trouvés ici:

# fonctions de sécurité
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -I'                    # 'rm -i' demande pour chaque fichier
alias ln='ln -i'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

Remarquez la majuscule -I, cela est différent de -i:

demande une fois avant de supprimer plus de trois fichiers, ou lors de la suppression de manière récursive. Moins intrusif que -i, tout en offrant une protection contre la plupart des erreurs

0 votes

Bien que l'option I n'affichera pas ce que vous allez supprimer.

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