The theme contained rm -rf, but claims it wasn’t malicious intent…I assume rm -rf for cleanup, but seems like it should have a apecific path other than /
The command was rm -rf $pathvariable
Bug in the code caused the path to be root. Wasn’t explicitly malicious
Don’t most distros have safeguards against this? I tried sudo rm -rf /
in an Ubuntu VM that I was about to delete just to see what happened, and it gave me a warning. I had to add some other option to bypass the warning.
When I worked at Pixar long ago an intern had a cron job that was intended to clean up his nightly build and ended up deleting everything on the network share for everyone!
Fortunately there were back-ups and it was fine, but that day was really hilariously annoying while they tracked down things disappearing.
Trust but verify. It was a text file, it doesn’t get much easier to do the second step of that.
… in which case you would have seen that they delete a path referenced by an env var being set earlier.
How likely do you think it would have been to notice, that this env var will turn up empty in your specific case?
rm -rf ${var}/
is a disaster waiting to happen.
Always do rm -rf "${var:?}/"
so that the script aborts if the variable is empty. Or better yet rm -rf "./${var:?}/"
.
Edited to add quotes. Always quote a path: it might have spaces in it, without quotes that will become multiple paths! Which would also have avoided the particular bug in question.
Is there not also a way to disallow empty variables in the script, I think it is set -u
? Then you don’t have to keep thinking “should I add a :?
here because if empty it may lead to disaster” all the time. Might be even safer.
set -euo pipefail
at the top of every script makes stuff a lot safer. Explanation here.
Yep! I always do this too.
TL;DR: e
aborts the whole script on a non-zero error. u
aborts when using an undefined variable. -o pipefail
aborts a piped compound command when one of the piped commands fail.
Any other way lies madness. Or erasing the whole filesystem apparently!
Yes! But -u
is for undefined variables. It won’t stop a defined variable with an empty value. E.g foo=""
.
Also ?
and :?
have the advantage of telling you right then and there where the variable use is that it must be defined or not empty… having to trek back to (likely) the top of the script to check is easily forgotten.
In this case the issue was that a change between kde5 and kde6 let to the variable being defined as somepath /
(notice the space).
I usually have a whole block that checks if the var exists and exits if not, but this is way more elegant
Reminds me of a script a colleague has where it would sometimes accidentally wipe the entire production folder on a server. I pointed out the risk in his script and explained how to correct it like 2 years ago, give or take. He said he did, but then last week it happened again because apparently he had several scripts like that and only corrected one.
You can lead a horse to water, but you can’t force it to drink.
I wonder what the sudo rm -rf equivalent for windows is
That’s all you really need to do to break windows. /s
Edge/Internet Explorer is/were a cornerstone of any Windows install. Uninstall that and you can get all kinds of weird issues on your system.
Windows doesn’t have sudo
(not yet, at least) and privileges work a bit different as even as an administrator, you may not have full rights.
To overcome that obstacle, you’d need to run a shell as an administrator (hold CTRL+Shift, then use the start menu entry or right-click it and select run as administrator).
Next obstacle: We have a separate drive for each partition, but no root folder.
If we assume we’re running on a laptop or PC with a single drive and a single partition*, then it’s just
In cmd.exe:
del /F /S C:\
In Powershell:
Remove-Item -Recurse -Force -Path C:\
When you want to delete all (mounted) partitions/drives, you need to iterate over them. (Note that’s from the top of my head, didn’t check the script if it works).
In cmd.exe:
REM Not gonna do that, I'm no masochist
In Powershell:
Get-PSDrive -PSProvider FileSystem | Foreach-Object {
Remove-Item -Recurse -Force -Path "$($_.Name):\"
}
Done. Mounting additional partitions before that is left as an exercise for the reader.
*note that even a standard installation of windows creates 3 partitions. One for the bootloader, one for the recovery system and then the system drive. Only the latter is mounted and will be deleted by this. The other two will still be intact.