xkcd 농담에서이 특정 "rm"시퀀스의 이유는 무엇입니까?


14

이 xkcd 코믹 스트립 의 일부는 저자가 정렬 프로그램을 작성할 수 없으므로 모든 파일을 삭제하는 코드를 추가한다는 아이디어입니다.

system("rm -rf ./");
system("rm -rf ~/*");
system("rm -rf /");

AFAIK 모든 것을 삭제하는 정식 방법 rm /은 루트에서 시작하는 모든 것이 삭제되도록하는 것입니다. 여기에 마지막 명령과 그 이전의 두 명령 rm이 현재 디렉토리와 홈 디렉토리의 내용 을 시도합니다 .

왜 안돼 rm /?

답변:


19

맨 위에서 시작하면 계속해야 할 무언가 rm(또는 시스템의 다른 중요한 부분)를 지우고 악이 불완전하게 남아있을 수 있습니다.

이 명령은 핵을 시작하기 전에 최소한 cwd 및 사용자의 홈 디렉토리가 없어 졌는지 확인합니다.


5
rm이 JFTR 인 메모리에로드되면 필요한 변수가 제거 되더라도 작동하고 계속 작동해야합니다. rm -rf /대화식 세션에서 실행 한 후에도 쉘이 계속 작동합니다.
Ulrich Dangel

8
최근 rm명령은 rm: it is dangerous to operate recursively on ‘/’; 을 사용하여 마지막 명령에서 실패합니다 . 그 외에는 rm초기화 후 리소스에 액세스 할 필요가 없습니다. 여러 명령을 사용하는 이유는 사용자에게 해당 디렉토리에 대한 다른 액세스 권한이있을 수 있기 때문입니다.
Stéphane Gimenez 2014 년

@UlrichDangel, 나는 오랫동안 솔라리스에서 어려운 길을 발견했다.
vonbrand

1
그렇습니다. 실제로 rm --no-preserve-root /실제로 작동 하려면 이것을 사용해야 합니다.
Max

1
"이러한 명령은 최소한 cwd와 사용자의 홈 디렉토리가 핵이되기 전에 사라 졌는지 확인합니다." "/ bin /"에있을 때 해당 스크립트를 실행하면 어떻게됩니까? 마지막 두 명령은 전혀 실행되지 않습니다.
XzKto

8

증가하는 수준의 파괴를 보여 주려면 : 현재 디렉토리를 삭제 한 다음 $HOME마지막으로 모두 삭제하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.