Karena saya pikir pertanyaan ini lebih tentang apa yang * * lakukan (dan bukan rm), mari kita coba pendekatan lain.
Jika Anda tidak yakin apa yang * dilakukan, Anda dapat "menguji" terlebih dahulu menggunakan perintah yang tidak berbahaya seperti gema. Sebelum Anda menjalankan ini, coba tebak apa yang akan mereka tunjukkan jika Anda menjalankannya di direktori home Anda.
echo *
echo .*
Tapi pertama-tama mari kita membuat taman bermain sehingga kita bisa bermain dengan bintang-bintang dan melihat apa yang kita hasilkan.
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
Sekarang di dir ini kita punya ini:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
Sekarang perhatikan apa yang * diperluas untuk menggunakan perintah gema:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
Jadi mari kita lihat apa yang terjadi dengan perintah rm
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
Seperti yang Anda lihat dia hanya menghapus file2, karena * hanya diperluas ke file2. Jika Anda mengetikkan rm -rf. * Itu akan sama dengan menulis
rm -rf . .. .file1
Dan jujur, itu tidak terlihat menyenangkan;)
Semoga ini memperjelas * bagian dari pertanyaan Anda.
Pembaruan:
Namun seperti yang ditunjukkan Ankur Goel, ada semacam perlindungan yang dibangun ke rm (jenis yang tidak biasa untuk perintah shell :)
Mari buat taman bermain baru:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
Jadi sekarang kita memiliki ini lagi, tetapi dengan test1 dimiliki oleh root sebagai perlindungan jika rm mulai mengamuk.
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
Jadi mari kita hapus semuanya:
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
Dan sepertinya rm tidak menghapus. dan .. bahkan jika kita menyuruhnya !!!
Jadi setelah jawaban yang panjang ini ternyata aman untuk menghapus semuanya dalam dir dengan ini:
rm -rf * .*
Tapi saya akan menggunakan ini dengan hati-hati, karena saya tidak yakin semua implementasi rm berperilaku seperti ini!
rm -rf ./*
dan secara eksplisit menentukan direktori saat ini ... tetapi Ankur tampaknya mengatakan itu tidak masalah.