Так как я думаю, что этот вопрос больше о том, что делает * (а не rm), давайте попробуем другой подход.
Если вы не уверены, что делает *, вы можете сначала «протестировать» его, используя безвредную команду, такую как echo. Прежде чем запустить это, попытайтесь угадать, что они покажут, если вы запустите их в своем домашнем каталоге.
echo *
echo .*
Но сначала давайте создадим игровую площадку, чтобы мы могли поиграть со звездами и посмотреть, чем мы закончим.
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
Теперь в этом каталоге мы имеем это:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
Теперь обратите внимание, что * расширяется в использовании команды echo:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
Итак, давайте посмотрим, что происходит с командой rm
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
Как вы видите, он только удалил файл2, так как * расширился только до файла2. Если вы наберете rm -rf. *, Это будет то же самое, что и запись
rm -rf . .. .file1
И, честно говоря, это не выглядит весело;)
Надеюсь, что это проясняет * часть вашего вопроса.
Обновление:
Тем не менее, как указывает Анкур Гоэль, в rm встроена какая-то защита (довольно необычная для команд оболочки :)
Давайте создадим новую игровую площадку:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
Итак, теперь у нас это снова, но с test1, принадлежащим root в качестве защиты, если rm начнет сходить с ума.
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
Итак, давайте удалим все:
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
И похоже рм не убрал. и .. даже если бы мы сказали ему !!!
Так что после этого длинного ответа оказывается безопасным удалить все в директории с этим:
rm -rf * .*
Но я бы использовал это с осторожностью, так как я не уверен, что все реализации rm ведут себя так!
rm -rf ./*
и явно указал текущий каталог ... но Анкур, кажется, говорит, что это все равно не имеет значения.