Parfois le geek décide de faire le ménage dans ses dossiers plus vite que dans son logement, et il est alors tenté de lancer une commande un peu radicale du genre :
$ rm -rf
(Suppression récursive sans confirmation)
L'ennui est que l'incident est vite arrivé.
Pour ajouter facilement une petite protection, il suffit de créer un fichier "-i" dans un répertoire avec la commande suivante :
$ > -i
(création d'un fichier vide appelé "-i")
Lorsque rm va arriver dans ce dossier, il va le prendre en paramètre, et l'interpréter comme une demande de passage en mode interactif.
rm va donc demander une confirmation pour la suppression de chaque fichier et dossier qui s'y trouve.
Cette astuce est vieille comme Unix, devrait fonctionner avec la grand majorité des interpréteurs de commande, et sauver quelques fichiers :)
M
# Hmm
Posté par Roger Rabbit . Évalué à 2.
$> touch $'plop/-i'
$> ls plop
-i
$> rm -rf plop
$> ls plop
ls: plop: No such file or directory
avec zsh-4.2.1 sous FreeBSD 5.2.1-RELEASE-p9 ca ne semble pas fonctionner ...
[^] # Re: Hmm
Posté par tinodeleste . Évalué à 1.
# Meuh non...
Posté par Paul Rouget . Évalué à 3.
mkdir /tmp/plop
touch /tmp/plop/coco
cd /tmp/plop/
> -i
rm -rf *
[^] # Re: Meuh non...
Posté par Hugues Hiegel (site web personnel) . Évalué à 2.
'*' est interprété par ton shell, pas par 'rm'.
Et ton shell il va exécuter non pas la commande 'rm -rf *' mais 'rm -rf -i coco'.
C'est aussi simple que ça.
Juste pour information, hein.
[^] # Re: Meuh non...
Posté par Encolpe DEGOUTE (site web personnel) . Évalué à 1.
# Debian Sarge...
Posté par Mr_max . Évalué à 1.
-i important.txt tresimportant.txt
maxime@MAX:~/toto$ rm * -rf
maxime@MAX:~/toto$ ls
-i
Mouais... Ca m'a pas l'air très efficace... Et comment je le vire le -i ? :D (à part dans l'explorer de fichier ;) )
[^] # Re: Debian Sarge...
Posté par theocrite (site web personnel) . Évalué à 3.
Pour supprimer ton -i, il faut mettre -- qui départage les options et les autres arguments.
theo@fermat:~/tests$ > -i; touch important.txt; touch tresimportant.txt
theo@fermat:~/tests$ ls
-i important.txt tresimportant.txt
theo@fermat:~/tests$ rm -rf *
rm: détruire fichier régulier vide `important.txt'? n
rm: détruire fichier régulier vide `tresimportant.txt'? n
theo@fermat:~/tests$ ls
-i important.txt tresimportant.txt
theo@fermat:~/tests$ rm * -rf
theo@fermat:~/tests$ ls
-i
theo@fermat:~/tests$ rm -- -i
theo@fermat:~/tests$ ls
theo@fermat:~/tests$
[^] # Re: Debian Sarge...
Posté par ArBaDaCarBa . Évalué à 1.
[^] # Re: Debian Sarge...
Posté par CoinKoin . Évalué à 2.
C'est important, un caractère de moins, parce que, à force de taper des inepties (comme par exemple cette parenthèse (et celle-ci) ), il arrive que le clavier se blo
[^] # Re: Debian Sarge...
Posté par Hugues Hiegel (site web personnel) . Évalué à 2.
Bon ok ok, ca n'est pas le problème, mais quand même...
[^] # Re: Debian Sarge...
Posté par Hugues Hiegel (site web personnel) . Évalué à 2.
Tout programme correctement écrit s'appelle sous la forme "binaire [options...] [fichiers...]".
[^] # Re: Debian Sarge...
Posté par Bastoon . Évalué à 1.
# Mandrake 10
Posté par vidad . Évalué à 1.
il y a un alias rm -i par defaut.
j'ai crée un fichier par :
touch -- -1
et lorsque je lance rm -fr * sur un repertoire, j'obtiens
rm: invalid option -- 1
Pour en savoir davantage, faites: « rm --help ».
et aucun des fichiers et des repertoires n'est effacé car -1 se retrouve en tête de liste des fichiers.
Ca peut servir.
# plop
Posté par Infernal Quack (site web personnel) . Évalué à 3.
Si je créé un fichier qui s'appelle ";rm -fr /" ça donne quoi ?
Bash va interpréter ce nom de fichier ?
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Re: plop
Posté par CoinKoin . Évalué à 3.
1) Bash va effectivement placer ce nom dans le développement de l'étoile, mais il ne va pas l'interpréter, seulement le passer à rm comme un paramêtre. C'est rm qui, voyant un -i, l'interpète comme une option, et non un fichier.
2) Tu ne peux pas créer de fichier contenant le caractère '/' ;-) .
A mon avis, le danger de ce comportement, car il y en a un, réside principalement dans le passage d'options stupides ou dangereuses à certains programmes. tmpwatch, par exemple, était vulnérable à un problème de ce type : http://www.ciac.org/ciac/bulletins/l-005.shtml(...) .
Il est aussi possible de s'en servir pour des attaques locales en déni de service, comme par exemple en créant un fichier --version dans /tmp . Si l'administrateur a codé en dur un "rm -rf /tmp/*" à chaque reboot, il va avoir une surprise.
Cela dit, dans le cas de rm, la solution est évidemment d'utiliser l'option --. Mais il existe peut-être d'autres programmes, mal conçus, qui sont sensibles à ce genre d'attaques.
[^] # Re: plop
Posté par Hugues Hiegel (site web personnel) . Évalué à 2.
Ah merde moi aussi je m'ai eu :-)
Pourtant je croyais qu'en l'échappant... ben non. Et effectivement évidemment normal.
[^] # Re: plop
Posté par Hugues Hiegel (site web personnel) . Évalué à 2.
Ca reviendrait à taper :
$ rm \;rm\ -fr\ \/
ou encore
$ rm ";rm -fr /"
# Question con
Posté par Hugo F . Évalué à 1.
Quel est le role de ce "mode console"?
[^] # Re: Question con
Posté par Hugo F . Évalué à 1.
# Solution bien plus propre
Posté par gyom gyom . Évalué à -1.
# chattr
Posté par Mikaël Cordon . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.