Apakah ada skenario di mana rm -rf -no-preserve-root diperlukan?

27

Saya telah melihat beberapa pertanyaan di sini di mana orang tidak sengaja melakukan rm -rf --no-preserve-rootatau rm -rf *, menghapus sebagian besar atau semua sistem file mereka sebelum mereka dapat bereaksi.

Adakah alasan untuk menggunakannya --no-preserve-root, apakah dalam penggunaan normal, sebagai pengembang atau sebagai administrator?

Nzall
sumber
4
Saya tidak bisa membayangkan kasus yang berguna ... Saya pikir opsi ini hanya ada untuk mendapatkan ortogonalitas dari prinsip UNIX (dalam hal menjaga hal yang sama tetap sama tanpa pengecualian). Anda kemungkinan besar menginginkan pengecualian dalam kasus /, tetapi »kasus umum« masih diwakili. Dengan kata lain: »Bukan tugas komputer saya untuk mengatakan apa yang harus saya lakukan.« Dan seharusnya tidak.
Andreas Wiese
Itu ada sebagai senjata yang mungkin untuk digunakan ketika SkyNet mengambil alih.
Mitch Dart

Jawaban:

26

PENTING: Sistem UEFI modern memasang firmware di bawah /sysdirektori dan membuatnya tersedia untuk OS. JANGAN jalankan perintah ini pada sistem modern karena ini akan menghapus firmware ini, pada dasarnya merusak mesin Anda.


Skenario paling sederhana yang dapat saya pikirkan adalah seseorang yang ingin menghapus semua data dari drive mereka. Mungkin ada alasan sah untuk melakukan ini dan cara paling sederhana yang bisa saya pikirkan adalah

rm -rf --no-preserve-root /

Ternyata yang ini benar-benar diberikan sebagai contoh di info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Alasan lain yang sangat bagus adalah Anda ingin menghapus sistem file yang terpasang yang sudah Anda chrootgunakan. Dalam hal ini, rm -rf --no-preserve-root /akan menghapus sistem di chrootlingkungan tetapi akan membuat sistem Anda tetap utuh.

Saya yakin ada lebih banyak alasan yang mungkin, tetapi secara umum tampaknya pendekatan yang sangat masuk akal bahwa sistem saya memungkinkan saya untuk melakukan apa pun yang saya inginkan dengannya. Ini tugas saya untuk berhati-hati, sistem seharusnya hanya memungkinkan saya untuk melakukan apa yang ingin saya lakukan. Jika yang saya inginkan itu bodoh, itu masalah saya dan bukan OS.

Bagaimanapun, ini adalah pembatasan yang relatif baru, ditambahkan dalam versi 7 dari spesifikasi POSIX (yang sebelumnya ada di sini), sebelum itu rm -rf /adalah perintah yang benar-benar valid. Pada catatan sejarah, direktori .dan ..selalu dilindungi dari rm, sejak 1979, ketika rmpertama kali memperoleh kemampuan untuk menghapus direktori. Lebih lanjut tentang itu di sini .

terdon
sumber
21
JANGAN GUNAKAN INI UNTUK HAPUS SEMUA DATA JIKA SISTEM ANDA UEFI (komputer baru). Melakukan ini menghapus semua variabel firmware dan menyebabkan motherboard menjadi tidak berguna seperti batu bata
Suici Doga
5
@SuiciDoga: Sumber, atau penjelasan lebih lanjut? Firmware motherboard seharusnya tidak disimpan di HDD, jika tidak maka akan hilang jika Anda menarik drive.
Tarka
15
@Tarka: / sys / firmware / efi / efivars / mungkin dipasang dan menghapus secara rekursif dapat menghapus vars tersebut. Ini seharusnya tidak merusak sistem, tapi mungkin. Lihat thenextweb.com/insider/2016/02/01/...
cyanic
4
@Tarka mereka tidak disimpan di HDD dan menarik drive tidak akan memengaruhi mereka. Namun, untuk alasan yang saya belum mengerti, mereka sudah terpasang sehingga sebenarnya dapat diakses di bawah /.
terdon
20
Cara yang benar untuk mengosongkan drive adalah memformat ulang partisi (atau partisi ulang itu sama sekali). Tidak semua sistem file adalah hard disk, jadi menggunakan rm -rf /Anda dapat mengosongkan mesin jarak jauh di atas pemasangan NFS / CIFS / SSHFS seseorang misalnya.
Score_Under
12

Keberadaan --no-preserve-rootsaklar ini bukan untuk menambah fungsionalitas tambahan tetapi untuk menimpa pengurangan fungsionalitas yang sangat waras. Switch ini kemungkinan didasarkan pada filosofi bahwa komputer harus melakukan apa yang diperintahkan dan bahwa perintah harus tersedia untuk mengekspresikan tindakan yang diinginkan. Peralihan ini pra-tanggal UEFI, dan berdasarkan pengalaman saya, saya katakan itu sudah usang.

Dalam praktik modern, tanpa sakelar ini, rmperintah tersebut menghindari penghapusan tak disengaja dari direktori root saat menggunakan variabel yang tidak diinisialisasi atau ruang yang tersesat.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Catatan kaki yang menyenangkan: Perlindungan bukanlah tujuannya. Per blog Sun Microsystems, menghapus /direktori secara tidak langsung akan menghapus direktori kerja saat ini, sebuah pelanggaran terhadap pertimbangan khusus yang telah dibuat untuk direktori .dan ... Inilah sebabnya mengapa komite standar mereka mengizinkan pengecualian khusus ini - bukan untuk mencegah kecelakaan. Perubahan ini pertama kali diperkenalkan dengan Solaris 10 build 36.

http://archive.is/5lmc9

durette
sumber
Terima kasih untuk tautannya! Berharap bahwa sedikit sejarah akan dikutip karena saya bertanya-tanya apa alasan perubahan itu.
Cameron Gagnon
Info tambahan yang menarik - terima kasih
Tandai
1

Mungkin ini bukan jawaban yang diinginkan penanya asli, tetapi ada kasus penggunaan yang perlu menghapus semua file secara rekursif dari direktori root. Meskipun tidak melalui rmperintah, ini merupakan bagian dari proses switch_root (8) selama proses boot sistem Linux Anda (yang tidak tertanam).

Explorer09
sumber