Bir 'rm -rf /' komutuyla ne kadar uzağa gideceksin?


200

Eğer kaçarsan, sistemin gerçekte ne kadar alacağını sık sık merak ettim rm -rf /. İşletim sisteminin kendisini silebileceğinden şüpheliyim (?)

Bonus Soru : Komut yapıldıktan sonra rmkendini mi kaldıracak ?

Güncelleme: Bunu VirtualBox kullanarak birkaç ana unix dağıtımında test ettim ve cevaplar tam olarak ne olduğunu açıkladı. Doğru parametreler verilirse, rm diskteki her fiziksel veri parçasını kaldıracaktır. Ancak, GNU sürümünden başka bir rm sürümü kullanırken bazı sorunlarla karşılaştım. Mesela, BusyBox'un kendi versiyonunun olduğuna ve potansiyel olarak yapabildiğiniz kadar çıkarmanıza izin vermediğine inanıyorum.

Bu soru Haftanın Süper Kullanıcısı Sorusuydu . Daha fazla ayrıntı için
7 Temmuz 2011 blog girişini okuyun veya kendi Haftanızı Sorun.


8
Bu soruyu sormanız komik. Başka bir forumdaki başka bir rm -f sorusunu cevaplıyordum ve bir süre önce okuduğum bir makaleyi hatırlamaya başladım. Neyse ki böyle zamanlar için sakladım: klasik Unix korku hikayesi o ... ben çok iyi yazılmış makale olduğunu düşünüyorum gidersiniz ne kadar görmek ilginç ve genellikle iyi bir okuma olmasının yanı sıra!
akseli

3
Sadece sudo rm -rf /tinycore / microcore Linux üzerinde denedim ve işletim sistemi birkaç dizini (/ sys ve diğerleri) silinmekten koruyor gibi görünüyor.
n0pe

47
Bir rm -f /bin/rmkere denedim . Ne yazık ki, işe yaradı ve sonraki saatimi rmGNU coreutils'in doğru versiyonunu almak için harcadım .
squircle

17
Bir saniye bekleyin, deneyeceğim ...
Martijn Courteaux

38
Bunu her zaman apple mağazasında
yapıyorum

Yanıtlar:


188

Eğer rmGNU coreutils'lerinden (büyük olasılıkla normal bir Linux dağıtımıysa), rm -rf /yerleşik koruma tarafından reddedilecektir (manpage ve Wikipedia'ya göre bunu denemedim).

Bu korumayı geçersiz kılabilirsiniz --no-preserve-root. rmsonra her dosyayı çıkarmayı denedikten sonra durmadan mümkün olan her şeyi kaldıracaktır. Tabii ki /procve gibi sanal dosya sistemlerini kaldırmayacak /sys, ama bu alakasız - diskinizdeki her şeyi kaldıracak.

Komut bittikten sonra, işletim sistemi de dahil olmak üzere boş diskiniz silinir. Çekirdek ve mevcut işlemler bellekten çalışmaya devam eder, ancak birçok dosya ölür çünkü bir dosyaya erişemezler. İşletim sistemi bir dahaki sefere önyükleme yapamayacak.


67
Tam olarak aradığım şeydi. Şimdi bu gücü kullanmak için dünyayı ele geçirmek.
n0pe

34
Özellikle +1 --no-preserve-rootçünkü bu genellikle bahsedilmiyor.
Matěj G.

22
@MaxMackie, bilgisayar korsanlarının bunu bir kullanıcı için yapabilecekleri en az kullanışlı şey olarak bulduklarını belirtmeye değer . Nakit kazancı için kullanılabilecek tüm verileri yok eder ve bilgisayar korsanının makineden daha fazla yararlanmasını önler. Böcekli bir kedi gibi onu öldürmek istemezsin, sadece bir süre onunla oynamak istersin çünkü eğlencelidir.
zzzzBov

