Apa yang dilakukan rm -rf?

25

Apa yang rm -rfdilakukan ketika digunakan untuk menghapus file atau direktori?

Bagaimana cara -rdan -fopsi bekerja bersama?

TellMeWhy
sumber
6
Kenapa ini belum ditanyakan sebelumnya ?
Dan Dascalescu
16
@DanDascalescu Karena itu dijawab sepele dengan membaca halaman manual, yang seharusnya menjadi tempat panggilan pertama siapa pun untuk menjawab pertanyaan seperti ini.
David Richerby
9
Cobalah dan lihatlah. (Spoiler: jangan.)
imallett
3
Astaga ! Pertanyaan ini pasti lelucon dari DevRobot! Bagaimana mungkin Anda bisa mencapai level karma Anda tanpa pernah membaca halaman manual. Sekarang ... apakah kamu manusia?!
Cbhihe
2
Benar-benar membaca seperti sebuah lelucon. Seolah-olah seseorang mencoba bertanya, "apakah hujan terbuat dari H2O?" (Jawaban yang bagus adalah: Biasanya ya, tetapi di masa depan, begitu manusia dihancurkan setengah dari flora di Bumi, 50% darinya akan berubah menjadi asam (seperti dalam hujan asam))
syntaxerror

Jawaban:

52

Perintahnya rm -rfsama dengan rm -r -f.

Dari rmhalaman manual (ketikkan man rmterminal untuk melihatnya) -rapakah:

remove directories and their contents recursively

Dan -fapakah:

ignore nonexistent files and arguments, never prompt

Jadi secara kombinasi mereka melakukan keduanya.

Sebenarnya itu adalah perintah yang sangat berbahaya karena secara rekursif akan menghapus semua yang ada dalam direktori yang Anda pilih (atau hanya menghapus file yang Anda pilih), dan itu akan melakukannya tanpa pernah meminta Anda.

Silakan gunakan perintah ini dengan hati-hati!

Fabby
sumber
@ Paul, apa yang akan dilakukan slash? Saya menggunakan perintah ini untuk menghapus dirs sering dan tanpa slash.
Octopus
1
@Octopus, slash dengan sendirinya menunjukkan direktori root. rm -rf /secara teoritis akan menghapus setiap file di komputer Anda yang berada di direktori tempat Anda memiliki izin menulis. Jika Anda root, itu berarti memusnahkan seluruh sistem. (Dalam praktiknya, itu tidak berhasil karena GNU rmmemiliki kasus khusus yang menolak untuk mengizinkan rm -r /kecuali Anda juga mengatakan --no-preserve-root.)
cjm
10
Semua sama, saya tidak menyarankan mencoba rm -rf /untuk melihat apakah itu tertangkap dengan benar.
cjm
2
@ mattburnett Ini berbahaya di VM juga: Anda mungkin memiliki mount yang tidak lokal ke VM. Secara khusus, saya percaya itu cukup umum untuk me-mount salah satu direktori mesin host pada VM untuk berbagi file antara host dan VM.
hvd
1
@ Mattburnett Saya punya VM. Saya tidak memiliki VM yang dikarantina. Saya hanya tidak menjalankan executable yang tidak diketahui. :)
hvd
22

Selain jawaban yang benar sebelumnya, saya ingin mengajari Anda cara memancing:

Ketika Anda tidak yakin tentang bagaimana perintah bekerja, opsi apa yang dimiliki dan apa fungsinya, buka terminal dan ketik

man <command>

Sebagai contoh:

man rm

Setelah di sana, Anda dapat mencari opsi. Halaman manual bisa sangat panjang untuk dibaca, jadi pada tipe terminal:

/<pattern>

Jadi misalnya, melakukan:

/-f

Anda dapat dengan mudah mendarat ke:

-f, --force
              ignore nonexistent files and arguments, never prompt

Untuk -r lakukan:

-r, -R, --recursive
              remove directories and their contents recursively

Anda dapat berpindah di antara hasil pencarian menggunakan n(berikutnya) dan N(sebelumnya).

Bonus:

Jika Anda perlu melakukan sesuatu, tetapi Anda tidak tahu nama perintahnya, gunakan aproposuntuk mencari di halaman manual:

apropos <pattern>

Sebagai contoh:

apropos directory listing
Federico Ponzi
sumber
8

rmkependekan dari remove. The rbendera ke direktori menghapus dan isinya secara rekursif dan fkekuatan berarti, dan itu menimpa setiap prompt konfirmasi.

Chris
sumber
3
Sebenarnya r flag is to remove directories tidak benar..itu menghapus direktori beserta isinya, itu adalah operasi berulang .. menurut kata-kata Anda, itu hanya akan menghapus direktori, bagaimana dengan subdir, file di bawahnya? karena entri direktori hanya berisi pemetaan nama-inode, ini hanya tidak masuk akal ..
heemayl
Anda benar, saya akan mengedit jawaban saya.
Chris
1
-r menghapus direktori dan isinya secara rekursif.
Jim Balter
3

Seperti yang telah disebutkan, rm -rf <ARG>dimaksudkan untuk secara paksa menghapus file secara rekursif, di mana <ARG>direktori (meskipun itu bisa menjadi file dengan baik).

Inti dari -r(penghapusan rekursif) adalah bahwa rmtidak dapat menghapus direktori jika tidak kosong, hanya karena panggilan sistem yang mendasarinya yang rmmenggunakan ( membatalkan tautan ) hanya beroperasi pada direktori kosong. Jadi, apa yang -rdilakukan flag, adalah pencarian mendalam-pertama turun ke direktori dan menghapus file terlebih dahulu, dan hanya saat direktori kosong - itu akan menghapusnya. Efek yang sama ini dicapai melalui findperintah dengan -deleteflag (ketika Anda tidak menentukan pemfilteran oleh -type, tapi itu cerita lain).

Adapun -f, ia melakukan dua hal - satu mencegah meminta apakah Anda ingin menghapus file atau tidak (seperti ketika Anda menghapus file yang dimiliki oleh pengguna lain dari dalam direktori Anda, itu tidak akan menampilkan rm: remove write-protected regular empty file 'f1'?konfirmasi konfirmasi), dan mengabaikan file tidak ada. Jadi misalnya, dengan nama file yang tidak ada, Anda harus mendapatkan rm: cannot remove 'nonexistent': No such file or directorykesalahan.

Lihat juga:

Sergiy Kolodyazhnyy
sumber