'rm -rf /'명령으로 얼마나 멀리 갈 수 있습니까?


200

나는 당신이 실행하면 시스템이 실제로 얼마나 멀리 갈지 궁금해했다 rm -rf /. OS가 스스로 지울 수 있을지 의심됩니다 (?).

보너스 질문 : 명령이 실행 된 후 rm스스로 제거 되었습니까?

업데이트 : VirtualBox를 사용하여 몇 가지 주요 유닉스 배포판에서 이것을 테스트했으며 대답은 정확히 무슨 일이 일어나는지 설명합니다. 올바른 매개 변수가 제공되면 rm은 디스크의 모든 실제 데이터 비트를 제거합니다. 그러나 GNU 이외의 rm 버전을 사용할 때 몇 가지 문제가 발생했습니다. 예를 들어, BusyBox에는 자체 버전이 있으며 가능한 한 많이 제거 할 수는 없다고 생각합니다.

이 질문은 금주슈퍼 사용자 질문입니다 . 자세한 내용은
2011 년 7 월 7 일 블로그 항목 을 읽 거나 자신의주의 질문을 제출하십시오 .


8
이 질문을 한 것이 재밌습니다. 방금 다른 포럼에서 다른 rm -f 질문에 대답하고 있었고 얼마 전에 읽은 기사를 기억하기 시작했습니다. 다행히이 같은 시간을 위해 그것을 저장 : 고전적인 유닉스 공포 이야기를 그것은 ... 나는 그것을 아주 잘 쓰여진 기사라고 생각 갈거야 얼마나 멀리보고 흥미와 일반적으로 좋은 읽기는 사실 외에!
akseli

3
방금 sudo rm -rf /tinycore / microcore Linux를 사용해 보았으며 OS가 여러 디렉토리 (/ sys 및 기타)가 삭제되지 않도록 보호하는 것 같습니다.
n0pe

47
rm -f /bin/rm한 번 시도 했습니다. 불행히도, 그것은 효과가 있었고, 다음 시간 동안 rmGNU coreutils에서 올바른 버전을 다시 얻었습니다 .
squircle

17
잠깐만 요, 시도합니다 ...
Martijn Courteaux

38
나는 항상 사과 가게에서 이렇게
eggie5

답변:


188

당신이있는 경우 rm(이 정기적으로 리눅스 배포판은 가장 아마 경우) GNU의로 coreutils에서, rm -rf /내장 보호 기능에 의해 거부됩니다 (맨 페이지와 위키 백과에 따르면 것을 시도하지 않은).

으로이 보호를 무시할 수 있습니다 --no-preserve-root. rm그런 다음 모든 단일 파일을 제거하려고 시도한 후 중지하지 않고 가능한 모든 것을 제거합니다. 물론 /procand 같은 가상 파일 시스템을 제거 /sys하지는 않지만 관련이 없습니다. 디스크의 모든 것을 제거합니다.

명령이 완료되면 OS를 포함하여 디스크가 비워집니다. 커널 및 현재 프로세스는 메모리에서 계속 실행되지만 일부 프로세스는 일부 파일에 액세스하지 못하므로 죽습니다. 다음에 OS가 부팅되지 않습니다.


67
정확히 내가 찾던 것. 이제이 힘을 사용하여 세상을 지배하십시오.
n0pe

34
--no-preserve-root일반적으로 언급되지 않기 때문에 +1 .
Matěj G.

22
@MaxMackie, 해커들은 이것이 사용자에게 할 수있는 가장 유용한 일 이라는 것을 매우 빨리 발견했습니다 . 현금 확보에 사용될 수있는 모든 데이터를 삭제하고 해커가 시스템을 더 이상 악용하지 못하게합니다. 곤충을 가진 고양이처럼, 당신은 그것을 죽이고 싶지 않고, 재미 있기 때문에 잠시 동안 놀고 싶어합니다.
zzzzBov

5
OP의 다른 질문에 대답하기 위해 예 rm은 스스로 제거합니다. 실행중인 인스턴스가있는 동안에도 실행 파일을 수정하거나 삭제할 수 있습니다. 또한 계속 실행되며 변경의 영향을받지 않습니다.
thomasrutter

3
"chmod -R user : user *"를 /에 언급하고 싶습니다. 재귀 적이며 비용이 많이 드는 실수이기도합니다. 나는 그것을 한 번 해냈고, 중단 할 수있을 때까지 / home을 반쯤 마쳤다. / bin / boot / etc / dev가 소유되었습니다. 다행히 다음 몇 시간을 수동으로 사용하고 참조 시스템에서 소유권을 재설정하는 동안 서버는 계속 실행되었습니다. 그러나 그 후에는 아무도 su 또는 sudo를 사용할 수 없습니다. 결국 / bin / su에 더 이상 setuid 비트가 설정되어 있지 않음을 발견했습니다. chowning / bin / su는 setuid 비트를 재설정합니다.
앤디 리 로빈슨


