Bạn có thể tìm thấy phiên bản HTML của tất cả các phiên bản POSIX 2008 trực tuyến:
Điều đó đã được thêm vào trong phiên bản 2008.
Chương trình kỹ thuật nói chung không thêm các tính năng mới.
Bạn có thể thấy phiên bản trước ( http://pub.opengroup.org/onlinepub/009695399/utilities/rm.html ) (POSIX 2004) không có văn bản đó.
Văn bản mới đã được chấp nhận trong hội nghị nhóm austin 2003-05-09 để đưa vào sửa đổi sau này của tiêu chuẩn.
Nó được yêu cầu bởi John Beck của Sun microsystems vào tháng 3 cùng năm (liên kết yêu cầu đăng ký opengroup, xem thêm Yêu cầu nâng cao số 5 tại đây ).
John Beck đã viết, vào ngày 11 tháng 3 năm 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đã thêm --preserve-rootvà --no-preserve-rootcác tùy chọn trong cam kết 2003-11-09 này , nhưng --preserve-rootchỉ trở thành mặc định trong cam kết 2006-09-03 này , vì vậy trong coreutils 6.2
FreeBSD đã duy trì dấu gạch chéo kể từ lần cam kết 2004-10-04 đó (với "Tìm hiểu xem đồ lót của tôi thực sự chống cháy" như thế nào ), nhưng ban đầu thì khôngPOSIXLY_CORRECT , cho đến khi họ nhớ kiểm tra một thập kỷ sau đó là POSIX bây giờ bắt buộc nó tại điểm mà nó đã được thực hiện ở chế độ POSIX .
Cam kết ban đầu của FreeBSD đề cập Solaris đã thực hiện nó vào thời điểm đó.
@JdePB (trong bình luận bên dưới) đã tìm thấy liên kết đến câu chuyện nội bộ của Sun chứng thực và cung cấp thêm chi tiết về nguồn gốc Solaris và đề nghị Solaris đã có biện pháp bảo vệ trước khi họ đưa ra yêu cầu cho nhóm Austin.
Nó giải thích lý do cho việc thêm loại trừ đó. Mặc dù người ta chỉ có thể tự trách mình nếu họ làm vậy rm -rf /, nhưng có một trường hợp kịch bản có thể làm điều đó nếu làm rm -rf -- "$1/$2"mà không kiểm tra điều đó $1/ $2được cung cấp, đó là điều khiến một số khách hàng của Sun xấu khi sử dụng sai bản vá Solaris (theo liên kết đó).
Việc cấm xóa .và ..đã được thêm vào từ lâu trước đó và một lần nữa để bảo vệ chống lại những rủi ro tiềm ẩn. rmvẫn là một lệnh nguy hiểm. Nó thực hiện những gì nó có nghĩa là làm: loại bỏ những gì bạn nói với 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/*
Cũng sẽ loại bỏ tất cả mọi thứ. Hoàn thành tên tập tin Shell đã được biết là gây ra vấn đề như vậy khi bạn làm
rm -rf someth<Tab>/*
Mở rộng thành:
rm -rf something /*
Bởi vì somethingnhư vậy đã xảy ra không phải là một thư mục.
Shell thích tcshhoặc zshsẽ thêm một dấu nhắc thêm khi cố gắng gọi rmbằng *ký tự đại diện ( tcshkhông phải theo mặc định).