Alasan utamanya mungkin karena sejarah. Dulu, dulu, tidak ada rmdir(2)
dan mkdir(2)
panggilan sistem (kami membahas UNIX™ Edisi ke-7 di sini), dan rmdir(1)
adalah (perlu) program root SUID yang menggunakan unlink(2)
panggilan sistem untuk menghapus direktori.
Manual UNIX Edisi ke-7 tersedia online di http://cm.bell-labs.com/7thEdMan (terakhir diperiksa 23-04-2017); Mereka juga tersedia di http://plan9.bell-labs.com/7thEdMan (terakhir diperiksa 23-04-2017). Tampaknya juga ada setidaknya satu sumber alternatif online — http://wolfram.schneider.org/bsd/7thEdManVol2/ — untuk artikel di Volume 2, dengan tautan ke situs FreeBSD untuk perintah dan panggilan sistem di Volume 1 .
rm
perintah (program non-SUID biasa) menjalankan rmdir(1)
perintah untuk menghapus direktori kosong. Ia tidak dapat melakukannya sendiri; yang membutuhkan hak akses root. Jadi, rmdir(1)
perintah (lihat di sini untuk kode sumbernya di Unix V7) ada untuk menghapus direktori kosong, dan rm
perintah tidak menghapus direktori kosong itu sendiri.
Untuk menggunakan rm
untuk menghapus direktori, Anda harus memberikan -r
opsi.
Ada juga argumen simetri. Anda membutuhkan perintah mkdir(1)
untuk membuat direktori; tampaknya masuk akal untuk memiliki perintah rmdir(1)
untuk membatalkan apa mkdir(1)
telah melakukan. Plus mereka (hari ini) adalah pelaksana sederhana dari rmdir(2)
dan mkdir(2)
panggilan sistem — ya, kembali ke UNIX Edisi ke-7, mkdir(1)
juga merupakan program root SUID, menggunakan mknod(2)
panggilan untuk membuat node direktori dan link(2)
panggilan untuk membuat .
dan ..
entri dalam direktori.
"rm" tidak berfungsi pada direktori. Anda harus menggunakan rmdir atau menentukan -r sakelar untuk penghapusan rekursif. Alasannya historis:unlink
dan rmdir
adalah panggilan sistem yang terpisah dan telah ada sejak awal Unix.
Juga rmdir hanya menghapus kosong direktori. Jika Anda ingin memastikan bahwa Anda tidak menghapus file tambahan apa pun di direktori, rmdir
lebih aman daripada rm -r
(kecuali jika Anda membuat alias rm sehingga Anda selalu perlu mengonfirmasi apa yang Anda hapus, yaitu alias rm='rm -i'
di ~/.bashrc atau apa pun yang Anda gunakan).