Оскільки я думаю, що це питання більше стосується того, що * робить (а не rm), спробуємо інший підхід.
Якщо ви не впевнені, що робить *, ви можете "перевірити" спершу, використовуючи нешкідливу команду на зразок ехо. Перш ніж запустити це, спробуйте вгадати, що вони покажуть, якщо ви запустите їх у своєму домашньому режисері.
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 не зняли. і .. навіть якщо ми сказали йому !!!
Тож після цієї довгої відповіді виявляється, що безпечно прибрати все в режимі з цим:
rm -rf * .*
Але я б використовував це обережно, оскільки я не впевнений, що всі реалізації rm поводяться так!
rm -rf ./*
і явно вказав поточний каталог ... але, схоже, Анкур каже, що це все одно не має значення.