Miért jelentkezett a ": () {: |: &} ;:" rendszernek olyan rosszul, hogy újraindítottam?

274
  

VESZÉLY !

     

Ne futtassa ezt a parancsot a "tesztelésére", hacsak nem készen állsz a rendszer összeomlására és / vagy erőre való újraindítására.

A virtuális fiókomban 12.04-ben futtam, próbáltam összeállítani egy alkalmazást, és várakozás közben véletlenül egy olyan fórumon voltam, ahol egy megjegyzés azt mondta:

  

Próbálja ki a:(){ :|: & };:
kifejezést   Szórakozás is, és nincs szüksége gyökérre.

Gondolkodás nélkül a gnome terminálomban futottam. A 12.04-et (a Virtualbox-ban) elrontotta olyan rosszul, le kellett állítanom.

A kérdésem az, hogy mit csinál ez a parancs?

:(){ :|: & };:
    
készlet blade19899 04.07.2012 13:29
forrás

4 válasz

351

Ez villás bomba .

:() azt jelenti, hogy egy:

nevű függvényt definiálunk

{:|: &} azt jelenti, hogy futtasd a: függvényt és elküldd a kimenetet a: függvényre, és futtasd a háttérben.

A; egy parancskiválasztó, mint&&.

: először futtatja a függvényt.

Lényegében olyan függvényt hoz létre, amely kétszer hívja meg minden hívását, és nincs módja megszüntetni magát. Mindig megduplázódik, amíg el nem fogy a rendszer erőforrásai.

A Virtualbox futása meglehetősen ésszerű volt, különben újra kellett indítanod a számítógépedet.

    
válasz adott SuperMatt 04.07.2012 13:34
forrás
164

Ez egy úgynevezett villás bomba , amelyet héjban hajtanak végre.

a wikipediól:

:(){ :|:& };:
\_/| |||| ||\- ... 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:
    
válasz adott Michał Šrajer 04.07.2012 13:35
forrás
71

Ez a parancs egy jól ismert változata a villabombának

A számítógépet a memória megteltedésével véget érve véget ér. Vannak olyan óvintézkedések is, amelyekkel ellene is alkalmazható:

  

A Unix típusú rendszerek általában egy folyamatkorlátot tartalmaznak, amelyet egy ulimit shell parancs vagy annak utódja, a setrlimit vezérel. A Linux kernelek egy folyamat RLIMIT_NPROC rlimit ("erőforrás limitje") beállítását és érvényesítését szolgálják. Ha egy folyamat megpróbálja végrehajtani a villát, és a folyamat tulajdonosa, aki már rendelkezikRLIMIT_NPROC folyamattal, akkor a villa meghibásodik. Ezenkívül Linux vagy * BSD esetén apam_limits config fájl/etc/security/limits.conf ugyanúgy szerkeszthető. Azonban nem minden Linux terjesztés van apam_limits modul alapértelmezés szerint telepítve.

    
válasz adott Nemo 04.07.2012 13:37
forrás
18

A ezt :(){ :|: & };: nevezik

  

Forkbomb egyfajta költői vírus létrehozója

     

... A ravasz kis program azt parancsolja, hogy több másolatot készítsen   maga láncreakciót indít, és így gyorsan kimerül   rendszer erőforrásai ...

Ezért javasoljuk, hogy ne futtasson ilyet, mert károsíthatja a hardvert, mivel a hurok végrehajtását okozza, a laptop könnyedén fűthet.

Egy másik link a képernyőképekkel magyarázható itt .

    
válasz adott atenz 04.07.2012 13:35
forrás