All UNIX administrators, if they’ve not been bit by a typo like this, have heard of it (or something like it) happening:
cd /
rm -rf foo *
Notice the extra space, and the current working directory. Instead of deleting directories beginning with the name “foo” it will delete everything!
How can this be avoided? There are number of practices that I have ingrained which have saved me from such disasters.
Before executing dangerous commands, check which files will be affected… For example, you may find a need for a command such as:
find . -size +10000 | xargs rm -f
However, before doing this, do a command like this one:
find . -size +10000 | xargs ls -ld
This will save you from potentially removing important files.
Instead of executing disastrous commands automatically, use a computed script. For example, the previously mentioned example:
find . -size +10000 | xargs rm -f
This example could be replaced by the following instead:
find . -size +10000 | xargs -i{} echo rm -f {} > scriptfile.sh
Then the resulting script can be scanned for files that one wants to keep, and the script edited to reflect the desired actions. Once the script is the way you want it, it can be run:
sh ./scriptfile.sh
This method is particularly good for times when you want to delete or modify hundreds of files, but want to prevent a few from being affected.
Notice where you are! Perhaps you think you are in a particular directory, but you aren’t: double-check. Take a moment and do a pwd command and check.
If it affects the entire system, make sure you are on the right system! You don’t want to shut down a system only to realize it was the wrong one! Do a uname -n
just to check – every time. Don’t use the system prompt; if you rely on that you may realize too late that the system prompt is just a string (and it could lie to you!).
If you manage many diverse systems, double-check the syntax of the command first. If you do the command in the wrong way who knows what could happen? When I managed four or five types of UNIX, I did a man 1m shutdown
before every shutdown. Most were similar – some were not (such as Unixware and Solaris for example).
Notice dangerous commands and stop and double-check them! When doing an rm -rf
I always double-check the command before pressing enter – even just pausing to look – rather than just typing through. This goes just as much for the find command piped into a disastrous command (such as rm or mv).
Notice dangerous commands and pause before pressing enter. I always pause to check the command – even just pausing, knowing that this is the moment – the last chance to back out. With that knowledge in the back of your mind, it will cause you to double-check if you haven’t already.
Hi,
Not only rm is dangerous !
I knew a guy able to type :
Instead of uname -a, he typed hostname -a (fun time on DNS server)
Instead of crontab -e, he did crontab -r (I agree those 2 keys are too close)
Instead of chmod -Rh 444 /.ssh, he added a space between / and .ssh.
No more write on the HDD !
I hope you won’t do them, you are forewarned now.
One more thing to watch out for: Windows programs and dialog boxes like to steal the window focus. You could be writing in one window, when suddenly your input is going somewhere else – and what you thought you were typing into the UNIX shell turns out to be something else!
I, too, know someone who did a “crontab -r” as well. Ooops.
As root, you should really use the -i option to catch yourself. I usually alias rm to rm -i.