Saya selalu penasaran mengapa perintah untuk menghapus semua yang ada di direktori rm -rf
.
Mengapa tidak ada bendera untuk melakukan hal yang sama rmdir
?
Bukankah lebih intuitif untuk digunakan rmdir
untuk operasi direktori?
Saya selalu penasaran mengapa perintah untuk menghapus semua yang ada di direktori rm -rf
.
Mengapa tidak ada bendera untuk melakukan hal yang sama rmdir
?
Bukankah lebih intuitif untuk digunakan rmdir
untuk operasi direktori?
Jawaban:
Pada Unix File System awal (setidaknya kembali pada hari-hari V7 sekitar tahun 1970) direktori diimplementasikan sebagai file khusus dan hanya root yang dapat menggunakan mknod(2)
system call yang membuatnya dan hanya root yang bisa unlink(2)
menjadi file direktori khusus.
Perlindungan ini ada untuk menjaga struktur sistem file tetap konsisten. Sebagai contoh, jika pengguna diizinkan untuk menulis ke file khusus direktori, ia dapat membuat direktori induknya ..
mengarah ke dirinya sendiri (khususnya node-nya sendiri). Ini akan membuat referensi melingkar dalam sistem file yang akan menjadi Bad Thing. 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 akar Set-UID sehingga mereka dapat membuat panggilan sistem yang diistimewakan atas nama pengguna yang tidak berkepentingan. Ketika rekursi ditambahkan ke rm(1)
, perintah hapus akan berjalan sebagai UID saat ini dan kemudian memanggil rmdir(1)
hanya untuk menghapus direktori kosong. Ini masih merupakan metode standar yang cukup tinggi untuk peningkatan izin: jangan menggunakan lebih banyak izin dari yang Anda butuhkan.
Beberapa waktu kemudian mkdir(2)
dan rmdir(2)
ditambahkan sebagai panggilan sistem mereka sendiri tetapi hubungan antara rm(1)
dan rmdir(1)
tetap.
Secara pribadi, saya merasa sedikit lebih memuaskan rmdir junk
dan tahu bahwa yang terburuk yang saya lakukan adalah menghapus direktori kosong.
rmdir
, itu masih perlu -r
bendera. ( rmdir -r junk
Alih-alih rm -r junk
, dan rmdir junk
masih hanya berfungsi jika direktori kosong)
Itu sejarah. rm
dibuat untuk menghapus referensi ke file, rmdir
dibuat untuk menghapus direktori, sejajar dengan mkdir
. Bertahun-tahun yang lalu, Unix rm
hanya bisa menghapus direktori dengan memohon rmdir
. Juga tidak ada rmdir(2)
panggilan sistem,rmdir
ada program yang memanggil unlink(2)
.
Referensi:
Murni masalah pendapat, tetapi rm
menghapus file sambil rmdir
menghapus direktori. Direktori adalah file, tetapi jenis file khusus, jadi masuk akal untuk rm
menghapusnya, tetapi memperlakukannya secara khusus (yaitu memerlukan opsi tambahan untuk mengaktifkan kemampuan.) Di sisi lain tidak semua file adalah direktori, dan tidak masuk akal IMHO untuk rmdir
menghapus sesuatu yang bukan direktori.
rm
menghapus direktori kosong (kecuali dalam mode rekursif)?
-r
bendera untuk mengaktifkan fitur file khusus direktori.
rmdir
menghapus direktori,rm
menghapus. Mengapa itu intuitif untukrmdir
menghapus non-direktori?