22

VM을 설정하고 재미를 시도?

꽤 멀리 갈 것입니다 ... GUI를 사용하는 경우 더 눈에 띄게 저하되는 것을 알면 재미있을 것입니다. (메뉴의 아이콘은 로딩을 중지합니다.)

당신이 그것을 놓아두면, OS는 당신이 약간의 데이터를 쉽게 되 찾을 수 있지만 복구를 넘어선 것입니다.

어느 쪽이든, 당신은 OS의 재설치를 원할 것입니다.


7
VM에서 시도조차하지 못했습니다. 지금 시도하려고합니다! 오우 재밌다.
n0pe

40
실수로 호스트 시스템의 터미널에 명령을 씁니다
slhck

1
내가 게시 한 기사를 확인하십시오. "클래식 유닉스 공포 이야기!"
akseli

1
나는 지금 일하고 있으며 인기있는 배포판 (ubuntu / slack / suse / fedora)의 전체 설치를 할 시간이 없습니다. 다른 사람이 VM 디스크 파일을 복제하여 우리를 위해 시도 할 수 있다면 정말 좋을 것입니다.
n0pe

2
Amazon EC2를 사용하면 이미 Linux가 설치되어있는 AMI 중 하나를 신속하게 시작하여 즉시 종료해야합니다.
David d C e Freitas

11

http://bellard.org/jslinux/ 에서 시도하면 다음과 같은 결과 가 나타납니다.

rm : '/ dev / pts'를
제거 할 수 없음 : 장치 또는 리소스 사용 중 rm : '/ dev'를 제거 할 수 없음 : 디렉토리가 비어 있지 않음
rm : '/ proc / swaps'를 제거 할 수 없음 : 작업이 허용되지 않음
rm : can '/ proc / kallsyms'를 제거하지 마십시오 : 작업이 허용되지 않음
rm : '/ proc / dma'를 제거 할 수 없습니다 : 작업이 허용되지 않습니다

SNIP 881 항목

rm : '/ proc / 149 / oom_adj'를
제거 할 수 없음 : 권한이 거부되었습니다 rm : '/ proc / 149'를 제거 할 수 없습니다 : 작업이 허용되지 않습니다.
rm : '/ proc'를 제거 할 수 없습니다
. '/ tmp'를 제거 할 수 없음 : 장치 또는 자원 사용 중
rm : '/'를 제거 할 수 없음 : 장치 또는 자원 사용 중


1
그래, 그 오류 / 경고도 나옵니다. 이 표준이 당신의 생각입니까?
n0pe

5
/ proc, / sys, 때로는 / dev 및 모든 마운트 지점은 운영 체제의 속성이므로 삭제할 수 없습니다.
pjc50

1
@ pcj50과 마찬가지로 하드 디스크의 파일은 문자 그대로 파일이 아니므로 "삭제"하는 것은 의미가 없습니다.
CarlF

7

나는 이런 alt.sysadmin.recovery일이 없었을 때 요일 에 다시 씹어졌고 /proc, /dev비정상적인 inode에 대한 항목을 포함하는 정규 디렉토리 일뿐입니다 ...

...하지만 Unix의 일부 변형 (내 기억은 HP-UX이지만 완전히 잘못 될 수 있음) 에서 실행중인 프로그램의 마지막 디렉토리 항목을 제거 할 수 없습니다 . (공유 라이브러리? 그게 뭐야?)

이러한 시스템에서 경우 유지 관리 모드에서 최대 하나의 시작 (심지어 그래서 아무것도 실행되지 않았다하지만 쉘을, init그리고 2 차 파일 시스템이 탑재되지 않았다)와 않았다 exec /bin/rm -rf /, 당신은 완전히 비어 루트 파일 시스템으로 남아있을 것이다 제외/bin/bin/rm것 생존

무서운 악마 수도원의 수십 명이 이것을 적합하고 적절하다고 생각했습니다.


4

rm -rf / POSIX 표준을 위반한다고 제안 된 최근 구현에서는 허용되지 않아야합니다.

" rm -rf /"오라클 블로그 보호

어쨌든 우리는 사양을 수정했으며 Solaris 10에는 (빌드 36부터) / usr / bin / rm 버전이 있습니다 (/ bin은 Solaris의 / usr / bin에 대한 심볼릭 링크) 및 / usr / xpg4 / bin / rm은 다음과 같이 동작합니다 :

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