5
OP'nin diğer sorusuna cevap vermek için, evet, kendini kaldıracak. Çalışan bir örneği olsa bile bir yürütülebilir dosyayı değiştirmek veya silmek tamamen mümkündür. Çalışmaya devam edecek ve değişiklikten etkilenmeyecektir.
thomasrutter,

3
"Chmod -R user: user *" dan / 'de bahsetmek isterim, çünkü / ki bunun özyinelemeli ve masraflı bir yanılgısıdır. Bunu bir kez yaptım ve iptal edebildiğimde yarı yolda kaldı. / bin / boot / etc / dev aittir. Neyse ki, sonraki birkaç saatimi manuel olarak harcadığım ve referansları sıfırlayan mülkiyeti sıfırlarken sunucu çalışmaya devam etti. Ancak daha sonra başka hiç kimse su veya sudo kullanamaz. Sonunda / bin / su artık setuid biti ayarının bulunmadığını keşfetti. Gelecek için not alın: chowning / bin / su setuid bitini sıfırlar!
Andy Lee Robinson


22

Bir VM kurun ve eğlenmek için deneyin?

Oldukça ileri gidecek ... eğer bir gui kullanıyorsanız, olayların daha gözle görülür şekilde bozulduğunu farkederek eğlenebilirsiniz. (menülerdeki simgeler yüklemeyi durdurur vb.)

Gitmesine izin verirseniz, işletim sistemi geri kazanmanın ötesine geçecektir, ancak bazı verileri kolayca geri alabilirsiniz.

Her iki durumda da, işletim sistemini yeniden yüklemek isteyeceksiniz.


7
VM'de denemeyi bile düşünmedim. Şimdi deneyeceğim! ooo bu eğlenceli.
n0pe

40
Yanlışlıkla komutunu ana bilgisayarın terminaline yazar
slhck

1
Gönderdiğim makaleye göz atın. "Klasik Unix Korku Hikayesi!"
akseli

1
Şu an işteyim ve popüler bir dağıtımın (ubuntu / slack / suse / fedora) tam kurulumundan geçmek için zamanım yok. Birisi bir VM disk dosyasını klonlayıp bizim için deneyebilirse harika olurdu.
n0pe

2
Amazon EC2 ile, Linux yüklü olan AMI'lerinden birini ateşlemek ve ateş etmek çok hızlı olmalı ...
David d C e Freitas

11

Şey, http://bellard.org/jslinux/ adresinde denemek :

rm: '/ dev / pts' öğesini kaldıramıyor: Aygıt veya kaynak meşgul
rm: '/ dev' öğesini kaldıramıyor: Dizin boş değil
rm: '/ proc / swaps' dosyasını boş bırakamıyorum: İşleme izin verilmiyor
rm: can '/ proc / kallsyms' öğesini kaldırmayın: İşlem izin verilmiyor
rm: '/ proc / dma' işlemini kaldıramıyor: İşlem izin verilmez

SNIP 881 girişleri

rm: '/ proc / 149 / oom_adj' ifadesini kaldıramıyor: İzin reddedildi
rm: '/ proc / 149' ifadesini kaldıramıyor: İşleme izin verilmiyor
rm: '/ proc' ifadesini kaldıramıyor: Aygıt veya kaynak meşgul
rm: '/ tmp' öğesini kaldıramıyor: Cihaz veya kaynak meşgul
rm: '/' öğesini kaldıramıyor: Cihaz veya kaynak meşgul


1
Evet bu hataları / uyarıları da alıyorum. Sence bu standart mı?
n0pe

5
/ proc, / sys, bazen / dev ve bağlantı noktaları, işletim sisteminin özellikleridir ve silinemez.
pjc50

1
@ Pcj50 ile aynı zamanda, bunlar tam anlamıyla sabit diskteki dosyalar değildir, bu yüzden onları "silmek" anlamlı değildir.
CarlF

7

