Sicheres rm -rf

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
reox
Beiträge: 2528
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Sicheres rm -rf

Beitrag von reox » 14.12.2015 18:33:49

Hi!
Ich möchte ungern Steam spielen und bei leeren Variablen / löschen, daher wie könnte man diesen Aufruf von rm -rf sicherer machen?

Code: Alles auswählen

rm -rf $HOME/$somefolder
Gibt es da was "schöneres" als

Code: Alles auswählen

if [ -z $HOME ] || [ -z $somefolder ]; then
   echo "I wont let you do that!"
else
   rm -rf $HOME/$somefolder
fi
(Extra mit OR damit nicht versehentlich /$somefolder oder $HOME gelöscht wird)

DeletedUserReAsG

Re: Sicheres rm -rf

Beitrag von DeletedUserReAsG » 14.12.2015 18:46:49

Warum dann rm -rf nehmen, wenn man’s gar nicht will? Möglicherweise suchst du sowas wie rm -i?

reox
Beiträge: 2528
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Sicheres rm -rf

Beitrag von reox » 14.12.2015 20:11:05

niemand hat geschrieben:Warum dann rm -rf nehmen, wenn man’s gar nicht will? Möglicherweise suchst du sowas wie rm -i?
naja das wird in einem script augerufen und sollte den ordner löschen falls er existiert. Nur kann es ja immer sein, dass, durch verkettung unglücklicher umstände, jetzt irgendwelche Variablen leer sind. und dann wird das eben schnell zu rm -rf /. Also das -f kann man weggeben, da in dem script ja jedenfalls vorher geschaut wird ob es ein verzeichnis ist. nur um das -r komm ich nicht drumherum und das auf / angewendet ist ebenfalls unglücklich

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Sicheres rm -rf

Beitrag von linuxCowboy » 14.12.2015 22:15:03

vielleicht:

Code: Alles auswählen

[[ $HOME && $DIR && -d $HOME/$DIR ]] && rm -rfv $HOME/$DIR || echo cant delete folder
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
hikaru
Moderator
Beiträge: 13904
Registriert: 09.04.2008 12:48:59

Re: Sicheres rm -rf

Beitrag von hikaru » 14.12.2015 22:47:35

Laut Manpage von rm liegt standardmäßig die Option --preserve-root, die wohl genau deshalb exisiert um bei solchen Unfällen das Allerschlimmste zu verhindern.
Getestet habe ich es nicht.

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Sicheres rm -rf

Beitrag von JTH » 14.12.2015 23:43:10

Ohne die Option macht rm da tatsächlich nicht viel, selbst mit -f:

Code: Alles auswählen

root@vm:~# rm -r /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
root@vm:~# rm -rf /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
(Edit: Ich konnte nicht widerstehen:

Code: Alles auswählen

root@vm:~# rm --no-preserve-root -rf /
[...]
root@vm:~# ls
-bash: ls: command not found
root@vm:~# echo /*
/dev /proc /run /sys
:mrgreen: )
Manchmal bekannt als Just (another) Terminal Hacker.

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Sicheres rm -rf

Beitrag von Liffi » 15.12.2015 08:53:36

set -u kann dir vielleicht helfen. Dann müssen $HOME und $somefolder schon mal befüllt worden sein.

reox
Beiträge: 2528
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Sicheres rm -rf

Beitrag von reox » 15.12.2015 12:15:11

hikaru hat geschrieben:Laut Manpage von rm liegt standardmäßig die Option --preserve-root, die wohl genau deshalb exisiert um bei solchen Unfällen das Allerschlimmste zu verhindern.
Getestet habe ich es nicht.
Ich glaub ich muss blind sein, genau die option hab ich nicht gesehen... (und ich hab gerade nachgeschaut die ist seit 2003 in den coreutils drin und seit 2006 der default) Ich wusste nicht mal das es das gibt, denn das letzte mal wo ich auf einem debian system rm -rf / (muss so ~2008 gewesen sein) ausgeführt hab, hat das tadellos funktioniert :D
Liffi hat geschrieben:set -u kann dir vielleicht helfen. Dann müssen $HOME und $somefolder schon mal befüllt worden sein.
Das scheint vermutlich die Lösung zu sein, da wüsste ich jetzt nicht, was passieren sollte damit etwas falsches gelöscht wird (außer natürlich in der variable steht das falsche drin ...)

Danke!

Antworten