Saya menemukan bahwa halaman manual tidak memiliki sedikit detail dalam kasus ini. The -fpilihan rmsebenarnya memiliki cukup beberapa kasus penggunaan:
Untuk menghindari kesalahan kode keluar
Untuk menghindari diminta
Untuk melewati pemeriksaan izin
Anda benar bahwa tidak ada gunanya untuk menghapus file yang tidak ada, tetapi dalam skrip sangat nyaman untuk dapat mengatakan "Saya tidak ingin file-file ini, hapus mereka jika Anda menemukannya, tetapi jangan ganggu saya jika mereka tidak tidak ada ". Beberapa orang menggunakan set -edalam skrip mereka sehingga akan berhenti pada kesalahan apa pun (untuk menghindari kerusakan lebih lanjut yang dapat disebabkan skrip), dan rm -rf /home/my/garbagelebih mudah daripada if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.
Catatan tentang pemeriksaan izin: untuk menghapus file, Anda perlu izin menulis ke direktori induk , bukan file itu sendiri. Jadi misalkan ada file yang dimiliki oleh rootdi direktori home Anda dan Anda tidak memiliki sudoakses, Anda masih dapat menghapus file menggunakan -fopsi. Jika Anda menggunakan Git, Anda dapat melihat bahwa Git tidak meninggalkan izin menulis pada file objek yang dibuatnya:
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
Jadi, jika Anda menggunakan rm, satu-satunya cara untuk menghapus repositori Git tanpa menggunakan rootadalah menggunakan rm -rf.
-ftidak menghindari kode keluar kesalahan. Jika rmmencoba dan gagal menghapus file yang ada, itu akan mengembalikan kode kesalahan.
Gilles 'SANGAT berhenti menjadi jahat'
Saya telah menurunkan jawaban ini karena "Untuk menghindari kode keluar kesalahan" harus ditulis sebagai "Untuk menghindari kode keluar kesalahan jika tidak ada operan file atau operan file tidak ada". Karena jawaban ini ditulis sekarang, maka itu salah.
Harold Fischer
6
The -fpilihan menekan petunjuknya konfirmasi saat menghapus file read-only. Itu juga menekan kesalahan ketika satu atau lebih file yang disediakan tidak ada.
The -fpilihan berguna ketika Anda menyadari bahwa beberapa file yang Anda menghapus sedang dapat read-only, dan Anda tidak ingin diminta tentang hal itu.
The fpilihan juga berguna ketika Anda ingin menghapus beberapa file dalam kasus mereka ada, dan tidak ingin peduli apakah mereka ada atau tidak. Ini sangat umum digunakan dalam makefiles , untuk membuat perintah yang menghapus file yang dapat dibuat ulang dari file sumber. Misalnya, jika foo.odapat dibangun kembali dari foo.c, bar.odapat dibangun kembali dari bar.c, dan myappdapat dibangun kembali dari foo.odan bar.o, maka target makefile
clean:
rm -f *.o myapp
menghapus myapp, foo.odan bar.ojika ada dan tidak mengeluh jika salah satu dari mereka tidak ada.
Termasuk -fdalam instruksi untuk menghapus pohon direktori tidak diperlukan dalam banyak kasus. Itu dapat dibenarkan karena jika Anda yakin ingin menghapus pohon direktori itu terlepas dari apa yang ada di dalamnya, maka Anda dapat menentukan -funtuk menghindari diminta jika seandainya beberapa file hanya baca-saja. Namun, orang-orang yang mengatakan untuk menjalankan rm -rfseringkali hanya mengulangi mantra mistis untuk menyingkirkan sesuatu, terlepas dari apakah pilihan -rdan -fsebenarnya diperlukan. Jika opsi tidak diperlukan, mereka tidak disarankan, karena mereka meningkatkan risiko kesalahan ketik dalam argumen akan menghancurkan sesuatu yang penting.
Saya biasanya melihat -fsedang digunakan dengan rmketika rmperintah alias sehingga termasuk -isaklar untuk interaktif. The -fberalih menetralkan -i.
Contoh
Simulasikan masalah dengan rmmenjadi alias rm -i.
$ alias rm='rm -i'
Buat beberapa data palsu
$ touch afile
Sekarang cobalah untuk menghapusnya menggunakan versi alias rm
$ rm afile
rm: remove regular empty file `afile'?
Sekarang coba gunakan -f
$ rm -f afile
$
Izin
Saya juga percaya ada beberapa kasus di mana Anda memiliki akses hanya baca ke direktori dan ketika Anda mencoba untuk menghapus file dan atau sub-direktori di direktori tersebut, Anda akan ditantang dengan prompt yang sama yaitu "Anda yakin?". Penggunaan -fmenghilangkan harus mengatakan ya.
Dengan menggunakan alias itu memang masuk akal. Dan jawaban Anda cocok dengan apa yang saya tunjukkan di halaman manual openbsd. Meskipun openbsd bukan GNU / Linux, tampaknya itu menggambarkan apa yang baru saja Anda katakan. Berikut adalah link jika seseorang ingin memeriksa: [link] openbsd.org/cgi-bin/...
saliarosaurus
Dengan bash Anda selalu dapat melakukannya \rmuntuk menjalankan tanpa aliasing (\ menjadi jalan pintas ke commandbuild itu). Saya menemukan penggunaan terbaik -fadalah dalam skrip shell di mana Anda memiliki sesuatu seperti file kunci yang mungkin ada atau tidak ada, -fmenghentikan rm: cannot remove 'file': No such file or directoryperingatan.
Drav Sloan
@ DravSloan Ya, itu juga masuk akal. Terima kasih atas jawaban Anda baik Drav Sloan dan slm
saliarosaurus
Saya rm -fsering menggunakan tepat cleansasaran di Makefiles
Alex
-itidak benar-benar tentang apa -f, itu lebih dari kasus tepi.
-f
tidak menghindari kode keluar kesalahan. Jikarm
mencoba dan gagal menghapus file yang ada, itu akan mengembalikan kode kesalahan.The
-f
pilihan menekan petunjuknya konfirmasi saat menghapus file read-only. Itu juga menekan kesalahan ketika satu atau lebih file yang disediakan tidak ada.The
-f
pilihan berguna ketika Anda menyadari bahwa beberapa file yang Anda menghapus sedang dapat read-only, dan Anda tidak ingin diminta tentang hal itu.The
f
pilihan juga berguna ketika Anda ingin menghapus beberapa file dalam kasus mereka ada, dan tidak ingin peduli apakah mereka ada atau tidak. Ini sangat umum digunakan dalam makefiles , untuk membuat perintah yang menghapus file yang dapat dibuat ulang dari file sumber. Misalnya, jikafoo.o
dapat dibangun kembali darifoo.c
,bar.o
dapat dibangun kembali daribar.c
, danmyapp
dapat dibangun kembali darifoo.o
danbar.o
, maka target makefilemenghapus
myapp
,foo.o
danbar.o
jika ada dan tidak mengeluh jika salah satu dari mereka tidak ada.Termasuk
-f
dalam instruksi untuk menghapus pohon direktori tidak diperlukan dalam banyak kasus. Itu dapat dibenarkan karena jika Anda yakin ingin menghapus pohon direktori itu terlepas dari apa yang ada di dalamnya, maka Anda dapat menentukan-f
untuk menghindari diminta jika seandainya beberapa file hanya baca-saja. Namun, orang-orang yang mengatakan untuk menjalankanrm -rf
seringkali hanya mengulangi mantra mistis untuk menyingkirkan sesuatu, terlepas dari apakah pilihan-r
dan-f
sebenarnya diperlukan. Jika opsi tidak diperlukan, mereka tidak disarankan, karena mereka meningkatkan risiko kesalahan ketik dalam argumen akan menghancurkan sesuatu yang penting.sumber
The
-i
beralih kerm
Saya biasanya melihat
-f
sedang digunakan denganrm
ketikarm
perintah alias sehingga termasuk-i
saklar untuk interaktif. The-f
beralih menetralkan-i
.Contoh
Simulasikan masalah dengan
rm
menjadi aliasrm -i
.Buat beberapa data palsu
Sekarang cobalah untuk menghapusnya menggunakan versi alias
rm
Sekarang coba gunakan
-f
Izin
Saya juga percaya ada beberapa kasus di mana Anda memiliki akses hanya baca ke direktori dan ketika Anda mencoba untuk menghapus file dan atau sub-direktori di direktori tersebut, Anda akan ditantang dengan prompt yang sama yaitu "Anda yakin?". Penggunaan
-f
menghilangkan harus mengatakan ya.sumber
\rm
untuk menjalankan tanpa aliasing (\ menjadi jalan pintas kecommand
build itu). Saya menemukan penggunaan terbaik-f
adalah dalam skrip shell di mana Anda memiliki sesuatu seperti file kunci yang mungkin ada atau tidak ada,-f
menghentikanrm: cannot remove 'file': No such file or directory
peringatan.rm -f
sering menggunakan tepatclean
sasaran diMakefile
s-i
tidak benar-benar tentang apa-f
, itu lebih dari kasus tepi.