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-root
và --no-preserve-root
các tùy chọn trong cam kết 2003-11-09 này , nhưng --preserve-root
chỉ 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. rm
vẫ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ì something
như vậy đã xảy ra không phải là một thư mục.
Shell thích tcsh
hoặc zsh
sẽ thêm một dấu nhắc thêm khi cố gắng gọi rm
bằng *
ký tự đại diện ( tcsh
không phải theo mặc định).