2
""/ "을 재귀 적으로 제거하려고하면 궁극적으로".. "와". "를 제거하려고 시도하며, 우리가하는 모든 일은 rm이이를 경험적으로 미리 결정하는 것입니다. ! "-어, 디렉토리를 제거 하는 것을 허용하지 않습니까? 실제 사양은 .. 및. 실제 명령 행 인수에서, "최종적으로 제거하려고 시도하는 것"에 대해 아무 말도하지 않습니다
Random832

1
디렉토리를 제거하지 못하는 이유는 무엇입니까? 루트 디렉토리는 여기서 유일한 관심사이며, 제거하면 분명히 "."가 제거됩니다. 그리고 현재 디렉토리가 무엇이든 ".." 표준 해석에서는 상식이 금지되지 않습니다.
jlliagre

1
그 주장의 선은 순수한 천재입니다.
Nate CK

표준 은 인수에 문자열 "."이 있으면 rm을 계속할 수 없도록 지정합니다 . 또는 기본 이름 구성 요소로 ".." 에없는 /foo/..경우에도 삭제할 수 없습니다 /foo. 현재 디렉토리 (예 :) 또는 현재 디렉토리의 부모 를 제거 할 수 없도록 지정 하지 않습니다rm -r `pwd` .
Random832

2
사실, 나는 그 진술을 잘못 이해했으며 당신은 정확합니다. 표준 사용자는 더 똑똑한 행동을 표준 준수로 받아 들였기를 바랍니다. 모든 파일 시스템이 아닌 경우 큰 부품을 제거하면 OS가 표준에 맞지 않게됩니다.
jlliagre

3

내가 다른 사람이 보지 못했던 한 가지 점 : 현재 열려있는 파일 (예 : rm 자체)은 삭제 된 경우에도 실제로 닫힐 때까지 드라이브에서 실제로 사라지지 않습니다.


메모리에 올바르게로드 되었기 때문에 맞습니까?
n0pe

그것이 안전한지 확실하지 않습니다. 커널은 제거 된 파일을 메모리에로드하고 디스크에서 즉시 제거하고 파일이 열릴 때까지 (예 : rm이 실행될 때까지)이 메모리 사본을 유지할 수 있습니다.
Ambroz Bizjak

나는 추측하지 않습니다. 프로그램이 실행 중이면 삭제해도 최소한 Linux 상자에서는 제거되지 않습니다. (내가 몇 년 동안 이것을 테스트하지
않았다는 것을 명심하십시오

4
rm FS에서 자신을 제거 - 프로그램을 완전히 메모리가 아닌로드 파일
워렌

4
@MaxMackie : 메모리에로드 된 것이 아니라 열린 파일 참조가 하드 링크와 동일한 성능을 갖기 때문에 (즉, 파일에 하나 이상의 하드 링크가있는 경우 디스크에서 삭제되지 않음).
Lie Ryan

1

터미널에서 루트로 기록한 서버에서 한 번 시도해 본 결과 거의 모든 것을 잃게됩니다. 지워지지 않을 유일한 것은 OS에 필수적인 프로세스 일뿐입니다.


12
"운영 체제에 필수적인 프로세스 만 삭제하지 않았습니다"-아, 걱정하지 마십시오. Windows와 달리 Linux는 파일이 OS에 중요 하고 사용 중이라도 행복하게 아무것도 지 웁니다 . /boot, /sbin, /etc, /bin, /vmlinuz? 밤, 사라졌어 그없는 행운의 부팅은 - 사실, 행운이 일을 아무 것도 삭제가 완료되면 전혀.
Piskvor

삭제되지 않은 파일이 있다는 것을 기억하면 4 시간 이상 내 리눅스를 실행할 수 있습니다. 그러나 여전히 chmod 777 / * -fR;)을 수행하는 것과 같이 어떤 일이 발생하는지 아는 것이 좋습니다.
Anarko_Bizounours

3
"chmod 777 / * -fR"-시스템을 매우 안전하지는 않지만 매우 사용자 친화적으로 만들어야합니다.
바트 반 Heukelom

1
@BartvanHeukelom, 일부 도구는 빠른 자체 테스트를 수행하거나 시스템에서 적절한 소유권과 권한을 테스트하여 잘못 구성된 경우에는 행동을 거부합니다.
킬러 미스트

1
chmod -fR 777 /setuid 및 setgid 비트를 해제하기 때문에 유해합니다.
G-Man

1

당신이 얻을 수있는 거리는 기본적으로 특정 유닉스 / 리눅스 배포판에 달려 있습니다.

그러나 기본 질문에 대답하기 위해 yes- rm명령은 다른 표준 명령 /bin및 다른 폴더 와 함께 제거됩니다 .

