Saya selalu penasaran mengapa perintah untuk menghapus semua yang ada di direktori adalah rm -rf
.
Mengapa tidak ada tanda untuk melakukan hal yang sama dengan rmdir
?
Bukankah lebih intuitif untuk menggunakan rmdir
untuk operasi direktori?
Jawaban yang Diterima:
Pada awal Sistem File Unix (setidaknya pada hari-hari V7 sekitar tahun 1970) direktori diimplementasikan sebagai file khusus dan hanya root yang dapat menggunakan mknod(2)
panggilan sistem yang membuatnya dan hanya root yang dapat unlink(2)
file khusus direktori.
Perlindungan ini diterapkan untuk menjaga struktur sistem file tetap konsisten. Misalnya, jika pengguna diizinkan untuk menulis ke file khusus direktori, ia dapat membuat direktori induknya ..
menunjuk ke dirinya sendiri (khususnya i-node-nya sendiri). Ini akan membuat referensi melingkar di sistem file yang akan menjadi Hal Buruk. Tentu saja ada inkonsistensi lain yang bisa dibuat, ini hanya contoh yang jelas.
Konsistensi dipertahankan oleh program ruang pengguna seperti mkdir(1)
dan rmdir(1)
yang merupakan root Set-UID sehingga mereka dapat melakukan panggilan sistem dengan hak istimewa atas nama pengguna yang tidak memiliki hak. Ketika rekursi ditambahkan ke rm(1)
, perintah remove akan dijalankan sebagai UID saat ini dan kemudian memanggil rmdir(1)
hanya untuk menghapus direktori kosong. Ini masih merupakan metode peningkatan izin yang cukup standar:jangan gunakan izin lebih dari yang Anda butuhkan.
Beberapa saat kemudian mkdir(2)
dan rmdir(2)
ditambahkan sebagai panggilan sistem mereka sendiri tetapi hubungan antara rm(1)
dan rmdir(1)
tersisa.
Secara pribadi, saya merasa lebih puas dengan rmdir junk
dan tahu bahwa yang terburuk yang saya lakukan adalah menghapus direktori kosong.