I just ran rm -rf /*
accidentally, but I meant rm -rf ./*
(notice the star after the slash).
alias rm='rm -i'
and --preserve-root
by default didn't save me, so are there any automatic safeguards for this?
I wasn't root and cancelled the command immediately, but there were some relaxed permissions somewhere or something because I noticed that my Bash prompt broke already. I don't want to rely on permissions and not being root (I could make the same mistake with sudo
), and I don't want to hunt for mysterious bugs because of one missing file somewhere in the system, so, backups and sudo
are good, but I would like something better for this specific case.
About thinking twice and using the brain. I am using it actually! But I'm using it to solve some complex programming task involving 10 different things. I'm immersed in this task deeply enough, there isn't any brain power left for checking flags and paths, I don't even think in terms of commands and arguments, I think in terms of actions like 'empty current dir', different part of my brain translates them to commands and sometimes it makes mistakes. I want the computer to correct them, at least the dangerous ones.
Best Answer
One of the tricks I follow is to put
#
in the beginning while using therm
command.This prevents accidental execution of
rm
on the wrong file/directory. Once verified, remove#
from the beginning. This trick works, because in Bash a word beginning with#
causes that word and all remaining characters on that line to be ignored. So the command is simply ignored.OR
If you want to prevent any important directory, there is one more trick.
Create a file named
-i
in that directory. How can such a odd file be created? Usingtouch -- -i
ortouch ./-i
Now try
rm -rf *
:Here the
*
will expand-i
to the command line, so your command ultimately becomesrm -rf -i
. Thus command will prompt before removal. You can put this file in your/
,/home/
,/etc/
, etc.OR
Use
--preserve-root
as an option torm
. In therm
included in newercoreutils
packages, this option is the default.OR
Use safe-rm
Excerpt from the web site: