Rm -rf /

경고. 절대로 따라하지 마세요!

본 문서에는 본인과 타인에게 신체적·물질적인 피해를 입을 위험이 있는 행위에 관한 내용을 포함하고 있습니다. 위 행위를 모방할 시 부상을 당하거나, 물질적으로 피해를 입을 수 있으므로 절대로 따라하지 마시기 바랍니다.
이 문서에는 집단연구가 포함되어 있습니다.

이 틀이 달린 문서에는 독자연구를 담을 수 있습니다. 모든 의견들은 다른 이용자의 정당한 반론에 의해 수정될 수 있습니다. 내용을 추가하기 전에 문서 내 검색을 통해 중복된 내용인지 확인해 주시기 바랍니다. 자세한 사항은 집단연구 문서를 참조해 주시기 바랍니다.
파일:Sudo rmrf.jpg[1]

악마의 명령어

1 전설의 시작

유닉스 계통 운영체제에 먹히는 악마의 명령어(...)로, 시전하는 순간 끔찍한 일이 벌어진다.

일단 아무 리눅스[2] 터미널이나 관리자 계정을 따낸 후 이 명령어를 친다면... 당신의 하드가 공장에서 갓 나온 따끈따끈한 상태가 될 것이다. 거기다가 로우 레벨 포맷까지 먹여주면, 그 하드는 답이 없어진다.[3] 그러나 최신 OS X루트리스라는 이상한걸 들고 나와서 전부 삭제까진 면하게 되었다(...)

2 설명

유닉스의 rm(remove) 명령어는 파일을 삭제하는 명령어이다. 위의 짤에 있는 sudo(substitute user do)슈퍼 유저 두 아닌가?는 관리자의 권한으로 실행한다는 말이며, 뒤에 -rf는 옵션으로 -r(--recursive, 재귀) 하위 디렉토리 및 파일을 하나하나 깔끔하게 다 지워버리고 마지막엔 자기 디렉토리로 돌아와 자기 자신까지 삭제하며 -f[4](--force)는 읽기전용과 같이 일반적으로 삭제를 방지하도록 되어 있는 옵션을 무시하며, /는 리눅스 파일 시스템의 최상위 디렉토리이다. 즉 윈도에서의 format c:수준 이상[5](……). 물론 NT 계열 윈도우에서는 명령이 제대로 동작한 경우 시스템 드라이브라는 오류를 뱉어내며 안 먹히지만[6], 유닉스의 경우는 마운트하고 있던 모든 장치의 내용까지 날려버린다.

단 윈도우의 format c:와 유닉스/리눅스의 rm -rf는 개념이 다르다. rm은 삭제 명령어가 맞지만, format c:는 c 드라이브를 포맷하라는 명령어이지 삭제 명령이 아니다. 포맷 과정에서 삭제가 이루어지기에 결과가 비슷해지는 것이다. 윈도우 커맨드 라인에서는 del /f /s /q c: 또는 rd /s /q c: 가 이와 비슷하다. 여기서 /s(remove Subdirectories)는 rm의 -r(Recursive) 와 같이 하위의 폴더/파일을 모두 지우고, /q(Quiet)는 사용자에게 묻지도 따지지도 않고 지운다.[7] /f는 rm의 -f와 같다. 하지만 이 명령어는 C 드라이브 외의 다른 드라이브는 건드리지 않는다. DOS나 윈도우 95, 98, ME에서는 저 옵션 스위치가 없기 때문에 del이나 rd 명령어로 완전삭제가 불가능하다.

3 악마의 힘

보통 터미널상에서 디렉토리를 삭제할때 rm -rf를 사용한다. 예를 들어 rm -rf /home/usr/download/incoming 같이... 그런데 이 과정에서 까딱 잘못 치면 묻지도 따지지도 않고 안의 내용을 지워주면서 개념도 같이 포맷해준다(…) 잘못 사용하는 대표적인 예로는..

cd /home/user/test
rm -rf ./*

[8]

이런 식으로 치려다가 삐끗해서 rm -rf /*을 치면.. 정말 다 날아간다. 하드뿐만 아니라 EFI 이미지까지 날아가는, 완전 말 그대로 머리속까지 싸그리 포맷.
그래서 요즘 EFI시스템에서는 시스템을 재설치 하기 위해서라도 rm -rf / 를 하면 안 된다고 한다. /sys/firmware/efi/efivars/에 있는 EFI variable이 날아가 버려서 데이터 뿐만 아니라 보드가 죽어 버릴수도 있다고 한다. # ##두번째의 아카이브 복제본[9][10]

그러니 필요없으면 sudo를 자제하자.

사족으로 이런 실수를 방지하기 위하여 rm -rf ./*보다는 rm -rf *가 선호된다. 의미는 똑같으면서 위와 같은 참사가 일어나지 않는다. / 에서 실행하면 똑같다...

4 트리비아

현재는 기본으로 "--preserve-root"스위치가 rm에 박혀있어, 저 짓을 해도 안먹히지만 여전히 먹히는 놈이 있으니 주의할 것. 게다가 앞에 sudo가 붙고[11] 스위치로 "--no-preserve-root"가 붙으면 끔살 확정이다. 정 저걸 다 적기 싫다면 rm -rf /* 라고 입력해주면 된다. 최고의 조합은 "sudo rm --no-preserve-root -rf /* "망했어요 macOSFreeBSD[12]의 경우 rm에서 "--no-preserve-root"를 지원하지 않으니 꼭 주의할 것!

저런 파괴성으로 인해서 보통 농담으로 쓰이기도 한다...리눅스 터미널에 rm -rf /를 쳐봤습니다. 그리고 순간적인 상황 변화를 받아들이지 못하고 곳곳에서 욕설이...
이걸로 러시안 룰렛도 해볼 수 있다. 물론 결과는 참담하니 따라하지 말자. 회사에서 서버 관리자 권한 얻고 실행했다간 LTE급으로 짤려볼 수 있다

유튜브 등에선 가상머신에 올린 리눅스나 macOS를 rm -rf / 하는 영상이 올라와 있다. 가상머신이니 망정이니 실제 머신이었으면...
[13]

유닉스 기반의 프로그램으로 작업하던 픽사토이스토리 2가 이 명령어 때문에 완전히 날아갈 뻔했다. 다행히 자택근무를 하던 직원의 컴퓨터에 사본이 저장되어 있어 완전히 처음부터 시작하는건 면했다고...(#)[14]

2015년 1월 리눅스용 스팀에서 스팀의 유저 폴더를 다른 곳으로 이동시키고 클라이언트를 실행시킬 경우 매개 변수가 지정되지 않아 유저 파일을 지우는 버그가 발생했다. 다행히 시스템 파일은 손상이 없다지만, 유저쪽 파일은 GG.

2015년 애플에서 새롭게 도입한 루트리스는 시스템에서 중요하다 싶은 폴더를 rm -rf 쳐도 못 삭제하게 바꾸었다(...) 리눅스에 도입이 시급합니다

참고로 안드로이드에서 루트 계정에 접근하기 어렵게 만든 이유이기도 하다. 일반 휴대폰을 사용하는 사람들이 아무 프로그램이나 다운받아 실행했다가는...

5 자매품

경고. 절대로 따라하지 마세요!

본 문서에는 본인과 타인에게 신체적·물질적인 피해를 입을 위험이 있는 행위에 관한 내용을 포함하고 있습니다. 위 행위를 모방할 시 부상을 당하거나, 물질적으로 피해를 입을 수 있으므로 절대로 따라하지 마시기 바랍니다.


아래 적는 명령어는 실수로 입력할 일은 없고 말 그대로 사보타주 전용 명령어라 할 수 있다. 하지만 하드디스크를 디가우저를 사용하지 않고 확실히 파괴하는 수단이기도 해서 일부 명령은 데이터 소거 목적으로 실제로 쓰이기도 한다.

  • dd if=/dev/zero of=/dev/sda 또는 cat /dev/zero > /dev/sda
하드디스크를 제로필 포맷하는 명령어. /dev/sda는 보통 주 하드디스크의 장치 이름이다.[15] 다행히 이놈은 마운트한 다른 장치까지 날려먹진 않는다. 가끔 플래시 메모리의 경우와 같이 /dev/zero로는 쓰지도 않고 썼다고 사기를 치는 경우가 있어서 확실한 파괴를 원할 경우 대신 /dev/urandom을 쓰면 랜덤 필을 한다.
  • mv * /dev/null
현재 디렉토리의 모든 파일과 디렉토리를 null 장치, 즉 뭐든 받아먹기만 하고 저장하지도 출력하지도 않는 무간지옥으로 보내버린다. 휴지통보다는 소각로에 가깝다. 단 루트 디렉토리에서 실행하려고 하면 /proc 디렉토리와 /dev 디렉토리 같은 특수 디렉토리에서 에러가 나기 때문에 명령이 실패할 수도 있다.
  • find / -type f -exec cp /trololo.txt {} \;
루트 디렉토리부터 파일 타입이 일반 파일인 모든 파일을 찾아내서 해당 파일의 내용을 /trololo.txt 의 내용으로 바꾼다. 파일명은 온전히 남아있겠지만 그 내용은 전부...
  • mkfs.(소문자 파일 시스템 이름) /dev/sda
이건 정식 포맷 명령어. 보통 해당 OS의 주 파일 시스템(주로 ext4)을 사용하지만, 별의 별 파일 시스템이 다 가능하고, 심지어 mkfs.ntfs나 mkfs.hfsplus 같은 것도 가능. 리눅스를 젠투나 LFS같은 걸로 깔아본 사람은 이 명령을 한 번은 입력해 봤을 것이다.
  • find / -type f -exec shred {} \;
rm은 삭제 요청이 들어오면 inode를 끊기만 하기 떄문에 복구할 수 있고 여타 삭제 명령어들은 데이터를 덮어쓰기만 한다. 하드디스크의 특성상 데이터를 덮어썼더라도 미세 자기가 남아 이를 이용하면 복구할 수 있는 경우가 많은데, shred를 이용하면 여러번에 걸쳐 썼다 지웠다 하기 때문에 잔류자기를 이용한 복구방법은 사실상 불가능하다. 루트 디렉토리 아래 모든 파일을 갈아버리는 지옥의 명령어. 증거인멸용으론 더할나위없이 유용하다
실수 없이 사용하면 아무 문제 없지만 터미널에서 어떤 실수 한번만 해도 명령이 바로 rm -rf /로 변환되서 작동한다. 위의 러시안 룰렛은 거의 100% 확인사살이지만 자살 리눅스는 그나마 생존할 가능성이 있기 때문에 담력시험이 따로 없다.
  1. 사진 속의 인물은 조니 아이브 애플 수석 디자이너
  2. 리눅스가 대표격으로 많이 알려져 있어서 그렇지, 유닉스 기반의 운영체제(ex. OS X, BSD, Solaris 등)라면 어쨌든 먹힌다고 생각하면 된다.
  3. 요즘 하드는 LLF(Low-Level Format)을 거부하기 때문에 복구는 가능하지만, 일반 가정 레벨에선 어림도 없는 소리다. 로우 레벨 포맷이 시전되었다면, 묵념을 표하자. 근데 하드가 거부해도 덮어쓰기 몇번 하면 끝난다.
  4. -r -f 이런식으로 사용해도 된다. 취향에 맞게(?) 골라 쓰자.아니 쓰긴 뭘 써
  5. 윈도우는 마운트한 장치는 C가 아닌 다른 D같은 곳에 마운트하지만 유닉스 계열에서는 / 아래의 하위 폴더에 마운트한다.
  6. 사실 이것도 나중에 추가된 것이다. 도스/윈도우 9x 시절에는 그런 오류 없이 싹 지워버렸다.
  7. 유닉스 계열 명령어는 확인 절차를 기본적으로 안 하도록 되어 있어 해당 명령어가 없다. 확인 절차는 -i, 혹은 -I(3개 파일 이상일 경우 확인)로 켤 수 있다.
  8. 현재 디랙토리(./=/test)의 모든 내용(=*)을 지운다는 의미이다.
  9. 쿠분투 32비트+바이오스에서 실행하니왜 해?부트 파일 문제로 정체불명의 셸이 등장하였다. 그런데 흔한 명령어는 다 안먹힌다.
  10. EFI SHELL이 나온다. 여기선 유닉스 명령어가 안통하니 복구USB를 꼽고 EXIT 을 입력하자.
  11. 아니면 root계정
  12. [1]
  13. 치고 바로 꺼도 시스템이 먹통이 되어버린다.... 커널이고 뭐고 묻지도 따지지도 않고 싸그리 날려버리기 때문.
  14. 다만 영상에 나온 명령어는 rm * 이다.
  15. SSD, 하드 등 여러 개를 달아놓으면 sdb, sdc, ... 순으로 이름이 매겨진다. sda0, sda1 등은 파티션을 가리키지, 저장장치를 가리키지 않는다.