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


ACHTUNG!

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 :(){ :|: & };:
  Spaß auch und braucht keine Wurzel.

Ohne nachzudenken, ließ ich es in meinem Gnome-Terminal laufen. Es hat meinen 12.04 (in Virtualbox) so schlecht verzögert, dass ich ihn herunterfahren musste.

Meine Frage ist, was macht dieser Befehl?

:(){ :|: & };:

272
2017-07-04 11:29


Ursprung


verbunden Wie man Ubuntu vor Gabelbomben schützt - Sathya
Siehe auch einen alten Thread: ubuntuforums.org/showthread.php?t=1392511 - Paddy Landau
Verbunden: Wie funktioniert eine Gabelbombe? und Wo ist die Gabel () auf der Gabelbombe: () {: |: &}:? - terdon♦
mögliches Cross-Site-Duplikat von: stackoverflow.com/questions/515844/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
"Lag so schlecht" ist ziemlich optimistisch. - pstadler


Antworten:


Das nennt man a Gabelbombe.

:() bedeutet, dass Sie eine aufgerufene Funktion definieren :

{:|: &} bedeutet, dass Sie die Funktion ausführen : und sende seine Ausgabe an die : Funktion wieder und führen Sie das im Hintergrund.

Das ; ist ein Befehlstrenner, wie &&.

: Läuft die Funktion beim ersten Mal.

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 neu starten müssen.


345
2017-07-04 11:34



Diese Antwort scheint darauf hinzudeuten, dass das Neustarten der nur Zuflucht. Aber in der Tat kann diese Gabelbombe ohne Neustart getötet werden, und ich habe tatsächlich festgestellt, dass sie auf einigen Systemen sowieso nicht richtig funktioniert (weil ihr Spawn-Limit vernünftig gesetzt ist). - Konrad Rudolph
Eigentlich sollte das für eine vollständige Erklärung das wohl erwähnen ; ist ein Befehlstrennzeichen. Das { ... } Teil ist einfach der Inhalt der Funktion. - Michael Kjörling
@ MichaelKjörling +1 Ich habe die Syntax erst verstanden, als ich deine Kommentare berücksichtigt habe. - jumpnett
@SuperMatt Ich weiß nicht, ob diese Frage noch aktiv ist, aber ich wollte sowieso wissen, was das tut | und & machen. Ich verstehe, dass Sie die Funktion der Funktion zur Verfügung gestellt haben, aber ich wollte wissen, was diese beiden tun - Noober
@Noober wenn du dich noch fragst (wie bin ich in diesem schwarzen Loch der knappen und kryptischen Dokumentation, die Linux ist) weiß ich! | ist eine Pipe, die nach einem Befehl platziert wird, um diese Befehle als Eingabe an den folgenden Befehl zu senden. & ist ein Fork, der einen neuen Thread für den vorhergehenden Befehl erstellt und den aktuellen Thread verlässt, um weitere Befehle auszuführen - flurbius


Dies ist ein so genanntes Gabelbombe in der Shell implementiert.

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:

161
2017-07-04 11:35



Obwohl es sich um einen tangentialen Punkt handelt und der Begriff "enterprise" möglicherweise überladen ist, wird ein Prozess, der in den Hintergrund gestellt wird, nicht verleugnet und kann immer mit dem Befehl "fg" in den Vordergrund gestellt werden der Benutzer meldet sich ab (wenn noch Ressourcen verfügbar sind, um eine Abmeldung durchzuführen) .... es sei denn und bis man auf dem Prozess oder Jobid "verleugnet" wird. Danach ist es in der Tat verleugnet: Abmelden wird nicht beendet und fg hat keine Wirkung. - Rondo
Obwohl es nur ein kleiner Punkt ist, bedeuten die Klammern nicht, dass es keine Parameter in bash-artigen Shells gibt, sie sind nur eine Dekoration, die von C-Stil-Sprachen übrig ist. - Charlie Harding


Dieser Befehl ist eine bekannte Version des Gabelbombe

fork bomb pic from wikipedia

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

Unix-Typ-Systeme haben typischerweise 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, der diesen Prozess besitzt, bereits besitzt RLIMIT_NPROC Prozesse, dann schlägt die Gabel fehl. Außerdem kann man unter Linux oder * BSD den pam_limits Konfigurationsdatei /etc/security/limits.conf mit dem gleichen Effekt. Allerdings haben nicht alle Distributionen von Linux die pam_limits Modul standardmäßig installiert.


70
2017-07-04 11:37





Gemäß Dies  :(){ :|: & };: wird genannt

Gabelbrücke ist eine Art poetischer Virenschöpfer

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

Es ist daher ratsam, dies nicht zu tun, da dies zu Schäden an der Hardware führen kann, da es eine Ausführung in der Schleife verursacht, was in Laptops leicht zu einer Erwärmung führen kann.

Ein weiterer Link erklärt durch Screenshots Hier.


18
2017-07-04 11:35



Wenn eine Gabelbombe verursacht HardwareschadenDann hast du ein viel größeres und tieferes Problem. - Michael Kjörling
Vielleicht hat er über eine Bombe mit Gabelform gesprochen, die in der Nähe deines PCs explodieren kann? - dysoco
Der Link für den Screenshot ist unterbrochen. - IMustBeSomeone