Short answer: Nothing
Long answer: It is part of a command that deletes everything. The only thing missing is the argument specifying what to delete. Examples:
rm -rf * rm -rf /some/directoryIt’s somewhat (in)famous because it’ll do so without asking for confirmation. The only exception is
rm -rf /on a modern distro which will complain that you’re attempting to delete EVERYTHING on the system. In the olden days it’d just do it, but these days it tells you to add--no-preserve-rootas well if you really wish to do so.Surely you can tell us, Codewizard!
It will delete everything in the directory after that, without asking for further confirmation.
Unless it’s on /, where preserve-root should be kicking in, unless the bypass flag is used (can’t remember this one)
Not all systems have the preserve-root flag enforced, actually… I accidentally did the
rm -rf /in a bash script (the variable for the path returned empty), and it irreversibly deleted a bunch of my system, including sudo and a big part of /etc, before I realized and did Ctrl+C. However the damage was done, rendering the system both unusable and unbootable. Fortunately I managed to recover some data, as the drive was not encrypted.Edit: Yes, like a fool I ran the script as sudo… I am now older and wiser.
I didn’t personally do this one, but I once worked at a job where I was tasked with updating a kickstart file from RHEL6 to 7. I don’t remember the details, but in the postscript, there was a variable that was set in 6 but not 7. That variable was then used in a command like
rm -rf /${variable}.It took me a little while to figure out why every system imaged with that kickstart was emptying its own filesystem.
What distro was this out of curiosity? As far as I’m aware preserve-root enforcement comes from upstream coreutils
Iirc, it was Debian 10 (Buster). I thought they enforced it (
rmdid support it at the time), but perhaps it was tricked by using an empty variable or something?Ahhh, I just re-read your comment, and yeah that would have been the case.
I think another quick bypass without using the proper flag could be to use a wildcard (for example, rm -rf /*), I think that might work too maybe
No, it does nothing.
$ mkdir test $ cd test ~/test$ touch 1 2 3 4 5 ~/test$ rm -rf ~/test$ ls 1 2 3 4 5If you dont specify the
-foption, which among other things tellsrmto be quiet, it throws an error:$ rm -r rm: missing operand Try 'rm --help' for more information.Because you’re using it on nothing.
$ mkdir test $ cd test ~/test$ touch 1 2 3 4 5 ~/test$ cd .. $ rm -rf test $ lsNo more test folder.
Exactly, but that wasn’t the question.
What are you talking about? The does exactly what I said it does.
It only does nothing for you because you used it incorrectly (in the wrong folder without the required argument).
The question is:
what happens when you give the command in the command line rm -rf ?
rm -rf *or hererm -rf testare different commands.rm is the command, -rf are the flags and “test” is an required argument. So no, they are not different commands.
No, the argument is not required, the command is valid. It’s intentional and a neat feature that
rm -rfalone without a specified file does nothing.See e.g.: https://unix.stackexchange.com/a/553741
You have it backwards.
rm -fr /*removes the French language pack that comes preinstalled on your system./j
rm -rf
For even more fun, add a single / at the end.
/s
You can have even more fun with
~
Creating a quick test vm isn’t that hard, go nuts.





