Como creo que esta pregunta es más sobre qué * hace (y no rm), intentemos con otro enfoque.
Si no está seguro de lo que hace el *, puede "probar" primero usando un comando inofensivo como echo. Antes de ejecutar esto, intente adivinar qué mostrarán si los ejecuta en el directorio de inicio.
echo *
echo .*
Pero primero creemos un patio de juegos para que podamos jugar con las estrellas y ver con qué terminamos.
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
Ahora en este directorio tenemos esto:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
Ahora observe en qué se expande el * usando el comando echo:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
Entonces, veamos qué sucede con el comando rm
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
Como puede ver, solo eliminó el archivo2, ya que * solo se expandió a archivo2. Si escribes rm -rf. * Eso sería lo mismo que escribir
rm -rf . .. .file1
Y para ser sincero, eso no parece divertido;)
Espero que esto aclare la parte * de su pregunta.
Actualización:
Sin embargo, como señala Ankur Goel, hay algún tipo de protección integrada en rm (algo inusual para los comandos de shell :)
Creemos un nuevo patio de recreo:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
Así que ahora tenemos esto de nuevo, pero con test1 propiedad de root como protección si rm comienza a enloquecer.
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
Entonces, eliminemos todo:
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
Y parece que rm no se eliminó. y .. incluso si le dijéramos que lo hiciera !!!
Entonces, después de esta larga respuesta, resulta seguro eliminar todo en un directorio con esto:
rm -rf * .*
Pero usaría esto con cuidado, ya que no estoy seguro de que todas las implementaciones de rm se comporten así.
rm -rf ./*
y especificaría explícitamente el directorio actual ... pero Ankur parece decir que no importa de todos modos.