문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [include(틀:사고위험행위)] [include(틀:집단연구)] [[파일:sudo_rmrf.jpg]][* 사진 속의 인물은 조니 아이브 애플 수석 디자이너] ~~'''[[악마]]의 명령어'''~~ [목차] == 전설의 시작 == [[유닉스]] 계통 운영체제에 먹히는 악마의 명령어(...)로, 시전하는 순간 끔찍한 일이 벌어진다. 일단 아무 [[리눅스]][* 리눅스가 대표격으로 많이 알려져 있어서 그렇지, 유닉스 기반의 운영체제(ex. [[OS X]], BSD, Solaris 등)라면 어쨌든 먹힌다고 생각하면 된다.] 터미널이나 관리자 계정을 따낸 후 이 명령어를 친다면... '''당신의 하드가 공장에서 갓 나온 따끈따끈한 상태가 될 것이다.''' 거기다가 로우 레벨 포맷까지 먹여주면, 그 하드는 답이 없어진다.[* 요즘 하드는 LLF(Low-Level Format)을 거부하기 때문에 '''복구'''는 가능하지만, 일반 가정 레벨에선 어림도 없는 소리다. 로우 레벨 포맷이 시전되었다면, 묵념을 표하자. --근데 하드가 거부해도 덮어쓰기 몇번 하면 끝난다.--] 그러나 최신 [[OS X]]는 [[루트리스]]라는 이상한걸 들고 나와서 전부 삭제까진 면하게 되었다(...) == 설명 == 유닉스의 rm(remove) 명령어는 파일을 삭제하는 명령어이다. 위의 짤에 있는 sudo('''s'''ubstitute '''u'''ser '''do''')~~슈퍼 유저 두 아닌가?~~는 관리자의 권한으로 실행한다는 말이며, 뒤에 -rf는 옵션으로 -r({{{--recursive}}}, 재귀) 하위 디렉토리 및 파일을 하나하나 깔끔하게 다 지워버리고 마지막엔 자기 디렉토리로 돌아와 자기 자신까지 삭제하며 -f[* -r -f 이런식으로 사용해도 된다. 취향에 맞게(?) 골라 쓰자.~~아니 쓰긴 뭘 써~~]{{{(--force)}}}는 읽기전용과 같이 일반적으로 삭제를 방지하도록 되어 있는 옵션을 무시하며, /는 리눅스 파일 시스템의 최상위 디렉토리이다. 즉 윈도에서의 '''format c:'''수준 이상[* 윈도우는 마운트한 장치는 C가 아닌 다른 D같은 곳에 마운트하지만 유닉스 계열에서는 / 아래의 하위 폴더에 마운트한다.](……). 물론 NT 계열 윈도우에서는 명령이 제대로 동작한 경우 시스템 드라이브라는 오류를 뱉어내며 안 먹히지만[* 사실 이것도 나중에 추가된 것이다. [[도스]]/윈도우 9x 시절에는 그런 오류 없이 싹 지워버렸다.], 유닉스의 경우는 '''마운트하고 있던 모든 장치의 내용까지 날려버린다.''' 단 윈도우의 format c:와 유닉스/리눅스의 rm -rf는 개념이 다르다. rm은 삭제 명령어가 맞지만, format c:는 c 드라이브를 포맷하라는 명령어이지 삭제 명령이 아니다. 포맷 과정에서 삭제가 이루어지기에 결과가 비슷해지는 것이다. 윈도우 커맨드 라인에서는 del /f /s /q c: 또는 [[ \cmd /c rd /s /q c:\\ |rd /s /q c:]] 가 이와 비슷하다. 여기서 /s(remove '''S'''ubdirectories)는 rm의 -r('''R'''ecursive) 와 같이 하위의 폴더/파일을 모두 지우고, /q('''Q'''uiet)는 사용자에게 묻지~~도 따지지도~~ 않고 지운다.[* 유닉스 계열 명령어는 확인 절차를 기본적으로 안 하도록 되어 있어 해당 명령어가 없다. 확인 절차는 -i, 혹은 -I(3개 파일 이상일 경우 확인)로 켤 수 있다.] /f는 rm의 -f와 같다. 하지만 이 명령어는 C 드라이브 외의 다른 드라이브는 건드리지 않는다. DOS나 윈도우 95, 98, ME에서는 저 옵션 스위치가 없기 때문에 del이나 rd 명령어로 완전삭제가 불가능하다. == 악마의 힘 == 보통 터미널상에서 디렉토리를 삭제할때 rm -rf를 사용한다. 예를 들어 rm -rf /home/usr/download/[[incoming]] 같이... 그런데 이 과정에서 까딱 잘못 치면 묻지도 따지지도 않고 안의 내용을 지워주면서 개념도 같이 포맷해준다(…) 잘못 사용하는 대표적인 예로는.. {{{cd /home/user/test rm -rf ./* }}}[* 현재 디랙토리(./=/test)의 모든 내용(=*)을 지운다는 의미이다.] 이런 식으로 치려다가 삐끗해서 rm -rf /*을 치면.. '''정말 다 날아간다.''' 하드뿐만 아니라 EFI 이미지까지 날아가는, 완전 말 그대로 머리속까지 싸그리 [[포맷]]. 그래서 요즘 EFI시스템에서는 시스템을 재설치 하기 위해서라도 rm -rf / 를 하면 안 된다고 한다. /sys/firmware/efi/efivars/에 있는 EFI variable이 날아가 버려서 데이터 뿐만 아니라 '''보드가 죽어 버릴수도 있다고 한다. ''' [[https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#Mount_efivarfs|#]] [[https://twitter.com/123jimin/status/694027257363320832|##]][[https://archive.is/ZXEJm|두번째의 아카이브 복제본]][* 쿠분투 32비트+바이오스에서 실행하니~~왜 해?~~부트 파일 문제로 정체불명의 셸이 등장하였다. 그런데 흔한 명령어는 다 안먹힌다.][* EFI SHELL이 나온다. 여기선 유닉스 명령어가 안통하니 복구USB를 꼽고 EXIT 을 입력하자.] --그러니 필요없으면 sudo를 자제하자.-- 사족으로 이런 실수를 방지하기 위하여 {{{rm -rf ./*}}}보다는 {{{rm -rf *}}}가 선호된다. 의미는 똑같으면서 위와 같은 참사가 일어나지 않는다. ~~/ 에서 실행하면 똑같다...~~ == 트리비아 == 현재는 기본으로 '''{{{"--preserve-root"}}}'''스위치가 rm에 박혀있어, 저 짓을 해도 안먹히지만 여전히 먹히는 놈이 있으니 주의할 것. 게다가 앞에 sudo가 붙고[* 아니면 [[root]]계정] 스위치로 '''{{{"--no-preserve-root"}}}'''가 붙으면 [[끔살]] 확정이다. 정 저걸 다 적기 싫다면 rm -rf /* 라고 입력해주면 된다. 최고의 조합은 '''{{{"sudo rm --no-preserve-root -rf /* "}}}'''~~망했어요~~ [[macOS]]나 [[FreeBSD]][* [[https://www.freebsd.org/cgi/man.cgi?query=rm&apropos=0&sektion=0&manpath=FreeBSD+10.3-RELEASE&arch=default&format=html]] ]의 경우 rm에서 '''{{{"--no-preserve-root"}}}'''를 지원하지 않으니 꼭 주의할 것! 저런 파괴성으로 인해서 보통 농담으로 쓰이기도 한다...~~[[뉴스데스크 게임 폭력성 실험 사건|리눅스 터미널에 rm -rf /를 쳐봤습니다. 그리고 순간적인 상황 변화를 받아들이지 못하고 곳곳에서 욕설이...]]~~ [[http://todayhumor.com/?humorbest_835182|이걸로 러시안 룰렛도 해볼 수 있다.]] 물론 [[http://todayhumor.com/?humorbest_835778|결과는 참담하니]] 따라하지 말자. ~~회사에서 서버 관리자 권한 얻고 실행했다간 LTE급으로 짤려볼 수 있다~~ 유튜브 등에선 가상머신에 올린 리눅스나 macOS를 rm -rf / 하는 영상이 올라와 있다. 가상머신이니 망정이니 실제 머신이었으면... [* 치고 바로 꺼도 시스템이 먹통이 되어버린다.... 커널이고 뭐고 묻지도 따지지도 않고 싸그리 날려버리기 때문.] 유닉스 기반의 프로그램으로 작업하던 [[픽사]]의 [[토이스토리 시리즈#s-2.2|토이스토리 2]]가 이 명령어 때문에 완전히 날아갈 뻔했다. 다행히 자택근무를 하던 직원의 컴퓨터에 사본이 저장되어 있어 완전히 처음부터 시작하는건 면했다고...([[https://www.youtube.com/watch?v=8dhp_20j0Ys|#]])[* 다만 영상에 나온 명령어는 rm * 이다.] 2015년 1월 리눅스용 스팀에서 스팀의 유저 폴더를 다른 곳으로 이동시키고 클라이언트를 실행시킬 경우 매개 변수가 지정되지 않아 유저 파일을 지우는 [[버그]]가 발생했다. 다행히 시스템 파일은 손상이 없다지만, 유저쪽 파일은 GG. 2015년 애플에서 새롭게 도입한 [[루트리스]]는 시스템에서 중요하다 싶은 폴더를 rm -rf 쳐도 못 삭제하게 바꾸었다(...) --리눅스에 도입이 시급합니다-- 참고로 안드로이드에서 루트 계정에 접근하기 어렵게 만든 이유이기도 하다. 일반 휴대폰을 사용하는 사람들이 아무 프로그램이나 다운받아 실행했다가는... == 자매품 == [include(틀:사고위험행위)] 아래 적는 명령어는 실수로 입력할 일은 없고 말 그대로 [[사보타주]] 전용 명령어라 할 수 있다. 하지만 하드디스크를 [[디가우저]]를 사용하지 않고 확실히 파괴하는 수단이기도 해서 일부 명령은 데이터 소거 목적으로 실제로 쓰이기도 한다. * {{{dd if=/dev/zero of=/dev/sda}}} 또는 {{{cat /dev/zero > /dev/sda}}} [[하드디스크]]를 제로필 포맷하는 명령어. {{{/dev/sda}}}는 보통 주 하드디스크의 장치 이름이다.[* SSD, 하드 등 여러 개를 달아놓으면 {{{sdb}}}, {{{sdc}}}, ... 순으로 이름이 매겨진다. {{{sda0}}}, {{{sda1}}} 등은 '''파티션'''을 가리키지, '''저장장치'''를 가리키지 않는다.] 다행히 이놈은 마운트한 다른 장치까지 날려먹진 않는다. 가끔 플래시 메모리의 경우와 같이 {{{/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|{{{ntfs}}}]]나 {{{mkfs.}}}[[HFS#s-2|{{{hfsplus}}}]] 같은 것도 가능. 리눅스를 젠투나 LFS같은 걸로 깔아본 사람은 이 명령을 한 번은 입력해 봤을 것이다. * {{{find / -type f -exec shred {} \; }}} {{{rm}}}은 삭제 요청이 들어오면 inode를 끊기만 하기 떄문에 복구할 수 있고 여타 삭제 명령어들은 데이터를 덮어쓰기만 한다. 하드디스크의 특성상 데이터를 덮어썼더라도 미세 자기가 남아 이를 이용하면 복구할 수 있는 경우가 많은데, {{{shred}}}를 이용하면 여러번에 걸쳐 썼다 지웠다 하기 때문에 잔류자기를 이용한 복구방법은 사실상 불가능하다. 루트 디렉토리 아래 모든 파일을 갈아버리는 지옥의 명령어. ~~[[증거인멸죄|증거인멸]]용으론 더할나위없이 유용하다~~ * [[https://qntm.org/suicide|자살 리눅스]] 실수 없이 사용하면 아무 문제 없지만 터미널에서 어떤 실수 한번만 해도 명령이 바로 {{{rm -rf /}}}로 변환되서 작동한다. 위의 러시안 룰렛은 거의 100% 확인사살이지만 자살 리눅스는 그나마 생존할 가능성이 있기 때문에 담력시험이 따로 없다. * [[윈도우]] 버전으로는 [[cmd /c rd /s /q c:\\]]가 있다. * 관련 유머로 [[https://uncyclopedia.kr/wiki/I_hacked_127.0.0.1|127.0.0.1을 해킹한 사람]] 이야기가 있다. [각주] [[분류:유닉스]] 이 문서에서 사용한 틀: 틀:사고위험행위 (원본 보기) 틀:집단연구 (원본 보기) Rm -rf / 문서로 돌아갑니다.