POSIX 2008'in tüm sürümlerinin HTML sürümünü çevrimiçi olarak bulabilirsiniz:
Bu 2008 baskısında eklendi.
Teknik corrigenda genellikle yeni özellikler eklemiyor.
Önceki sürümü görebilirsiniz ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) bu metne sahip değildi.
Yeni metin, standardın daha sonra gözden geçirilmesine dahil edilmek üzere 2003-05-09 austin grubu konferansında kabul edildi .
Bu edildi Aynı yıl Mart ayında Sun Microsystems John Beck tarafından talep edilen (link ayrıca bkz, kayıt Opengroup gerektirir Geliştirme İsteği Number 5 burada ).
John Beck, 11 Mar 2003, Salı yazdı:
@ 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 rmeklendi --preserve-rootve --no-preserve-rootseçenekler bu 2003-11-09 işlemek , ancak --preserve-rootyalnızca varsayılan haline bu 2006-09-03 taahhüt coreutils 6.2 kadar,
FreeBSD edilmiş eğik çizgi koruyarak beri o 2004/10/04 taahhüt (bir "iç çamaşırım gerçekten ne yanmaz öğrenin" günlüğünü işlemek), ancak ne zaman altında başlangıçta değilPOSIXLY_CORRECT onlar POSIX şimdi oldu sonra o on yıl kontrol etmek hatırlayana kadar, bunu zorunlu hangi POSIX modunda da yapıldığını işaret .
FreeBSD'nin ilk taahhüdü Solaris’in o zamanlar zaten yaptığını söylüyor.
@JdePB (aşağıda yapılan yorumda) , Solaris'in kökeni hakkında daha fazla detay ve ayrıntı veren ve Solaris'in Austin grubuna talepte bulunmadan önce yerinde önlem aldığını öne süren bir Sun insider öyküsüne bağlantı olduğunu buldu .
Bu dışlamanın eklenmesinin gerekçesini açıklar. Eğer yaparlarsa biri yalnızca kendini suçlayabilir iken rm -rf /, yapıyor bir komut dosyasının yapabileceğini bir vaka var rm -rf -- "$1/$2"olduğunu kontrol etmeden $1/ $2Solaris yama (bu bağlantı göre) misapplying bazı Sun müşterileri feci çarptı şeydir sağlandı.
Silinmesine yasaklayan .ve ..çok daha önce eklenmiş potansiyel aksilikler karşı koruma oluşturmak amacıyla tekrar. rmhala tehlikeli bir emirdir. Yapması gerekeni yapar: ne söylediğini kaldırın.
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/*
Ayrıca her şeyi kaldırırdım. Kabuk dosya adının tamamlanmasının böyle sorunlara neden olduğu biliniyor
rm -rf someth<Tab>/*
Şunlara genişletildi:
rm -rf something /*
Çünkü somethingböyle bir dizin olmadı.
Gibi kabuklar tcshveya bir joker ile zsharamaya çalışırken bir istemi ekler ( varsayılan olarak değil).rm*tcsh