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?
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
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:
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
It does nothing because you used the wrong syntax but also set the flag that suppresses the output of syntax errors …
Imagine someone would asked “What does a toaster do?”
I say “It toasts bread”.
You come in with a picture of bread in a toaster and say “It does nothing”.
I tell you “You have to press the button”.
"You say “oh well, that wasn’t the question, a toaster with the button pressed is basically a different device!”
Insert <Futurama not sure if trolling …> meme.