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 ).
John Beck menulis, pada Selasa 11 Maret 2003:
@ page 820 line 31681-31683 section rm comment {JTB-1}
Problem:
Defect code : 3. Clarification required
An occasional user mistake, with devastating consequences, is to
write a shell script with a line such as:
rm -rf $VARIABLE1/$VARIABLE2
or
rm -rf /$VARIABLE1
without verifying that either variable is set, which can lead to
rm -rf /
being the resulting command. Since there is no plausible
circumstance under which this is the desired behavior, it seems
reasonable to disallow this. Such a safeguard would, however,
violate the current specification.
Action:
Either extend the exceptions for . and .. on the noted lines
to list / as well, or specify that the behavior of rm if an
operand resolves to / is undefined.
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.2
FreeBSD 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 bawahPOSIXLY_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 melakukan rm -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.
rm -rf /*
cd /tmp && rm -rf .*/ # on some systems where rm -rf ../ still removes
# the content of ../ and shells that still
# may include . and .. in glob expansions.
rm -rf -- "$diretcory"/* # note the misspelled variable name
dir='foo '; rm -rf $dir/*
Juga akan menghapus semuanya. Penyempurnaan nama file Shell diketahui menyebabkan masalah seperti itu saat Anda melakukannya
rm -rf someth<Tab>/*
Diperluas ke:
rm -rf something /*
Karena something
kebetulan bukan menjadi direktori.
Kerang suka tcsh
atau zsh
akan menambahkan prompt tambahan ketika mencoba menelepon rm
dengan *
wildcard ( tcsh
tidak secara default).