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

0voto

cjc Points 24265

Hehe (non testé et un peu facétieusement!) :

$ cat /usr/local/bin/saferm

#! /bin/bash

/bin/ls -- "$@"

echo "Voilà les fichiers que vous êtes sur le point de supprimer."
echo "Voulez-vous continuer (o/N) ?"

read userresponse

if [ "$userresponse" -eq "y" ]; then

  echo "Exécution en cours...."
  /bin/rm -- "$@"

fi

Et ensuite :

alias rm="/usr/local/bin/saferm"

En réalité, vous devriez faire une pause mentale avant d'exécuter ce genre d'opération avec un glob, que vous soyez en train d'exécuter en tant que root, en le précédant de "sudo", etc. Vous pouvez exécuter un "ls" sur le même glob, etc., mais mentalement, vous devriez vous arrêter un instant, vous assurer d'avoir tapé ce que vous vouliez, vous assurer que ce que vous voulez est vraiment ce que vous voulez, etc. Je suppose que c'est quelque chose qu'on apprend principalement en détruisant quelque chose la première année en tant qu'administrateur Unix, de la même manière que la plaque chauffante est un bon professeur pour vous dire que quelque chose sur la cuisinière peut être chaud.

Et assurez-vous d'avoir de bonnes sauvegardes !

0 votes

Je m'efforce de réfléchir à deux fois avant de faire des choses dangereuses, mais certains de cela ne fonctionne pas toujours, j'ai déjà détruit des choses dans le passé à cause de mon inattention.

0voto

Valentin Nemcev Points 1955

Aussi, non pas comme une sauvegarde, mais comme un moyen de découvrir quels fichiers ont été supprimés avant d'appuyer sur ^C, vous pouvez utiliser la base de données locate (bien sûr, seulement si elle a été installée et survécue à rm)

J'ai appris cela dans ce article de blog

0voto

Sirex Points 5377

Pas vraiment une réponse mais un conseil, je fais toujours rm (dir) -rf pas rm -rf (dir) c'est-à-dire : ne pas aller en mode nucléaire jusqu'au dernier moment possible.

Cela aide à atténuer les situations dans lesquelles vous tapez mal le nom du répertoire de sorte qu'il soit quand même une suppression valide, comme glisser et appuyer sur la touche Entrée.

0 votes

Intelligent, mais ne fonctionnerait pas sur BSD rm, où les options doivent venir avant les noms de fichiers.

0 votes

Oui. j'ai découvert cela en utilisant récemment apple. La solution est d'installer les outils gnu et définir des alias pour tout :) et/ou de préférence jeter la pomme dans une poubelle. :)

0 votes

0voto

Je viens d'écrire mon propre script qui peut simplement avertir et demander une confirmation pour tout type de situation, à vous de voir comment l'améliorer

#!/bin/sh
# simplement sudo mv /usr/bin/rm à /usr/bin/rm-original

chemin=${!#}

color_yel="\x1b[1;33m"
color_rst="\x1b[0m"

function get_yn() {
    read i
    if [ "$i" != "y" ]; then echo "abandonné."; exit 1; fi
}

if [ -d ${chemin} ]; then
    echo -e "${color_yel}Vous êtes en train de supprimer un dossier, c'est potentiellement dangereux, êtes-vous sûr (o/n) ?${col>
    get_yn
    /usr/bin/rm-original $@
fi

Idée supplémentaire pour l'améliorer:

  • vérifier les drapeaux et les chemins particuliers
  • déplacer vers un dossier de la corbeille et supprimer
  • vider les anciennes choses dans la corbeille après un certain temps

Ainsi, un simple script personnalisable permet d'avoir un comportement spécial et d'éviter l'installation de packages supplémentaires.

Avec quelques connaissances en bash, vous pouvez mettre à la corbeille uniquement certains types de choses.

0voto

Kirill Osenkov Points 3902

Si vous êtes vraiment aussi négligent à l'invite de commandes, ou si vous passez simplement une mauvaise journée... alors un alias shell de rm à mv peut vous sauver de temps en temps.

https://unix.stackexchange.com/questions/379138/aliasing-rm-to-create-a-cli-recycle-bin

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