rmdirmenghapus direktori, rmmenghapus. Mengapa itu intuitif untuk rmdirmenghapus non-direktori?
Stéphane Chazelas
5
Karena tidak. Anda 40-an tahun terlambat mengajukan pertanyaan ini, dan Anda bertanya kepada orang yang salah.
user207421
Jawaban:
25
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 junkdan tahu bahwa yang terburuk yang saya lakukan adalah menghapus direktori kosong.
Re kalimat terakhir: Agaknya, jika operasi penghapusan rekursif dalam rmdir, itu masih perlu -rbendera. ( rmdir -r junkAlih-alih rm -r junk, dan rmdir junkmasih hanya berfungsi jika direktori kosong)
user253751
7
Itu sejarah. rmdibuat untuk menghapus referensi ke file, rmdirdibuat untuk menghapus direktori, sejajar dengan mkdir. Bertahun-tahun yang lalu, Unix rmhanya bisa menghapus direktori dengan memohon rmdir. Juga tidak ada rmdir(2)panggilan sistem,rmdir ada program yang memanggil unlink(2).
Murni masalah pendapat, tetapi rmmenghapus file sambil rmdirmenghapus direktori. Direktori adalah file, tetapi jenis file khusus, jadi masuk akal untuk rmmenghapusnya, 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 rmdirmenghapus sesuatu yang bukan direktori.
rmdir
menghapus direktori,rm
menghapus. Mengapa itu intuitif untukrmdir
menghapus non-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 bisaunlink(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)
danrmdir(1)
yang merupakan akar Set-UID sehingga mereka dapat membuat panggilan sistem yang diistimewakan atas nama pengguna yang tidak berkepentingan. Ketika rekursi ditambahkan kerm(1)
, perintah hapus akan berjalan sebagai UID saat ini dan kemudian memanggilrmdir(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)
danrmdir(2)
ditambahkan sebagai panggilan sistem mereka sendiri tetapi hubungan antararm(1)
danrmdir(1)
tetap.Secara pribadi, saya merasa sedikit lebih memuaskan
rmdir junk
dan tahu bahwa yang terburuk yang saya lakukan adalah menghapus direktori kosong.sumber
rmdir
, itu masih perlu-r
bendera. (rmdir -r junk
Alih-alihrm -r junk
, danrmdir junk
masih hanya berfungsi jika direktori kosong)Itu sejarah.
rm
dibuat untuk menghapus referensi ke file,rmdir
dibuat untuk menghapus direktori, sejajar denganmkdir
. Bertahun-tahun yang lalu, Unixrm
hanya bisa menghapus direktori dengan memohonrmdir
. Juga tidak adarmdir(2)
panggilan sistem,rmdir
ada program yang memanggilunlink(2)
.Referensi:
sumber
Murni masalah pendapat, tetapi
rm
menghapus file sambilrmdir
menghapus direktori. Direktori adalah file, tetapi jenis file khusus, jadi masuk akal untukrm
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 untukrmdir
menghapus sesuatu yang bukan direktori.sumber
rm
menghapus direktori kosong (kecuali dalam mode rekursif)?-r
bendera untuk mengaktifkan fitur file khusus direktori.