다음은 Linux를 사용하여 Linux Ubuntu 15.04에서 수행 한 간단한 테스트입니다.

  1. 다음을 통해 가상 머신을 초기화하십시오 vagrant.

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
    
  2. 그런 다음 표준 방식으로 모든 파일을 제거하려고하면 다음을 수행 할 수 없습니다.

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -fr /
    rm: it is dangerous to operate recursively on '/'
    rm: use --no-preserve-root to override this failsafe
    
  3. 시도해 봅시다 --no-preserve-root. 항상 가상 머신에 로그인했는지 확인하고 (따라서 vagrant@vagrant-ubuntu-vivid-64:~$) 실행 한 다음 (집에서 시도하지 마십시오) :

    vagrant@vagrant-ubuntu-vivid-64:~$ sudo rm -vfr --no-preserve-root /
    removed directory: '/lost+found'
    removed directory: '/opt'
    removed '/bin/nc'
    removed '/bin/less'
    removed '/bin/wdctl'
    removed '/bin/nano'
    ...
    removed '/bin/rmdir'
    removed '/bin/sh'
    removed '/bin/rm'
    ...
    removed directory: '/bin'
    removed directory: '/usr/games'
    removed '/usr/bin/byobu-launcher-install'
    removed '/usr/bin/ipcmk'
    removed '/usr/bin/sum'
    removed directory: '/usr/bin'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9.2'
    removed '/usr/lib/gcc/x86_64-linux-gnu/5.0.1'
    removed directory: '/usr/lib/gcc/x86_64-linux-gnu/5'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libquadmath.so'
    removed '/usr/lib/gcc/x86_64-linux-gnu/4.9/libgomp.so'
    ...
    removed directory: '/run/initramfs'
    removed directory: '/media'
    rm: cannot remove '/proc/fb': Operation not permitted
    rm: cannot remove '/proc/fs/ext4/sda1/options': Operation not permitted
    ...
    removed '/vmlinuz'
    removed '/boot/config-3.19.0-23-generic'
    removed '/boot/grub/grubenv'
    ...
    removed directory: '/boot'
    removed '/lib64/ld-linux-x86-64.so.2'
    rm: cannot remove '/dev/hugepages': Device or resource busy
    rm: cannot remove '/dev/mqueue': Device or resource busy
    rm: cannot remove '/dev/shm': Device or resource busy
    removed '/dev/vcsa7'
    ...
    removed '/dev/mem'
    removed '/dev/rfkill'
    removed '/dev/vga_arbiter'
    ...
    rm: cannot remove '/sys/fs/ecryptfs/version': Operation not permitted
    removed directory: '/etc'
    removed directory: '/mnt'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_provision'
    removed '/vagrant/.vagrant/machines/default/virtualbox/action_set_name'
    removed '/vagrant/.vagrant/machines/default/virtualbox/creator_uid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/id'
    removed '/vagrant/.vagrant/machines/default/virtualbox/index_uuid'
    removed '/vagrant/.vagrant/machines/default/virtualbox/private_key'
    removed '/vagrant/.vagrant/machines/default/virtualbox/synced_folders'
    removed directory: '/vagrant/.vagrant/machines/default/virtualbox'
    removed directory: '/vagrant/.vagrant/machines/default'
    removed directory: '/vagrant/.vagrant/machines'
    removed directory: '/vagrant/.vagrant'
    removed '/vagrant/Vagrantfile'
    rm: cannot remove '/vagrant': Device or resource busy
    

    그 후 아무 일도 일어나지 않은 것처럼 쉘 프롬프트로 돌아 오지만 내장 및 몇 개를 제외하고는 더 이상 명령을 실행할 수 없으므로 kill작업을 끝내고 세션을 종료 할 수 있습니다.)

    예를 들면 다음과 같습니다.

    $ rm
    rm: command not found
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    $ which kill
    -bash: /usr/bin/which: No such file or directory
    $ kill -9 $$
    Connection to 127.0.0.1 closed.
    

그래서 꽤 모든 것을 포함 제거 rm, ls다른 모든 명령을,하지만 여전히 당신은 로그인 한 것입니다. 거기에서 같은 일부 장치를 제거되지 않은 일부 특수 폴더입니다 /dev, /proc또는 /sys일반 디렉토리 / 파일이 아닌되어 있지만, 처리하는 인터페이스와 커널 데이터를 제공하는 가상 파일 시스템입니다.

Vagrant 또는 Linux가없는 경우 일부 JavaScript Linux x86 에뮬레이터 를 사용할 수 있습니다 .

이러한 재해로부터 복구 할 수있는 가능성에 관심이있는 경우 다음을 확인하십시오.

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