System und Booten¶
Das Linux-System unter der „Haube“ und der Startvorgang…
Bootvorgang¶
Eine exemplarische Darstellung inklusive Erläuterungen zu Linux-Bootvorgängen:
Einschalten (Reset, POST - Power On Self Test)
BIOS / UEFI mit Bootsequenz (Startreihenfolge; engl: Bootsequence / Startmedien)
Übersicht Bootmedien:
USB (Sticks / HD), Netzwerk (PXE / TFTP), Festplatten / SSDs, Optische Medien (CD/DVD)
MBR lesen- Masterbootrecord mit Partitionstabelle
(maximal 4 Partitionen: 4 Primäre oder 3 Primäre und 1 Erweiterte)
Hinweis:
für das Booten von HDs > 2,2 TB wird UEFI mit GPT (GUID Partition Table) benötigt
Erinnerung / Tipp: (ggf. nach Fehlschlag Parallelinstalation zu Windows)
Win-Systeme benötigen als Bootstandard eine Aktive primäre Partition inkl. eines „sauberen“ MBR (Generischer MBR)
→ Reparatur-Tipp zum MBR: mit Win-DVD:
bootrec /fixmbr(bzw.bootrec /fixbootfür Bootsektor) in ReparaturkonsoleDarstellung zu Partitionierungen:
exemplarische Szenarios für Parallelinstallation mit Windows - Linktipp MS
Linux-Bootmanager: GRUB2 (Übersicht Bootmanager und Technik Bootmanager folgt)
Vorgänger / Bootalternativen: GRUB (Version 1), LILO (Linux Loader)
Kernel und initrd (klassisch: init Ramdisk - initrd laden; Anm.: die Ramdisk ist optional)
Symlinks bei openSUSE: vmlinux (komprimierter Kernel), initrd
Analyse Kernel-Version:
uname -abzw.uname -rsystemd (Erster Prozess mit ID „1“) (früher: SysVInit mit Urprozess init)
Anm.: openSUSE (und fast alle anderen Linuxe benutzen systemd („abwärtskompatibel“ zu init),
Ubuntu hatte zwischenzeitlich upstart als init-Lösung (aktuell: auch systemd ab Ubuntu 16.04 LTS)
Gründe für Abkehr von SysVinit zu alternativen init-Techiken:
Effizienter, Parallel arbeitend, Abhängigkeiten von Prozessen cleverer lösend
Tipp zur Startanalyse:
systemd-analyze blame (erzählt in ms - Millisekunden - die Geschichte der „Starts“)
oder auch: systemd-analyze plot > grafische-analyse.svg (erstellt SVG-Grafik)
Systemd Analyse mit Plot¶
Technisch: systemd arbeitet mit Targets (z.B. default.target) statt den klassischen Runleveln
Befehle:
init , telinit , runlevel , systemctl
(statt sysctl bei init-Technik), journalctl (für Analyse/Logging)
Bootmanager GRUB2¶
Lilo (sehr alt und unflexibel), GRUB (Version 1 bzw. GRUB Legacy - Erläuterungen auf openSUSE Portal)
aktuell: GRUB2 (technisch extrem zu GRUB abweichend und mächtiger!)
GRUB-Ordner: /boot/grub2
GRUB konfigurieren mit /etc/default/grub und den /etc/grub.d/ Dateien
GRUB aktualisieren mit Befehlen
grub2-mkconfig -o /boot/grub2/grub.cfg
(so bei Suse - andere OS haben ein kleines Hilfsskript namens
update-grub, welches diese Syntax ersetzt)
Grub2-Techniken bedürfen genauer Recherche und Betrachtungen!
Hinweis zum Bootloader mittels YaST - System - Bootloader mögliche Speicherorte für GRUB: MBR (Master Boot Record), Bootsektor einer Partition
Erläuterungen zu GRUB2: Link Ubuntuusers-Wiki (Achtung „Ubuntu-Brille“),
Runlevel¶
(klassischer Begriff - systemd arbeitet mit Targets)
Grundlagenartikel systemd von Heise.de)
0 - Stop/Halt
1 / s / S - Single User (zu Wartungsarbeiten)
2 - Multi-User (mit und ohne Netzwerk - je nach Distribution)
3 - Multi-User und Netzwerk (klassische Serverumgebung LAMP und Co)
4 - unbenutzt
5 - Multi-User, Netzwerk, X-Server (heute mit Desktops wie KDE oder Gnome)
6 - Reboot
Klassischer Ordner für Skripte /etc/init.d mit Unterordnern fürdie Runlevel
Momentaufnahme openSUSE 42.1 Runlevel 5:
/etc/init.d/rc5.d beinhaltet noch 3 Dienste mit entsprechenden (S
Start - K Stop/Kill) Skripten
hier: avahi-daemon, postfix, udev
diese init-Skripte arbeiten dann mit Parametern start | stop | restart | reload
Momentaufnahme openSUSE 42.3:
keinerlei Skripte mehr in den Runlevel-Unterordnern
/etc/init.d/rc0.d bis rc6.d (Anm.: nur noch in ./boot.d für
AppArmor)
Anm.: Red Hat (und Co) arbeiten mit /etc/rc.d als
Haupt-Skriptordner - siehe auch SymLink rc.d auf init.d bei openSUSE
systemd¶
(Reference Manual Chapter: The systemd Daemon)
init-Technik wird durch systemd-Technik ersetzt bei Beibehaltung der alten (abwärtskompatiblen) init-Skript-Techniken und Ordnerstrukturen nach SysVinit;
dadurch werden die Start-/Stoppmechanismen durch teils gleichzeitiges Abarbeiten von Aufrufen beschleunigt - siehe S- und K-Links in Runlevel-Ordnern alle mit gleicher Nummerierung (hier 50 - S50… / K50…)
Nur noch Skripte, die nicht sauber mit systemd arbeiten - oder noch nicht umgeschrieben worden sind - konnte man noch in diesen Ordnern finden!
Hinweis ab openSUSE 42.3:
Aktuell befinden sich nur im „allgemeinen“ Bootordner /etc/init.d/boot.d noch Start-/Stop-Skripte für AppArmor!
Runlevel-Tools:
runlevel , init X (X = S, 0, 1, 3, 5, 6) ,
shutdown , halt , reboot
Hier mal eine ausführlichere Gegenüberstellung:
SysVinit |
systemd |
Bemerkungen |
|---|---|---|
Runlevel |
Targets |
Bezeichungen für gewünschte Bootumgebung |
/etc/inittab |
keine /etc/inittab (!!) in Ordnern diverse Dateien: (z.B.) /usr/lib/systemd/system |
Konfigurationsdatei(en) |
runlevel init telinit sysctl chkkonfig |
runlevel (wegen Kompatibilität) init (w. K.) telinit (w. K.) systemctl journalctl systemd- (z.B. systemd-analyze blame) |
Tools |
service sshd status |
systemctl status sshd.service |
Status openSSH Server |
service sshd start |
systemctl start sshd.service |
Starten openSSH Server |
service sshd stop |
systemctl stop sshd.service |
Stoppen openSSH Server |
service sshd restart |
systemctl restart sshd.service |
Restarten openSSH Server |
service sshd reload |
systemctl reload sshd.service |
Konfiguration openSSH Server neu laden |
chkconfig sshd on |
systemctl enable sshd.service |
openSSH im Runlevel/Target aktivieren |
chkconfig sshd off |
systemctl disable sshd.service |
openSSH im Runlevel/Target deaktivieren |
Man. Suche in Logdateien |
journalctl -u sshd.service |
Journal für openSSH (als root) |
chkconfig –list |
systemctl list-unit-files systemctl list-dependencies multi-user-target |
Übersicht Dienste in Runleveln/im Target |
init 3 (oder) telinit 3 |
systemctl isolate runlevel3.target systemctl isolate multi-user.target |
in Runlevel 3 wechseln bzw. in multi-user.target |
init 5 (oder) telinit 5 |
systemctl isolate runlevel5.target systemctl isolate graphical.target |
in Runlevel 5 wechseln bzw. in graphical.target |
… |
systemctl isolate default.target |
in Standard-Runlevel wechseln bzw. in default.target |
init 0 (oder) telinit 0 shutdown -h poweroff |
systemctl isolate runlevel0.target systemctl isolate poweroff.target shutdown -h poweroff |
Rechner ausschalten |
init 6 (oder) telinit 6 shutdown -r reboot |
systemctl isolate runlevel6.target systemctl isolate reboot.target shutdown -r reboot |
Rechner rebooten |
Tabelle zu SysVinit vs. systemd (siehe auch Link Fedoraprojekt (Link)
Übungen: systemctl start | stop | enable
Verzeichnisstruktur¶
(eine kurze Übersicht - siehe auch ausführlicher Beitrag zu FHS auf Wikipedia)
Filesystem¶
Einige Verzeichnisse:
/bin - Binaries, ausführbare Programme
/boot - Kernel vmlinuz (komprimiert, mehrere Versionen mit
Nummern), initrd (Ramdisk)
/boot/grub2 - Bootmanger (hier nicht konfigurieren - siehe
/etc/default/grub)
/dev - Geräte (/dev/fd0, /dev/sr0, /dev/sda, /dev/sdb, /dev/null,
/dev/urandom, …)
/etc - Konfigurationen (/etc/fstab, /etc/hosts, /etc/hostname,
viele Konfigurations-Unterordner: /etc/skel, …)
/etc/X11 - der Ordner für den X-Server (Grundtechnik
Grafikausgabe)
/home - Benutzerprofile (/home/username)
/lib - Programmbibliotheken (Libraries; siehe auch /lib64)
/lost+found - bei journaling File Systems Daten für
Fehlersuchen/Behebungen (siehe auch Toolreihe fsck)
/media - klassischer Mountpoint für Wechselmedien (bei openSUSE nicht mehr vorhanden)
/run/media/username - neuer Mountpoint für Wechselmedien bei openSUSE und Co
/mnt - Mountpoint (der alte Standardmount für manuelle Mounts)
/opt - optionale Software (hier am Beispiel XAMPP Lamp Server -
Link); auch: kommerzielle Software
/proc - Prozesseverwaltung (siehe Ordner mit PID-Nummern)
Übung: cat /proc/meminfo ; cat /proc/interrupts ; cat /proc/cpuinfo
/root - Homedir für SuperUser root
/sbin - Programme mit hohen Privilegien (SuperUser)
/srv - Serverdienste (Verzeichnisse z.B. für Webserver - diese
findet man gerne auch unter /var/www ;-)
/tmp - Temporärer Ordner; gemeinschaftlich im System (später:
besondere Zugriffsrechte)
/usr - Großteil der installierten Software im System (Unix System Resources)
/var - Variable Daten
Unterscheidung/Gruppierung von Daten auf Unix/Linux Systemen gemäß File Hierarchy Standard (FHS):
veränderliche / dynamische vs. statische und
gemeinsam genutzte vs. nicht gemeinsam genutzte Verzeichnisse
gemeinsam nutzbar |
nicht gemeinsam nutzbar |
|
statisch |
/usr /opt |
/etc /boot |
dynamisch |
/var/mail /var/spool/news |
/var/run /var/lock |
beispielhafte Darstellungen:
Linux Community - Linux User Zeitschrift (Link - Linux User Ausgabe 11 / 2011)
Mounten¶
Das Einbinden von Datenspeichern/Datenträgern und anderen Komponenten (siehe virtuelle Systeme) in das System.
Befehle: (Geräte/Datenträger werden automatisch erkannt und per Klick gemountet)
mount (der eigentliche Hauptbefehl zum Einbinden von Laufwerken/Mounten)
umount (Mounten beenden)
Hinweis: heutzutage bei allen Wechselmedien (optische, USB) automatisches Mounten durch User (technisch: im Userspace → FUSE)
Aktuellen Mount-Status anzeigen:
mount ohne Parameter (oder natürlich alternativ:
cat /etc/mtab
cat /etc/mtab | grep ^/dev/ (nur die Einträge mit /dev am Anfang - also Geräte)
Anweisungen für das System zum Mounten beim Systemstart:
cat /etc/fstab
Darstellung der Techniken und Vorgehensweisen mit einem USB-StickTools:
fdisk , mkfs.ext4 , mount
Alle Analysen wieder mit Hilfe von
lsblk , blkid , fdisk -l , cfdisk
Prozesse¶
Starten von Programmen in der Konsole im Hintergrund (Background - bg):
kate mittwoch.txt &
bzw. natürlich auch:
kdesu kate /etc/hosts &
Konsole meldet Prozess-ID; Recherche im Verzeichnisbaum:
/proc/... (Ordner mit PIDs)
ps in Kombination mit grep zum Suchen bestimmter laufender
Prozesse (z.B. sshd)
Befehle: fg , bg , jobs , ps
ps ax | grep firefox (bitte wieder an ps --help und man ps denken)
hier: grep für „Filtern“ von Daten (Wikipedia Link - global regular expressions print)
Tools:
ps, pstree, pstree -p, top, kill (Signale beachten)
Anm.: „Overkill SIGKILL“ mit -9, Standardsignal SIGTERM ist -15
Prozesseigenschaften:
PID, Status (running, sleeping, zombie)
Tipp: Grafische Übersicht mit Strg + Esc (oder Aufruf/Suche mit System…)