Vraag Waarom deed het commando ": () {: |: &} ;:" mijn systeem zo erg vertragen dat ik opnieuw moest opstarten?


GEVAAR!

Voer deze opdracht niet uit om deze te 'testen', tenzij u voorbereid bent op een crash en / of force-rebooting van uw systeem.

Ik was in mijn Virtualbox 12.04 bezig met het proberen om een ​​app te compileren, en in afwachting gebeurde er toevallig een forum waarop een opmerking zei:

Proberen :(){ :|: & };:
  Ook plezier en geen root nodig.

Zonder na te denken, liet ik het in mijn kabouterterminal lopen. Het maakte mijn 12.04 (in Virtualbox) zo erg laag dat ik het moest afsluiten.

Mijn vraag is wat doet deze opdracht?

:(){ :|: & };:

272
2017-07-04 11:29


oorsprong


verwant Hoe Ubuntu te beschermen tegen vorkbommen - Sathya
Zie ook een oude thread: ubuntuforums.org/showthread.php?t=1392511 - Paddy Landau
Verwant: Hoe werkt een vorkbom? en Waar is de fork () op de vorkbom: () {: |: &};:? - terdon♦
mogelijk cross site duplicaat van: stackoverflow.com/questions/515844/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
"lag zo slecht" is behoorlijk optimistisch. - pstadler


antwoorden:


Dit wordt a genoemd vorkbom.

:() betekent dat u een functie definieert die wordt genoemd :

{:|: &} betekent dat de functie wordt uitgevoerd : en stuur zijn uitvoer naar de : opnieuw functioneren en voer die op de achtergrond uit.

De ; is een opdrachtscheidingsteken, zoals &&.

: voert de functie de eerste keer uit.

In wezen maakt u een functie die zichzelf tweemaal per oproep belt en geen manier heeft om zichzelf te beëindigen. Het blijft verdubbelen totdat de systeembronnen opraken.

In Virtualbox spelen was redelijk verstandig, anders had je je pc opnieuw moeten opstarten.


345
2017-07-04 11:34



Dit antwoord lijkt erop te wijzen dat het opnieuw opstarten de enkel en alleen recourse. Maar in feite kan deze vorkbom worden gedood zonder opnieuw op te starten, en ik heb zelfs waargenomen dat het op sommige systemen toch niet goed werkt (omdat hun spawnlimiet op een redelijke manier is ingesteld). - Konrad Rudolph
Eigenlijk zou dit voor een volledige uitleg waarschijnlijk moeten vermelden ; is een opdrachtscheidingsteken. De { ... } deel is gewoon de inhoud van de functie. - Michael Kjörling
@ MichaelKjörling +1 Ik begreep de syntaxis niet eens voordat ik je opmerkingen in overweging nam. - jumpnett
@SuperMatt Ik weet niet of deze vraag nog steeds actief is, maar hoe dan ook wilde ik weten wat wel | en & do. Ik begrijp dat je de werking van de functie hebt verzorgd, maar ik wilde weten wat deze twee doen - Noober
@Noober als je je nog steeds afvraagt ​​(zoals ik ben in dit zwarte gat van beknopte en cryptische documentatie die Linux is), ik weet het! | is een pijp die na een commando wordt geplaatst om die commando-uitvoer als invoer voor de volgende opdracht te verzenden. & is een vork maakt een nieuwe thread voor de voorgaande opdracht en laat de huidige thread achter om verder te gaan met het uitvoeren van meer opdrachten - flurbius


Dit is een zogenaamde vorkbom geïmplementeerd in de schaal.

van 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



Hoewel het een tangentieel punt is en de term 'disown' mogelijk overbelast is, technisch gezien, wordt een proces dat op de achtergrond wordt gezet niet onderdrukt en kan het altijd naar de voorgrond worden gebracht met het 'fg'-commando, en het proces (de processen) zal worden beëindigd als de gebruiker logt uit (als er nog steeds bronnen beschikbaar zijn om een ​​afmelding te realiseren) .... tenzij en totdat er één 'verloochent' over het proces of de jobid. Daarna wordt het inderdaad verstoten: het uitloggen wordt niet beëindigd en fg heeft geen effect. - Rondo
Hoewel het slechts een ondergeschikt punt is, betekenen de haakjes niet dat er geen parameters zijn in bash-achtige shells, maar dat ze alleen nog maar decoratie zijn die overblijft uit talen in C-stijl. - Charlie Harding


Dat commando is een bekende versie van de vorkbom

fork bomb pic from wikipedia

Het zorgt ervoor dat uw computer onvoldoende geheugen heeft door oneindig een proces te doorlopen. Er zijn ook enkele voorzorgsmaatregelen die je ertegen kunt gebruiken:

Unix-type systemen hebben meestal een proceslimiet, bestuurd door een ulimit shell-commando of zijn opvolger, setrlimit. Linux-kernels stellen de RLIMIT_NPROC rlimit ("resourcelimiet") van een proces in en handhaven deze. Als een proces een vork probeert uit te voeren en de eigenaar van dat proces al eigenaar is RLIMIT_NPROC processen, dan faalt de vork. Bovendien, op Linux of * BSD, kan men de pam_limits configuratiebestand /etc/security/limits.conf met hetzelfde effect. Niet alle distributies van Linux hebben echter de pam_limits module standaard geïnstalleerd.


70
2017-07-04 11:37





Volgens deze  :(){ :|: & };: wordt genoemd

forkbomb is een soort van poëtische virusontwikkelaar

... Het slinkse kleine programma beveelt het om meerdere kopieën van te maken   zelf, een kettingreactie veroorzakend en zo snel het uitputten   systeembronnen ...

Dus geadviseerd om dit niet uit te voeren, kan schade aan de hardware veroorzaken, omdat het een loopwise-uitvoering veroorzaakt, kan het gemakkelijk verwarmen in laptops veroorzaken.

Een andere link legt uit via schermafbeeldingen hier.


18
2017-07-04 11:35



Als een vorkbom veroorzaakt hardware schade, dan heb je een veel groter en dieper probleem. - Michael Kjörling
Misschien had hij het over een bom met de vorm van een vork die kan exploderen in de buurt van je pc? - dysoco
De link voor de schermafbeelding is verbroken. - IMustBeSomeone