Saya menggunakan BSD dan Linux setiap hari, saya tidak pernah memiliki keadaan yang harus saya gunakan rmdir (1) daripada rm (1). Apa tujuan dari keberadaan rmdir?
Saya menggunakan BSD dan Linux setiap hari, saya tidak pernah memiliki keadaan yang harus saya gunakan rmdir (1) daripada rm (1). Apa tujuan dari keberadaan rmdir?
Jawaban:
Alasan utamanya mungkin historis. Kembali ke masa lalu, masa lalu, tidak ada panggilan sistem rmdir(2)dan mkdir(2)(kami sedang mendiskusikan Edisi ke-7 UNIX ™ di sini), dan rmdir(1)(tentu saja) program root SUID yang menggunakan unlink(2)panggilan sistem untuk menghapus direktori.
Manual 7th Edition UNIX tersedia online di http://cm.bell-labs.com/7thEdMan (terakhir diperiksa 2017-04-23); Mereka juga tersedia di http://plan9.bell-labs.com/7thEdMan (terakhir diperiksa 2017-04-23). 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 .
The rmperintah (program non-SUID biasa) dipanggil rmdir(1)perintah untuk menghapus direktori kosong. Itu tidak bisa 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 rmperintah itu tidak menghapus direktori kosong itu sendiri.
Untuk menggunakan rmuntuk menghapus direktori, Anda harus memberikan -ropsi.
Ada juga argumen simetri. Anda memerlukan perintah mkdir(1)untuk membuat direktori; tampaknya masuk akal untuk memiliki perintah rmdir(1)untuk membatalkan apa yang mkdir(1)dilakukan. Plus mereka (hari ini) adalah latihan sederhana dari panggilan sistem rmdir(2)dan mkdir(2)- ya, kembali di UNIX Edisi ke-7, mkdir(1)juga program root SUID, menggunakan mknod(2)panggilan untuk membuat simpul direktori dan link(2)panggilan untuk membuat .dan ..entri dalam direktori .
fsck(1)adalah orang yang selamat.
"rm" tidak berfungsi pada direktori. Anda harus menggunakan rmdir atau menentukan sakelar -r untuk penghapusan rekursif. Alasannya historis: unlinkdan rmdirmerupakan pemanggilan sistem yang terpisah dan telah sejak awal Unix.
rmdir(2)atau pun mkdir(2)ada sebagai panggilan sistem; pengguna rootdapat menggunakan mknod(2)panggilan untuk membuat simpul direktori dan link(2)panggilan untuk membuat .dan ..entri dalam direktori; dan rootbisa menggunakan unlink(2)panggilan untuk menghapus entri direktori.
Juga rmdir hanya menghapus direktori kosong . Jika Anda ingin memastikan Anda tidak menghapus file tambahan dalam direktori, rmdirlebih aman daripada rm -r(kecuali jika Anda menggunakan rm sehingga Anda selalu perlu mengkonfirmasi apa yang Anda hapus, yaitu alias rm='rm -i'di ~ / .bashrc atau apa pun yang Anda gunakan ).
Juga, rmdirmembuatnya mudah untuk menghapus direktori kosong dengan ekspresi globbing (wildcard). Misalnya, untuk menghapus semua direktori kosong /tmptanpa menyentuh file atau direktori apa pun dengan konten:
cd /tmp ; rmdir *
rmdir /tmp/*. Jika /tmpdirektori sangat besar, ini mungkin kehabisan ruang untuk argumen sedikit lebih cepat karena tambahan lima karakter per nama, tetapi tidak mengharuskan cdAnda bergerak di sekitar hierarki direktori. Ini juga layak dipertimbangkan rmdir /tmp/* 2>/dev/nulluntuk menghindari melihat pesan kesalahan (biasanya akan ada banyak, dan hampir semuanya tidak akan relevan untuk tugas yang sedang ditangani).