Neden sistemim çok kötü geçiyor? "() {: |: &} ;:" komutu yeniden başlatıldı mı?

272
  

TEHLİKE !

     

Bir çarpışma için hazırlanmadığınız ve / veya sisteminizi yeniden başlatmaya başlamadığınız sürece bu komutu 'test etmek' için çalıştırmayın.

Bir uygulamayı derlemeye çalıştığımda 12.04 çalışan Virtualbox'taydım ve beklerken bir yorumun söylediği bir forumda şansa rastladım:

  

:(){ :|: & };: sürümünü deneyin
  Eğlenceli ve root'a da gerek yok.

Düşünmeden, onu gnome terminalimde çalıştırdım. 12.04 (Virtualbox) gecikmemde gecikme yaptı, kapatmam gerekti.

Sorum şu: Bu komut ne yapıyor?

:(){ :|: & };:
    
sordu blade19899 04.07.2012 13:29

4 cevap

344

Buna çatal bombası denir.

:() , : adlı bir işlevi tanımladığınız anlamına gelir

{:|: &} işlevi : işlevini çalıştırır ve çıkışını : işlevine yeniden gönderir ve bunu arka planda çalıştırır.

; , && gibi bir komut ayırıcıdır.

: işlevi ilk kez çalıştırıyor.

Esas olarak, her aramada iki kez çağrı yapan ve kendini sonlandırmak için herhangi bir yolu olmayan bir işlev oluşturuyorsunuz. Sistem kaynaklarınız tükenene kadar iki katına çıkar.

Virtualbox'ta çalışmak gerçekten mantıklıydı, aksi halde pc'nizi yeniden başlatmanız gerekecekti.

    
verilen cevap SuperMatt 04.07.2012 13:34
159

Bu, kabukta uygulanan çatal bombası olarak adlandırılır.

wikipedia'dan:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:
    
verilen cevap Michał Šrajer 04.07.2012 13:35
70

Bu komut, çatal bombasının bilinen bir sürümüdür.

Bir işlemin sonsuza kadar sürmesini sağlayarak bilgisayarınızın bellek yetersiz kalmasına neden olur. Buna karşı kullanabileceğiniz bazı güvenlik önlemleri de mevcut:

  

Unix tipi sistemlerin tipik olarak bir ulimit kabuk komutu veya onun halefi olan setrlimit tarafından kontrol edilen bir işlem sınırı vardır. Linux çekirdekleri bir işlemin RLIMIT_NPROC rlimitini ("kaynak sınırı") belirler ve uygular. Bir işlem bir çatalı yerine getirmeye çalışırsa ve bu işlemin sahibi olan kullanıcı zaten RLIMIT_NPROC işlemine sahipse, çatal başarısız olur. Ayrıca, Linux veya * BSD'de, pam_limits config dosyası /etc/security/limits.conf 'sini aynı etkiyi düzenleyebilir. Ancak, Linux'un tüm dağıtımları varsayılan olarak pam_limits modülüne sahip değildir.

    
verilen cevap Nemo 04.07.2012 13:37
18

bu :(){ :|: & };: çağrısına göre

  

Forkbomb bir tür şiirsel virüs yaratıcısıdır

     

... Sinsi küçük program, birden çok kopya yapmak için komut veriyor   bir zincir reaksiyonu ayarlayarak ve böylece çabuk yorucu   sistemin kaynakları ...

Bu yüzden bunu çalıştırmamanız tavsiye edilir, donanımda hasara neden olabilir, çünkü döngüsel olarak çalışmaya neden olur, dizüstü bilgisayarlarda kolayca ısınmaya neden olabilir.

Başka bir bağlantıda ekran görüntüleri açıklanmaktadır     

verilen cevap atenz 04.07.2012 13:35

Etiketlerdeki diğer soruları oku