Hi, Doctorixx <jebpip2...@gmail.com> writes:
> Hello coreutils maintainers, > > I noticed a potentially dangerous difference in how rm handles the / and /* > patterns. > > Currently: > > $ sudo rm -rf / > rm: it is dangerous to operate recursively on '/' > rm: use --no-preserve-root to override this failsafe > > This prevents accidental deletion of the root directory. > > However: > > $ sudo rm -rf /* > > This command will proceed to remove the contents of /, effectively > destroying the system, without any warning. > > While this is technically correct according to shell expansion rules, it > may be surprising for some users. People might assume /* is just as > protected as /, but the safeguard doesn’t apply. The 'rm' command does not handle /* since globbing is handled by the shell. So 'rm' has no way of knowing it is passed /*, it just sees file names passed to the command-line. Here is an example: $ cat main.c #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { for (int i = 1; i < argc; ++i) printf ("%s\n", argv[i]); return EXIT_SUCCESS; } $ gcc main.c $ ./a.out /* /afs /bin /boot /dev /etc /home [...] Collin