Fork-bomba (és harakiri) :)

Ma az alábbi scriptről lesz szó, ami nemes egyszerűséggel a fork_bomb.sh nevet kapta. Arra való, hogy padlóra vigye a Linux vagy UNIX rendszert. Ha egy szülő folyamat egy gyermek folyamatot indít, fork történik. Ez a “bomba” saját magát indítja el újra meg újra. Ez egyébként csúnya dolog ebben a formában. 🙂

gvamosi@gergo1:~$ cat fork_bomb.sh
#!/bin/sh
#
# fork test by gvamosi on 2019-09-29
############################################

var1=0
if [ -n "$1" ]; then
var1=$1
fi
echo "$0 $var1"
var1=$((var1 + 1))

while true; do
sleep 2
/bin/sh $0 $var1 & # itt történik a rekurzív hívás, a "fork"
done

Hogy hogyan lehet elindítani?

gvamosi@gergo1:~$ ./fork_bomb.sh &

És leállítani, ha még nem késő? Két másodpercre vettem a sleep-jét, hogy legyen idő beavatkozni. A Linux-unk ugyan korlátozza az egy felhasználó által nyitható processzek számát, de egy másodperces sleep-pel a notebook-omat sikerült úgy megfektetnem, hogy csak a “szentháromság” (ctrl+alt+del) segített. Ugyanis hiába zárja be az operációs rendszer a processzeket, a rekurzív fork miatt újra és újra nyílnak a kis programocskák, így egy tartós leterhelt állapot keletkezik. Ilyenkor nem, vagy csak alig reagál a számítógépünk.

gvamosi@gergo1:~$ killall fork_bomb.sh
gvamosi@gergo1:~$ killall sh

Ez a két parancs segíthet, ebben a sorrendben, ha elég gyorsak vagyunk. 🙂

Utólag nézem, hogy a “kill -9 -1” – ilyet azért root-ként (rendszergazdaként) vagy dba-ként (adatbázis-adminisztrátorként) be ne írjunk, adatvesztés történhet! – úgy kivágta a saját processz-erdőmet egy szemvillanás alatt, hogy öröm volt nézni. 🙂 Megteszi reboot helyett, még jó, hogy a chrome böngészőmben van “restore” funkció a tabfülekre. 🙂

Egyébként a rendelkezésre álló “javakról” az ulimit parancs segítségével tájékozódhatunk.

gvamosi@gergo1:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30575
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 30575
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Jól látható, hogy 1024-nél több fork_bomb.sh-t nem igen indíthatunk. A rendszergazda így simán tökön tud rúgni minket, ha garázdálkodunk. Régebben egyébként használtak az adminok ún. “watchdog” démont, ami automtikusan reboot-olta a rendszert, ha nagy volt a baj. 🙂

Van még egy érdekes parancs. Ez a root-ként (rendszergazdaként) kiadott “rm -rf /“. Rákérdezés nélküli rekurzív törlés a gyökérből kiindulva. Használata szigorúan TILOS!!! Letöröl MINDENT a DISZKRŐL!!! VÉGLEGESEN!!! Ezt a parancsot csak egyszer adhatjuk ki. 😦

A leggyakoribb parancsok I.

Azután a bizonyos dollár jel után – erről majd később – egy terminálban vagy a konzolon adhatunk a linux rendszerünknek parancsokat.

gvamosi@gergo1:~$ ls -l

Ez a parancs kijelzi egy listában az adott könyvtár tartalmát. A -l egy kapcsoló, azt jelenti, hogy kijelzést kapunk a file típusáról, hogy könyvtár-e vagy file vagy egyéb, a jgosultságokról, írható, olvasható vagy végrehajtható – a részletekről a későbbiekben -, a tulajdonosáról, méretéről, a létrehozás dátumáról és a nevéről.

gvamosi@gergo1:~$ ls --help

Általában igaz, hogy a --help kapcsolóval egy parancs felhasználásáról kaphatunk információkat.

mkdir alma: új könyvtár létrehozása “alma” név alatt
cd alma: váltás a paraméterben megadott “alma” könyvtárba
cd ..: váltás a szülő könyvtárba (eggyel feljebb a hierarchiában)
touch alma/alma.txt: “alma” könyvtár alatt “alma.txt” file létrehozása üres mérettel
rmdir alma: “alma” könyvtár törlése, csak ha üres! – figyelem, nem visszavonható!!
rm alma/alma.txt: “alma.txt” file törlése – figyelem, a törlés végleges, nem visszavonható!!

És búcsúzóul még egy szép parancs:

gvamosi@gergo1:~$ w
07:46:57 up 17:26, 1 user, load average: 0.60, 0.70, 0.81
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
gvamosi tty2 tty2 Mon14 17:26m 18:54 0.05s /opt/google/chrome/chrome

A “w” parancs kijelzi, hogy ki van és kik vannak belépve a számítógépre, és hogy mit is csinálnak nagyjából 🙂 – merthogy a Linux egy többfelhasználós operációs rendszer – mily meglepő. 🙂