Selama beberapa tahun sekarang, rm
utilitas GNU tidak akan menghapus /
kecuali ia dipanggil dengan --no-preserve-root
opsi. Namun, perintah rm -rf /
itu telah bersarang di alam bawah sadar kolektif sebagai berbahaya untuk waktu yang sangat lama dan orang masih sering mengutipnya sebagai perintah "menakutkan".
Saya bertanya-tanya kapan aturan ini yang rm
tidak bisa dihapus /
pertama kali muncul. Saya memeriksa spesifikasi POSIX, dan saya bisa melihat bahwa sementara POSIX: 2008 termasuk fitur keamanan ini, POSIX: 2001 tidak. Karena versi online dari spesifikasi POSIX diperbarui dari waktu ke waktu, dengan setiap sub-rilis baru, saya juga memeriksa mesin wayback dan menemukan halaman yang relevan dari POSIX: 2008 dari 2010 dan dapat mengkonfirmasi bahwa aturan yang rm
tidak dapat menghapus /
sudah terdaftar saat itu.
Jadi, pertanyaan saya adalah:
- Kapan aturan yang
rm
tidak bisa dihapus/
ditambahkan ke spesifikasi POSIX? Apakah itu dalam edisi 2008 asli dari Single UNIX spesifikasi versi 4 atau itu ditambahkan dalam revisi? - Kapan batasan ini ditambahkan ke GNU
rm
? Saya cukup yakin itu sebelum ditambahkan ke POSIX, tetapi kapan itu terjadi?
Jawaban:
Anda dapat menemukan versi HTML dari semua edisi POSIX 2008 online:
Itu ditambahkan dalam edisi 2008.
Corrigenda teknis umumnya tidak menambahkan fitur baru.
Anda dapat melihat versi sebelumnya ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) tidak memiliki teks itu.
Teks baru diterima dalam konferensi grup austin 2003-05-09 untuk dimasukkan dalam revisi standar nanti.
Itu diminta oleh John Beck dari Sun Microsystems pada bulan Maret di tahun yang sama (tautan memerlukan registrasi kelompok terbuka, lihat juga Permintaan Peningkatan Nomor 5 di sini ).
GNU
rm
ditambahkan--preserve-root
dan--no-preserve-root
opsi di komit 2003-11-09 ini , tetapi--preserve-root
hanya menjadi default di komit 2006-09-03 ini , jadi di coreutils 6.2FreeBSD telah mempertahankan slash sejak komit 2004-10-04 (dengan "Cari tahu bagaimana nyala api celana dalam saya sebenarnya" log komit), tetapi awalnya tidak ketika di bawah
POSIXLY_CORRECT
, sampai mereka ingat untuk memeriksa satu dekade kemudian bahwa POSIX sekarang mengamanatkannya pada titik mana hal itu dilakukan juga dalam mode POSIX .Komitmen awal FreeBSD menyebutkan Solaris sudah melakukannya pada saat itu.
@JdePB (dalam komentar di bawah) menemukan bahwa tautan ke cerita orang dalam Sun menguatkan dan memberikan rincian lebih lanjut tentang asal Solaris dan menyarankan Solaris sudah memiliki perlindungan di tempat sebelum mereka mengajukan permintaan kepada kelompok Austin.
Ini menjelaskan alasan untuk menambahkan pengecualian itu. Sementara orang hanya bisa menyalahkan diri sendiri jika mereka melakukannya
rm -rf /
, ada kasus di mana skrip dapat melakukannya jika melakukanrm -rf -- "$1/$2"
tanpa memeriksa bahwa$1
/$2
itu disediakan yang merupakan hal yang memukul beberapa pelanggan Sun buruk ketika salah menerapkan patch Solaris (menurut tautan itu).Larangan penghapusan
.
dan..
ditambahkan jauh sebelum itu dan sekali lagi untuk melindungi terhadap potensi kecelakaan.rm
masih merupakan perintah yang berbahaya. Itu melakukan apa yang seharusnya dilakukan: menghapus apa yang Anda katakan.Juga akan menghapus semuanya. Penyempurnaan nama file Shell diketahui menyebabkan masalah seperti itu saat Anda melakukannya
Diperluas ke:
Karena
something
kebetulan bukan menjadi direktori.Kerang suka
tcsh
atauzsh
akan menambahkan prompt tambahan ketika mencoba meneleponrm
dengan*
wildcard (tcsh
tidak secara default).sumber
rm -rf .*
dari dir rumahnya. Tak lama setelah itu, semua saluran telepon menyala ...