Bu konuda üzerinde çiğnendiğinde hatırlama alt.sysadmin.recoveryorada diye bir şey iken, vaktiyle arkasına /procve /devsıradışı düğüm bir grup girişlerini içeren sıradan bir dizin oldu ...

... ama, Unix bazı varyantlar (benim hatırlama, HP-UX, ama bu tamamen yanlış olabilir) üzerine, sen olabilir değil çalışan bir program için son dizin girişi kaldırmak. (Paylaşılan kütüphaneler? Bunlar nedir?)

Böyle sistemlerde, eğer bakım modunda bir tane başladı (hatta bu yüzden hiçbir şey koşuyordu ama kabuk, initve hiçbir ikincil dosya sistemleri monte edildi) ve did exec /bin/rm -rf /, tamamen boş kök dosya sistemi ile sol olur hariç o /binve /bin/rmolur hayatta.

Korkunç şeytan manastırının sakinleri bunun uygun ve uygun olduğunu düşündü.


4

rm -rf / POSIX standardını ihlal ettiği ileri sürülen uygulamalarda izin verilmemelidir:

rm -rf /Oracle blogunda " " koruma

Her neyse, sonunda, modifikasyonu değiştirdik ve Solaris 10'un (36 sürümünden beri) bir / usr / bin / rm sürümü var (/ bin, Solaris'te / usr / bin için bir sym-link) ve / usr / Bu şekilde davranan xpg4 / bin / rm:

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

2
"eğer bir kişi tekrar tekrar" / "kaldırmaya kalkarsa, sonunda nihayetinde" .. "ve". "yi kaldırmaya çalışacağını ve tüm yaptığımızın rm'nin bunu sezgisel olarak önceden belirlemesine izin verdiğine işaret etmek. Şaşırtıcı bir şekilde, bunu aldılar. ! "- er, o izin vermeme çıkarmadan olmaz herhangi bir dizin? Gerçek özellik sadece .. ve. Asıl komut satırı argümanlarında, "nihayetinde çıkarmaya çalıştığınız" hakkında hiçbir şey söylemez
Random832

1
Herhangi bir dizini kaldırmak neden izin vermiyor? Kök dizin burada endişe verici olan tek şeydir ve onu silmek açıkça "." ve "..", geçerli klasör ne olursa olsun. Standart yorumda sağduyu yasaktır.
jlliagre

1
Bu tartışma dizisi saf dahidir.
Nate CK,

Standart, "." Argümanına sahipse rm'nin devam etmesine izin verilmediğini belirtir . veya bazename bileşeni olarak "..". İçinde /foo/..olmasanız bile kaldıramazsınız /foo. O mu değil Geçerli dizini (örneğin kaldırmak için izin verilmez belirtmek rm -r `pwd`) veya geçerli dizinin üst.
Random832

2
Aslında, ifadeyi yanlış anladım ve haklısın. Umarım, standart adamlar daha akıllı davranışı standartla uyumlu olarak kabul etmişlerdir. Büyük dosyaların kaldırılması, tüm dosya sistemi değilse, işletim sistemini yine de standart dışı bir hale getirecektir.
jlliagre

3

