POSIX 2008 온라인의 모든 버전의 HTML 버전을 찾을 수 있습니다.
2008 년판에 추가되었습니다.
기술 담당자는 일반적으로 새로운 기능을 추가하지 않습니다.
이전 버전 ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004)에 해당 텍스트가 없음을 알 수 있습니다.
새로운 텍스트는 2003 년 5 월 9 일 오스틴 그룹 회의 에서 이후 표준 개정에 포함되도록 승인되었습니다 .
같은 해 3 월에 Sun Microsystems의 John Beck 이 요청했습니다 (링크는 공개 그룹 등록이 필요합니다 . 여기에서 개선 요청 번호 5 참조 ).
John Beck은 2003 년 3 월 11 일 화요일에 다음과 같이 썼습니다.
@ 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.
이 2003-11-09 커밋 에 GNU가 rm
추가 --preserve-root
되고 --no-preserve-root
옵션 이 추가 되었지만 이 2006-09-03 커밋--preserve-root
에서만 기본값 이 되었으므로 coreutils 6.2
FreeBSD는 된 슬래시를 유지 하기 때문에 그 2004년 10월 4일 커밋 (와 "내 속옷이 실제로 얼마나 방염 알아" 로그 커밋)하지만, 경우에 따라 처음에하지POSIXLY_CORRECT
가 POSIX 지금이었다 나중에 십 년간을 확인하기 위해 기억까지, POSIX 모드에서도 수행 된 시점에서 명령 .
FreeBSD 초기 커밋은 그 당시 솔라리스가 이미하고 있다고 언급했습니다.
@JdePB (아래 의견) 는 솔라리스 원산지에 대해 자세히 설명하고 자세히 설명하고 솔라리스가 오스틴 그룹에 요청하기 전에 이미 보호 조치를 취했다고 제안 하는 썬 내부자 이야기에 대한 링크를 발견했습니다 .
해당 제외를 추가하는 이유를 설명합니다. 그들이 할 경우 하나는 자신을 비난 할 수 있지만 rm -rf /
, 일을하는 경우 스크립트가 그것을 할 수있는 경우가있어 rm -rf -- "$1/$2"
그것을 확인하지 않고 $1
/ $2
솔라리스 패치 (링크에 따라)를 잘못 적용 할 때 어떤 일 고객의 불량을 친 일이 제공되었다.
삭제 금지 .
및 ..
그 이전에 그리고 잠재적 사고를 방지하기 위해 다시 추가되었습니다 . 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
하지 기본적으로).