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.
Iirc, it was Debian 10 (Buster). I thought they enforced it (rm did support it at the time), but perhaps it was tricked by using an empty variable or something?
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.
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/directory
It'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-root as 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.
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
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.
No, it does nothing.
If you dont specify the
-foption, which among other things tellsrmto be quiet, it throws an error:Because you're using it on nothing.
No 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:
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
For even more fun, add a single / at the end.
/s
You can have even more fun with
~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:
It'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.Creating a quick test vm isn't that hard, go nuts.