Bir başkası tarafından görmediğim bir nokta: o anda açık olan dosyalar (örn. Rm'nin kendisi), silinmiş olsalar bile, sürücü kapatılıncaya kadar kaybolmazlar.


Bu doğru, çünkü hafızaya yüklenmişler değil mi?
n0pe

Bunun varsayılmasının güvenli olup olmadığından emin değilim; çekirdek çok iyi kaldırılmış dosyayı belleğe yükleyebilir ve hemen diskte kaldırabilir ve dosya açık olana kadar (örneğin rm çalışana kadar) bu bellekte saklayabilir.
Ambroz Bizjak

Ben spekülasyon yapmıyorum. Bir program çalışıyorsa, silmek onu en azından benim Linux kutularımda kaldırmaz. (Bunu birkaç yıl içinde test
etmedim mi?

4
rm olacak fs kendisini kaldırmak - Program tamamen bellekte değil yüklenir dosya
warren

4
@MaxMackie: belleğe yüklendikleri için değil, açık bir dosya başvurusu bir sabit bağlantıyla aynı güce sahip oldukları için (yani, bir dosya en az bir sabit bağlantı içeriyorsa, diskten silinmez).
Lie Ryan,

1

Bir kez denediğim için (beni sinirlendiren bir sunucuda), root olarak giriş yaptım, terminalde, neredeyse her şeyini kaybedeceksin. Silinmeyecek tek şey, işletim sistemi için gerekli olan süreç olacaktır.


12
"[silinmedi] yalnızca işletim sistemi için gerekli olan süreç" - ah, endişelenme. Windows'un aksine, Linux işletim sistemi açısından kritik ve kullanımda olsa bile Linux her şeyi mutlu bir şekilde silecektir . /boot, /sbin, /etc, /bin, /vmlinuz? Bam, gitti. Bunlar olmadan önyüklemede iyi şanslar - aslında, silme işlemi bittiğinde hiç bir şey yapmada iyi şanslar .
Piskvor

Hatırlarsam silinmemiş bir dosya vardı ve linux'umun 4 saatten fazla çalışmasına izin verdim. Ama yine de, ne olduğunu bilmek güzel, bir chmod 777 / * -fR;) yapmak gibi;)
Anarko_Bizounours

3
"chmod 777 / * -fR" - Kullanıcı dostu olsa da, sistemi çok güvensiz yapmalıdır.
Bart van Heukelom

1
@BartvanHeukelom, bazı araçlar hızlı bir kendi kendine test gerçekleştirecek veya sistem tarafından uygun mülkiyet ve izinler için test edilecek ve yanlış yapılandırılmışsa davranmayı reddetecektir.
killermist

1
chmod -fR 777 /Zararlıdır çünkü setuid ve setgid bitlerini kapatır.
G-Man

1

Ne kadar uzağa gidebiliyorsanız, temel olarak belirli Unix / Linux dağıtımlarına bağlıdır.

Ancak temel sorunuzu cevaplamak için, evet - rmkomut, bunun yanı sıra /bindiğer klasörlerde ve diğer klasörlerde de kaldırılacaktır .

İşte VM kullanarak Linux Ubuntu 15.04'te yaptığım basit bir test.

  1. Sanal makineyi şu şekilde başlat vagrant:

    vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
    
  2. Sonra tüm dosyaları standart yoldan kaldırmaya çalıştığınızda, size izin vermiyor:

    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. Öyleyse deneyelim --no-preserve-root. Sanal makineye giriş yaptığınızı her zaman iki kez kontrol edin (böylece sahip olursunuz vagrant@vagrant-ubuntu-vivid-64:~$), sonra çalıştırın (bunu evde denemeyin):

    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
    

    Ondan sonra hiçbir şey olmamış gibi kabuk istemine geri döner, ancak yerleşik birkaç taneden başka hiçbir komut killalamazsınız, böylece işinizi bitirebilir ve oturumunuzu öldürebilirsiniz :)

    Örneğin:

    $ 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.
    

Bu yüzden rm, lsve diğer tüm komutlar da dahil olmak üzere her şeyi kaldırdı , ancak hala oturum açtınız. Aralarından gibi bazı cihazlar kaldırılmadı bazı özel klasörler vardır /dev, /procya da /sysdüzenli dizinleri / dosyaları değillerdir, ancak işlemden geçirilmesi arayüzleri ve çekirdek veri sağlayan sözde dosya sistemi bulunuyor.

Vagrant veya Linux'unuz yoksa, bazı JavaScript Linux x86 emülatörleri ile oynayabilirsiniz .

Böyle bir felaketten kurtarma olanakları ile ilgileniyorsanız, şunları kontrol edin:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.