Linux Systemstartprozess
Wenn Linux bootet, sehen wir viele Boot-Informationen.
Der Linux-Bootvorgang ist nicht so kompliziert, wie man vielleicht annimmt. Er kann in 5 Phasen unterteilt werden:
- Kernel-Start.
- Ausführen von init.
- Systeminitialisierung.
- Terminal-Einrichtung.
- Benutzeranmeldung.
Arten von init-Programmen:
- SysV:init, vor CentOS 5, Konfigurationsdatei: /etc/inittab.
- Upstart:init, CentOS 6, Konfigurationsdateien: /etc/inittab, /etc/init/*.conf.
- Systemd:systemd, CentOS 7, Konfigurationsdateien: /usr/lib/systemd/system, /etc/systemd/system.
Kernel-Bootvorgang
Nachdem der Computer eingeschaltet wurde, führt das BIOS zunächst einen Einschalt-Selbsttest durch und bootet dann gemäß dem im BIOS eingestellten Boot-Gerät (normalerweise die Festplatte).
Nachdem das Betriebssystem die Hardware übernommen hat, liest es zuerst die Kernel-Dateien im Verzeichnis /boot.

init ausführen
Der init-Prozess ist der Ausgangspunkt aller Systemprozesse. Man kann ihn mit dem Vorfahren aller Systemprozesse vergleichen. Ohne diesen Prozess würde kein Prozess im System starten.
Das init-Programm muss zuerst die Konfigurationsdatei /etc/inittab lesen.

Runlevel
Viele Programme müssen beim Booten gestartet werden. Unter Windows heißen sie "Dienste" und unter Linux "Daemons".
Eine wesentliche Aufgabe des init-Prozesses ist es, diese Startprogramme auszuführen.
Allerdings müssen je nach Situation unterschiedliche Programme gestartet werden. Wird der Computer beispielsweise als Server verwendet, muss Apache gestartet werden, als Desktop hingegen nicht.
Linux ermöglicht es, verschiedene Startprogramme für verschiedene Runlevel zuzuweisen, was als „Runlevel“ bezeichnet wird. Das heißt, beim Booten bestimmt das Runlevel, welche Programme ausgeführt werden.

Linux hat 7 Runlevel:
- Runlevel 0: Systemhaltzustand. Der Standard-Runlevel darf nicht auf 0 gesetzt werden, andernfalls kann das System nicht normal booten.
- Runlevel 1: Einzelbenutzer-Arbeitszustand, Root-Rechte, wird zur Systemwartung verwendet, Remote-Anmeldung ist verboten.
- Runlevel 2: Mehrbenutzerzustand (ohne NFS)
- Runlevel 3: Vollständiger Mehrbenutzerzustand (mit NFS), wechselt nach der Anmeldung in den Konsolen-Kommandozeilenmodus.
- Runlevel 4: Vom System nicht verwendet, reserviert.
- Runlevel 5: X11-Konsole, wechselt nach der Anmeldung in den grafischen GUI-Modus.
- Runlevel 6: System fährt normal herunter und startet neu. Der Standard-Runlevel darf nicht auf 6 gesetzt werden, andernfalls kann das System nicht normal booten.
Systeminitialisierung
In der Konfigurationsdatei von init gibt es eine Zeile wie diese: si::sysinit:/etc/rc.d/rc.sysinit. Sie ruft /etc/rc.d/rc.sysinit auf und führt es aus. rc.sysinit ist ein Bash-Shell-Skript, das hauptsächlich einige Systeminitialisierungsarbeiten ausführt. rc.sysinit ist ein wichtiges Skript, das bei jedem Runlevel zuerst ausgeführt werden muss.
Zu den Hauptaufgaben, die es ausführt, gehören: Aktivieren der Swap-Partition, Überprüfen der Festplatten, Laden von Hardwaremodulen und andere Aufgaben, die zuerst ausgeführt werden müssen.
l5:5:wait:/etc/rc.d/rc 5
Diese Zeile bedeutet, /etc/rc.d/rc mit 5 als Parameter auszuführen. /etc/rc.d/rc ist ein Shell-Skript, das 5 als Parameter akzeptiert und alle rc-Startskripte im Verzeichnis /etc/rc.d/rc5.d/ ausführt. Die Startskripte im Verzeichnis /etc/rc.d/rc5.d/ sind tatsächlich alle Verknüpfungsdateien, nicht die echten rc-Startskripte. Die echten rc-Startskripte liegen tatsächlich im Verzeichnis /etc/rc.d/init.d/.
Diese rc-Startskripte haben eine ähnliche Verwendung; sie akzeptieren im Allgemeinen Parameter wie start, stop, restart, status usw.
Die rc-Startskripte in /etc/rc.d/rc5.d/ sind normalerweise Verknüpfungsdateien, die mit K oder S beginnen. Startskripte, die mit S beginnen, werden mit dem Parameter start ausgeführt.
Wenn ein entsprechendes Skript mit einer K-präfixierten Verknüpfung gefunden wird und es sich bereits im laufenden Zustand befindet (gekennzeichnet durch Dateien unter /var/lock/subsys/), werden die bereits gestarteten Daemons zuerst mit dem Parameter stop gestoppt und dann erneut ausgeführt.
Dies geschieht, um sicherzustellen, dass beim Wechsel des Runlevels durch init alle zugehörigen Daemons neu gestartet werden.
Welche Daemons bei welchem Runlevel ausgeführt werden, können Benutzer über chkconfig oder "Systemdienste" in setup festlegen.

Terminal-Einrichtung
Nachdem rc die Ausführung beendet hat, kehrt es zu init zurück. Zu diesem Zeitpunkt ist die grundlegende Systemumgebung eingerichtet und verschiedene Daemons wurden ebenfalls gestartet.
init öffnet dann 6 Terminals, damit Benutzer sich am System anmelden können. Die folgenden 6 Zeilen in inittab definieren die 6 Terminals:
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
Aus dem Obigen können wir ersehen, dass in den Runlevels 2, 3, 4 und 5 das Programm mingetty im respawn-Modus ausgeführt wird. Das Programm mingetty kann Terminals öffnen und Modi einstellen.
Gleichzeitig zeigt es eine textbasierte Anmeldeoberfläche an, die Anmeldeoberfläche, die wir häufig sehen. In dieser Anmeldeoberfläche wird der Benutzer aufgefordert, einen Benutzernamen einzugeben, und der vom Benutzer eingegebene Benutzername wird als Parameter an das Programm login übergeben, um die Identität des Benutzers zu überprüfen.
Benutzeranmeldung
Allgemein gesagt gibt es drei Möglichkeiten für Benutzer, sich anzumelden:
- (1) Kommandozeilen-Anmeldung
- (2) SSH-Anmeldung
- (3) Anmeldung über die grafische Oberfläche

Für Benutzer im grafischen Modus mit Runlevel 5 erfolgt ihre Anmeldung über eine grafische Anmeldeoberfläche. Nach erfolgreicher Anmeldung können sie direkt in Fenstermanager wie KDE, Gnome usw. gelangen.
Dieser Artikel behandelt hauptsächlich die Textmodus-Anmeldung: Wenn wir die Anmeldeoberfläche von mingetty sehen, können wir den Benutzernamen und das Passwort eingeben, um uns am System anzumelden.
Das Kontoverifizierungsprogramm von Linux ist login. login empfängt den von mingetty übergebenen Benutzernamen als Benutzernamen-Parameter.
Dann analysiert login den Benutzernamen: Wenn der Benutzername nicht root ist und die Datei /etc/nologin existiert, gibt login den Inhalt der nologin-Datei aus und beendet sich dann.
Dies wird normalerweise verwendet, um Nicht-root-Benutzer während der Systemwartung an der Anmeldung zu hindern. Nur in /etc/securetty registrierte Terminals sind für die Anmeldung des root-Benutzers zugelassen. Wenn diese Datei nicht vorhanden ist, kann sich der root-Benutzer an jedem Terminal anmelden.
Die Datei /etc/usertty wird verwendet, um Benutzern zusätzliche Zugriffsbeschränkungen aufzuerlegen. Wenn diese Datei nicht vorhanden ist, gibt es keine weiteren Einschränkungen.
Wechseln zwischen grafischem und Textmodus
Linux stellt standardmäßig sechs Kommandozeilen-Terminalkonsolen bereit, damit wir uns anmelden können.
Standardmäßig melden wir uns am ersten Fenster an, also tty1. Die sechs Fenster sind tty1, tty2 ... tty6. Sie können Ctrl + Alt + F1 ~ F6 drücken, um zwischen ihnen zu wechseln.
Wenn Sie eine grafische Oberfläche installiert haben, gelangen Sie standardmäßig in die grafische Oberfläche. An diesem Punkt können Sie Ctrl + Alt + F1 ~ F6 drücken, um eine der Kommandozeilen-Fensteroberflächen zu betreten.
Wenn Sie von einer Kommandozeilen-Fensteroberfläche zur grafischen Oberfläche zurückkehren möchten, drücken Sie einfach Ctrl + Alt + F7.
Wenn Sie eine VMware virtuelle Maschine verwenden, sind die Tastenkombinationen zum Wechseln der Kommandofenster Alt + Space + F1~F6. Wenn Sie sich in der grafischen Oberfläche befinden, drücken Sie Alt + Shift + Ctrl + F1~F6, um zu einem Kommandofenster zu wechseln.

Linux Herunterfahren
Im Linux-Bereich wird es meistens auf Servern eingesetzt, daher trifft man selten auf Herunterfahrvorgänge. Schließlich ist ein auf einem Server laufender Dienst endlos; außer unter besonderen Umständen wird Herunterfahren nur verwendet, wenn es absolut notwendig ist.
Der korrekte Ablauf zum Herunterfahren ist: sync > shutdown > reboot > halt
Der Shutdown-Befehl ist: shutdown. Sie können man shutdown ausführen, um die Hilfedokumentation anzuzeigen.
Zum Beispiel können Sie den folgenden Befehl ausführen, um herunterzufahren:
sync 将数据由内存同步到硬盘中。 shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机: shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。 shutdown –h now 立马关机 shutdown –h 20:25 系统会在今天20:25关机 shutdown –h +10 十分钟后关机 shutdown –r now 系统立马重启 shutdown –r +10 系统十分钟后重启 reboot 就是重启,等同于 shutdown –r now halt 关闭系统,等同于shutdown –h now 和 poweroff
Abschließend zusammengefasst: Ob Sie das System neu starten oder herunterfahren, führen Sie zuerst densync-Befehl aus, um die Daten im Speicher auf die Festplatte zu schreiben.
Zu den Shutdown-Befehlen gehörenshutdown –h now halt poweroffund init 0, zu den Neustartbefehlen gehörenshutdown –r now reboot init 6。