คุณสามารถค้นหารุ่น HTML ของ POSIX 2008 ทุกรุ่นทางออนไลน์:
ที่ถูกเพิ่มเข้ามาในรุ่น 2008
corrigenda ทางเทคนิคโดยทั่วไปจะไม่เพิ่มคุณสมบัติใหม่
คุณสามารถดูรุ่นก่อนหน้า ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) ไม่มีข้อความนั้น
ข้อความใหม่ได้รับการยอมรับในการประชุมกลุ่มออสตินระหว่างปี 2003-05-09เพื่อรวมไว้ในการแก้ไขมาตรฐานในภายหลัง
มันได้รับการร้องขอจากจอห์นเบ็คของ Sun Microsystems มีนาคมปีเดียวกัน (ลิงค์จำเป็นต้องลงทะเบียน opengroup เห็นการเพิ่มประสิทธิภาพขอหมายเลข 5 ที่นี่ )
John Beck เขียนเมื่อวันอังคารที่ 11 มีนาคม 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
เพิ่ม--preserve-root
และ--no-preserve-root
ตัวเลือกในการกระทำนี้ 2003-11-09แต่--preserve-root
กลายเป็นค่าเริ่มต้นในการกระทำนี้ 2006-09-03ดังนั้นใน coreutils 6.2
FreeBSD รักษาสแลชตั้งแต่ปี2004-10-04 กระทำ (กับ"ค้นหาว่าชุดชั้นในของฉันคือเปลวไฟที่พิสูจน์ได้จริง ๆ "แต่บันทึกตอนแรกไม่ได้อยู่ภายใต้POSIXLY_CORRECT
จนกระทั่งพวกเขาจำได้ว่าจะตรวจสอบอีกสิบปีต่อมาว่า POSIX อิงมันจุดที่มันทำยังอยู่ในโหมด POSIX
FreeBSD เริ่มต้นกล่าวถึง Solaris ว่าได้ทำไปแล้วในเวลานั้น
@JdePB (ในความคิดเห็นด้านล่าง) พบว่าลิงก์ไปยังเรื่องราวภายในวงอาทิตย์ยืนยันและให้รายละเอียดเพิ่มเติมเกี่ยวกับต้นกำเนิดโซลาริสและแนะนำโซลาริสมีการปกป้องอยู่ก่อนที่พวกเขาจะขอกลุ่มออสติน
มันอธิบายถึงเหตุผลในการเพิ่มการยกเว้นนั้น ในขณะที่ใครคนหนึ่งสามารถตำหนิตัวเองได้หากพวกเขาทำrm -rf /
มีกรณีที่สคริปต์สามารถทำได้ถ้าทำrm -rf -- "$1/$2"
โดยไม่ตรวจสอบว่า$1
/ $2
ถูกจัดเตรียมไว้ซึ่งเป็นสิ่งที่ทำให้ลูกค้าของ Sun บางคนแย่เมื่อทำการติดตั้ง patch ของ Solaris ผิดพลาด
การห้ามการลบ.
และ..
ถูกเพิ่มมานานก่อนหน้านั้นและอีกครั้งเพื่อป้องกันอุบัติเหตุที่อาจเกิดขึ้น rm
ยังคงเป็นคำสั่งที่อันตราย มันทำในสิ่งที่มันควรทำ: ลบสิ่งที่คุณบอก
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/*
ก็จะลบทุกอย่าง การรู้จักชื่อไฟล์ของเชลล์ทำให้เกิดปัญหาดังกล่าวเมื่อคุณทำ
rm -rf someth<Tab>/*
ขยายเป็น:
rm -rf something /*
เพราะsomething
อย่างนั้นเกิดขึ้นไม่ต้องเป็นไดเรกทอรี
เชลล์ชอบtcsh
หรือzsh
จะเพิ่มพรอมต์พิเศษเมื่อพยายามโทรrm
ด้วย*
อักขระตัวแทน ( tcsh
ไม่ใช่ค่าเริ่มต้น)