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 rm
perintah (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 rm
perintah itu tidak menghapus direktori kosong itu sendiri.
Untuk menggunakan rm
untuk menghapus direktori, Anda harus memberikan -r
opsi.
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: unlink
dan rmdir
merupakan pemanggilan sistem yang terpisah dan telah sejak awal Unix.
rmdir(2)
atau pun mkdir(2)
ada sebagai panggilan sistem; pengguna root
dapat menggunakan mknod(2)
panggilan untuk membuat simpul direktori dan link(2)
panggilan untuk membuat .
dan ..
entri dalam direktori; dan root
bisa 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, rmdir
lebih 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, rmdir
membuatnya mudah untuk menghapus direktori kosong dengan ekspresi globbing (wildcard). Misalnya, untuk menghapus semua direktori kosong /tmp
tanpa menyentuh file atau direktori apa pun dengan konten:
cd /tmp ; rmdir *
rmdir /tmp/*
. Jika /tmp
direktori sangat besar, ini mungkin kehabisan ruang untuk argumen sedikit lebih cepat karena tambahan lima karakter per nama, tetapi tidak mengharuskan cd
Anda bergerak di sekitar hierarki direktori. Ini juga layak dipertimbangkan rmdir /tmp/* 2>/dev/null
untuk menghindari melihat pesan kesalahan (biasanya akan ada banyak, dan hampir semuanya tidak akan relevan untuk tugas yang sedang ditangani).