Hier werde ich einige kleine Lösungen zu manchen Problemen, die mir irgendwann viel Zeit gekostet haben.
Es gibt natürlich immer viele andere Ansätze und Lösungen, die vielleicht besser sind oder schneller.
Ich behaupte nicht, dass die Lösungen perfekt sind, es kann sein, dass sie den einen oder anderen Fehler haben,
also diese auf eigene Gefahr nutzen!
Wer schon ein GNU/Linux und andere Unix-Like Systeme administriert hat, weiß wie gefährlig eine Fork-Bombe untee GNU/Linux sein kann.
In den meisten Distributionen gibt es standardmässig keine Beschränkung für Benutzer, wie viele Kind-Prozesse erzeugt werden
dürfen, und damit kann man eine GNU/Linux Maschine in die Knie zwingen, indem man eine Fork-Bombe ausführt. Die bekanntesten Bombem,
die man in Foren, Signaturen, usw. findet, sind:
Fork Bombe mit BASH
Die 2. Variante ist intuitiv klar, eine Endlosschleife, die fork aufruft. Dabei werden ein Kind-Prozess erzeugt, und beide Prozesse laufen
ab der fork-Aufruf-Stelle weiter, also wird das Kind-Prozess ebenso weitere Kind-Prozesse erzeugen, die weiterhin weitere Kind-Prozesse
erzeugen werden, usw. Also aus einem Prozess werden 2, dann 4, dann 8, usw. Irgendwann sind so viele Prozesse offen, dass die CPU mit
eine 100% Auslastung läuft, es gibt keinen Speicher mehr und der Computer wird in wenigen Sekunden unbenutzbar, weil kein anderer
Prozess mehr reagiert oder Kind-Prozesse erzeugen kann.
Die erste Variante sieht ein wenig kryptisch aus, ist sie aber keineswegs. Wer ein wenig BASH Programmierung kennt, wird relativ schnell bemerken,
was diese
Zeile bewirkt. Es wird eine Funktion definiert wegen () und der Name der Funktion ist :. Der Rumpf der
Funktion steht zwischen den geschweiften Klammern, also :|:&. Zuerst wird die Funktion : (rekursiv)
aufgerufen, dann wird ein neuer Prozess erzeugt, dessen Standardeingabe mit der Standardausgabe des ersten Aufrufes durch eine Pipe
(erkennbar an |) verbunden und anschließend in en Hintergrund geschickt (erkennbar an &), das beduetet,
es werden mindestens 3 Prozesse erzeugt, die ebenfalls 3 Prozesse erzeugen, usw. Am Ende des Funktionsrumpfes wird die Funktion
: aufgerufen. Das Ergebnis ist dasselbe.
Die Lösung ist ganz einfach, man muss nur die Datei /etc/security/limits.conf um eine Zeile anpassen. Diese Datei
enthält eine kleine Dokumentation, wie man sie anpassen kann. Ich hab auf meine Systeme:
Lösung zum Fork-Bombe Problem
Damit wird gewährleistet, dass kein Benutzer mehr als 1024 Prozesse gleichzeigtig öffnen kann. Damit sind solche Fork-Bomben nicht mehr
schädlich, denn die Prozesse irgendwann keine weitere Kind-Prozesse erzeugen können.
Wer kennt nicht das Problem, dass man ein wenig mit seinen Festplatten und deren Partitionstabellen spielt, oder
man installiert andere Betriebsysteme oder nach einem Festplattenausfall ist man ganz erschroken, dass 1. der Rechner
nicht mehr bootet, 2. oder die Daten weg sind, 3. oder die Partitionstabelle verschwunden ist, 4. ...
Wer ein Backup hat, kann froh sein, dass man nicht so viel verloren hat, wenn überhaupt. Wer aber kein Backup hat, sitzt einfach da,
schweigt und weiß nicht wirklich, was zu tun. Vielleicht schreien? Oder jemanden verdammen? Oder weinen? Leider hilft da nicht viel,
außer man kennt ungefähr die Ursache.
Das einzige, was da zuverlässig hilft, sind Backups. Aber warum werden sie nicht in der Regel getan? Weil man denkt, das passiert nur dena
anderen, oder man hat keine Zeit, sich damit zu beschäftigen, oder man hat einfach keine Lust, weil man meistens per Hand alles
kopieren muss, entpacken, auf CD/DVD Brennen und viele wissen nicht, dass es Programme gibt, die das für einen erledigen.
Ich gehöhe eher der faulen Sorte, und wurde schon 2 Mal wirklich bestraft. Da ich aber keine Lust, ein spezielles Programm zu finden,
zu testen, es bedienen zu lernen, usw. hab ich mir einfach ein Paar Skripte geschrieben, die für mich zuverlässig arbeiten und
in wenig Schritten benutzt werden können.
backup-restore hilft dabei, Backups zu erstellen und wiederzuspielen. Ich benutze ein einfacher tar mit gzip oder bzip2 Kompression
und die resultierende tar.gz bzw. tar.bz2 Datei wird in gleich größe Dateien gesplittet, damit sie einfach gebrannt werden
können. Mit backup-restore kann man die gesplittete Datein entpacken.
backup-restore
Beispiele: Um /home in /export/bak/home zu sichern in Dateien mit max. 1GB Größe:
backup ertsellen
Somit werden (Bsp: am 01.06.06) Dateien in /export/bak/home mit den Namen home-01.06.06.tar.gz.00, home-01.06.06.tar.gz.01,
home-01.06.06.tar.gz.02, usw. gesichert. Um irgendwann diese Dateien wiederzuspielen:
Manchmal will man sehr schnell eine ISO Datei erstellen und brennen, ohne aufwändige Brennprogramme wie K3B starten zu müssen.
Daher habe ich mir 2 Skripte geschrieben, die das Ermöglichen: makeiso
makeiso
und burniso
burniso
Wenn man die GNU Bash als Shelll benutzt, kann man auch die Autocompletion Funktion dieser Shell benutzen, um burniso
mit der Autocompletion Funktion zu benutzen. Folgendes muss geladen werden
BASH
Beispiele: Um den Inhalt des Verzeichnisses abc in eine ISO Datei packen und anschließend diese
Datei brennen