Was passiert eigentlich beim Starten? DOS kennt nur CONFIG.SYS und AUTOEXEC.BAT, bei Linux läuft das alles etwas vielseitiger ab. :-) Das Grundgerüst sieht folgendermaßen aus:
Natürlich wird zuerst das BIOS angezeigt, mit dem hübschen Pinguin-Logo statt Energy Star. Was? Noch kein Pinguin im BIOS? Na dann aber schnell zu PinguinBootLogo!
Der Kernel wird irgendwie in den Speicher gekloppt und ausgeführt. Das kann von einem beliebigen Programm geschehen, wie z.B. `LOADLIN', welches einfach eine Datei nimmt (die idealerweise den Kernel enthält :-), und diese in den Speicher kloppt (damit DOS überschreibt). Eine zweite Möglichkeit ist LILO, der Linux Loader, der einfach bei der Konfiguration nachguckt, auf welchen physikalischen Sektoren der Kernel auf der Festplatte liegt (als Datei), diese mit sich selbst in den MBR (oder Bootsektor) schreibt, und beim Booten dann genau diese Sektoren ausliest, ins RAM schreibt und 'anstößt', also ausführt.
Der Kernel ist prinzipiell für die Erkennung und Einbindung der gesamten Hardware zuständig, diese Meldungen kann man beim Booten beobachten. Will man etwas länger lesen, so ist die Taste PAUSE bzw. ?ScrollLock bzw. Rollen ganz nützlich. Zum Schreiben in eine Datei siehe unten. Natürlich funktioniert hier auch der scrollback buffer schon - Shift Page-Up bzw. Shift Page-Down halt. :)
Die letzte Aufgabe des Kernels ist es, die Partition, die ihm (via `LILO' oder via `LOADLIN' Parameter oder wie auch immer) als root-Partition vorgegeben wurde, anzumelden (zu 'mounten') und den ersten Prozeß zu starten, der normalerweise INIT heißt (`/sbin/init'). Jetzt ist der Kernel prinzipiell mit Laden fertig und die gesamte Hardware (die er eingebunden hat) steht zur Verfügung. Die Meldungen, die Kernel und Programm trennen, lauten
VFS: mounted root (ext2 filesystem) readonly. (das war noch der Kernel) INIT: Version X.XX booting (das ist bereits INIT)
INIT guckt sich jetzt verschiedene Sachen an. Zuallererst wird die Datei /etc/inittab geladen, damit INIT z.B. weiß, welcher Runlevel (siehe ?RunlevelDefinition) zu starten ist. (siehe id:X:initdefault:, wobei `X' der Runlevel ist.) Danach guckt INIT, welches Programm als nächstes starten soll -- bisher ist noch kein Serverdienst gestartet, noch keine Shell, noch kein Netzwerk, noch nicht einmal andere Partitionen sind gemountet. (dies steht in der Zeile si:I:wait:PROGRAMM). Meist ist PROGRAMM gleich `/etc/rc.d/init.boot', oder `/sbin/init.d/boot', und dies wird jetzt ausgeführt.
Das Boot-Skript macht - normalerweise, denn ab hier ist alles und nichts konfigurierbar - folgendes:
Wohlgemerkt: Dein System kann hiervon geringfügig abweichen ... Meist gibts in dem gleichen Verzeichnis auch eine Datei `boot.local', die von boot zum Schluß ausgeführt wird und in die du deine eigenen Befehle schreiben kannst. Wenn nicht, kannst du sie auch ins `boot'-Skript direkt anhängen -- aber vorsicht, hier nichts einfach ändern, wenn du nicht weißt, was es tut!
INIT guckt jetzt, welcher Runlevel festgelegt wurde (in der `/etc/inittab'), und je nach Runlevel werden jetzt Skripte gestartet (`/etc/inittab': lN:N:wait:SCRIPT, wobei N=Runlevel), die bei den meisten Systemen einfach alles starten, was in `/etc/init.d/rcN.d/' oder so ähnlich liegt (N=Runlevel). Hier werden also die ganzen Services, Dämonen ;-) und Dienste gestartet, die dann später im Hintergrund laufen. Gleichzeitig wird für diese Prozesse etwas Buch geführt, z.B. Lock-Dateien angelegt, oder ähnliches. Guck Dir einfach mal die Scripts an.
Wenn das fertig ist, startet INIT für alle Terminals, die ihm gesagt wurden, ein "getty", das ist ein Programm, was die Kontrolle über dieses Terminal bekommt und normalerweise erstmal `/bin/login' startet. Dies wird ebenfalls in der `/etc/inittab' festgelegt. respawn heißt hier, daß das Programm, sobald es sich beendet, sofort erneut gestartet wird. Sonst könnte man sich auf jedem Terminal nur einmal einloggen ... =;) Falls man ein grafisches Login eingestellt hat (bei der SuSE ist das Runlevel 3, bei Redhat Runlevel 5), wird auch gleich noch der `xdm' bzw. `kdm' gestartet und man bekommt ein grafisches X-Window-Login-Fenster. Dies funktioniert übrigens auch, wie so manches, übers Netzwerk: normalerweise sollte ein startx --query anderer_rechner:0 einem ein Login-Fenster von einem anderen Rechner im Netzwerk liefern ...
Wenn man sich angemeldet hat, wird normalerweise das Script `/etc/profile' (für alle Benutzer identisch) und die Dateien `.profile', `.login' und für die bash-Shell auch `.bashrc', `.bash_login' und `.bash_profile' (falls vorhanden) ausgewertet bzw. ausgeführt. Das entspräche am ehesten einer `AUTOEXEC.BAT' unter DOS. :)
JETZT -- nach dem Login -- wird die Shell gestartet und man kann das System benutzen. Ist doch alles halb so wild. :)
Jedenfalls läßt sich der Systemstart-Vorgang auf alle möglichen Gegebenheiten anpassen. Man kann, falls man einmal sein root-Passwort vergessen hat, aber LILO nicht ?abgesichert hat, problemlos z.B. mit
LILO boot: linux init=/bin/bash
dem Linux Kernel sagen, daß er halt nicht `/sbin/init' als erstes Programm ausführen soll, sondern `/bin/bash'. Hui, das sorgt immer für Erheiterungen, wenn jemand im FIDO Netz oder im Usenet diese "Sicherheitslücke" "neu" entdeckt ;-)
(man mache sich bitte mit dem Parameter 'restricted' in der `/etc/lilo.conf' vertraut.)