Warum hat der Befehl ": () {: |: &} ;:" mein System so stark verzögert, dass ich neu starten musste?

269
  

GEFAHR !

     

Führen Sie diesen Befehl nicht aus, um ihn zu 'testen', es sei denn, Sie sind auf einen Absturz vorbereitet und / oder erzwingen einen Neustart Ihres Systems.

Ich war in meiner Virtualbox mit 12.04 versuchen, eine App zu kompilieren, und während ich wartete, zufällig auf ein Forum, wo ein Kommentar sagte:

  

Versuchen Sie :(){ :|: & };:
  Spaß auch, und braucht keine Wurzel.

Ohne nachzudenken, habe ich es in meinem Gnome-Terminal ausgeführt. Es hat meinen 12.04 (in Virtualbox) so schlecht verzögert, dass ich ihn herunterfahren musste.

Meine Frage ist, was macht dieser Befehl?

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

4 Antworten

341

Das nennt man Gabelbombe .

:() bedeutet, dass Sie eine Funktion namens :

definieren

{:|: &} bedeutet, dass Sie die Funktion : ausführen und ihre Ausgabe erneut an die Funktion : senden und diese im Hintergrund ausführen.

Das ; ist ein Befehlstrennzeichen wie && .

: führt die Funktion das erste Mal aus.

Im Wesentlichen erstellen Sie eine Funktion, die sich bei jedem Aufruf zweimal aufruft und keine Möglichkeit hat, sich selbst zu beenden. Es wird sich weiter verdoppeln, bis Ihnen die Systemressourcen ausgehen.

In Virtualbox zu laufen war ziemlich vernünftig, sonst hättest du deinen PC neustarten müssen.

    
SuperMatt 04.07.2012, 13:34
158

Dies ist eine so genannte Gabelbombe , die in der Shell implementiert ist.

aus Wikipedia:

:(){ :|:& };:
\_/| |||| ||\- ... 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:
    
Michał Šrajer 04.07.2012 13:35
70

Dieser Befehl ist eine bekannte Version der Gabelbombe

Es führt dazu, dass auf Ihrem Computer nicht mehr genügend Arbeitsspeicher zur Verfügung steht, indem Sie einen Prozess unendlich weit verzweigen. Es gibt einige Sicherheitsvorkehrungen, die Sie auch dagegen anwenden können:

  

Unix-Typ-Systeme haben normalerweise ein Prozesslimit, das durch einen ulimit-Shell-Befehl oder seinen Nachfolger, setrlimit, gesteuert wird. Linux-Kernel setzen und erzwingen das Rlimit_NPROC-Limit ("Ressourcenlimit") eines Prozesses. Wenn ein Prozess versucht, eine Verzweigung auszuführen, und der Benutzer, dem dieser Prozess gehört, bereits RLIMIT_NPROC -Prozesse besitzt, schlägt die Verzweigung fehl. Außerdem kann man unter Linux oder * BSD die pam_limits config Datei /etc/security/limits.conf auf den gleichen Effekt bearbeiten. Allerdings haben nicht alle Linux-Distributionen das pam_limits -Modul standardmäßig installiert.

    
Nemo 04.07.2012 13:37
18

Laut heißt das :(){ :|: & };:

  

Forkbomb ist eine Art Poetic Virus Creator

     

... Das hinterhältige kleine Programm befiehlt es, mehrere Kopien davon zu machen   selbst, wodurch eine Kettenreaktion ausgelöst und somit schnell die   Systemressourcen ...

Es wird empfohlen, dies nicht zu tun, da dies zu Schäden an der Hardware führen kann, da es zu einer Ausführung in der Schleife führt und in Laptops leicht zu einer Erwärmung führen kann.

Ein weiterer Link erklärt durch Screenshots hier .

    
atenz 04.07.2012 13:35

Tags und Links