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 rm
eklendi --preserve-root
ve --no-preserve-root
seçenekler bu 2003-11-09 işlemek , ancak --preserve-root
yalnı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
/ $2
Solaris 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. rm
hala 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ü something
böyle bir dizin olmadı.
Gibi kabuklar tcsh
veya bir joker ile zsh
aramaya çalışırken bir istemi ekler ( varsayılan olarak değil).rm
*
tcsh