Keine Treffer – Suchbegriff anpassen.
💻System-Informationen
| hostnamectl | Hostname, OS, Kernel, Architektur, Virtualisierung auf einen Blick |
| cat /etc/os-release | Distribution und Version (funktioniert überall) |
| cat /etc/redhat-release | RHEL-Version (RHEL) |
| cat /etc/SuSE-release bzw. SUSEConnect -s | SLES-Version und Registrierungsstatus (SLES) |
| uname -r / uname -a | Laufender Kernel / vollständige Kernel-Info |
| lscpu | CPU-Modell, Kerne, Sockel, NUMA-Knoten, Flags |
| lsmem / free -h | Speicherblöcke / freier und belegter RAM inkl. Cache |
| dmidecode -t system -t memory | Hersteller, Seriennummer, bestückte DIMM-Slots |
| lspci / lspci -nnk | PCI-Geräte / mit Kernel-Treiber und IDs |
| lshw -short | Kompakte Hardwareübersicht (Paket lshw) |
| dmesg -T | tail -50 | Kernel-Meldungen mit lesbarem Zeitstempel |
| uptime / w | Laufzeit, Load Average / angemeldete Benutzer |
| timedatectl / localectl | Zeitzone und NTP-Status / Sprache und Tastaturlayout |
| systemd-detect-virt | Läuft das System virtuell? (kvm, vmware, none …) |
| virt-what | Alternative Erkennung der Virtualisierungsplattform |
| nproc / getconf _NPROCESSORS_ONLN | Anzahl nutzbarer CPUs |
| tuned-adm active | Aktives Tuning-Profil (throughput-performance, virtual-guest …) |
| subscription-manager status | Subskriptionsstatus (RHEL) |
| SUSEConnect --status-text | Registrierung und Module (SLES) |
Bestandsaufnahme vor jedem Change:
hostnamectl; uname -r; df -hT; lsblk -f; ip -br a; systemctl --failed
in eine Datei umlenken – das spart bei der Fehlersuche später viel Zeit.
⏻Boot, GRUB2 & Kernel-Auswahl
| systemctl get-default / set-default multi-user.target | Standard-Target anzeigen / setzen (ersetzt Runlevel) |
| systemctl reboot / poweroff / halt | Neustart / ausschalten |
| shutdown -r +5 "Wartung" | Neustart in 5 Minuten mit Meldung an alle Sitzungen |
| systemctl isolate rescue.target | Im laufenden Betrieb in den Rescue-Modus wechseln |
| grubby --info=ALL | Alle Boot-Einträge mit Kernel und Parametern (RHEL) |
| grubby --default-kernel | Welcher Kernel bootet standardmäßig (RHEL) |
| grubby --update-kernel=ALL --args="crashkernel=auto" | Kernel-Parameter dauerhaft ergänzen (RHEL) |
| grubby --update-kernel=ALL --remove-args="quiet" | Parameter wieder entfernen (RHEL) |
| vi /etc/default/grub | Zentrale GRUB-Konfiguration (Timeout, CMDLINE) |
| grub2-mkconfig -o /boot/grub2/grub.cfg | Konfiguration neu erzeugen (BIOS-Boot) |
| grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg | UEFI-Variante (RHEL – Pfad je Distribution) |
| grub2-mkconfig -o /boot/grub2/grub.cfg | Auch unter UEFI der korrekte Pfad (SLES) |
| grub2-install /dev/sda | Bootloader neu schreiben (nur BIOS/MBR) |
| efibootmgr -v | UEFI-Booteinträge und Reihenfolge anzeigen |
| efibootmgr -o 0002,0001 | Bootreihenfolge im UEFI setzen |
| dracut -f | initramfs des laufenden Kernels neu bauen |
| dracut -f --regenerate-all | initramfs für alle installierten Kernel neu bauen |
| lsinitrd | grep -i multipath | Prüfen, ob ein Modul im initramfs enthalten ist |
| mkinitrd | Wrapper um dracut (SLES) |
| systemd-analyze / systemd-analyze blame | Boot-Dauer gesamt / je Unit |
| systemd-analyze critical-chain | Kritischer Pfad des Bootvorgangs |
| journalctl -b -1 -p err | Fehler des vorherigen Bootvorgangs |
| kexec -l /boot/vmlinuz-... ; kexec -e | Kernel ohne Firmware-Durchlauf neu starten |
Notfall: Root-Passwort zurücksetzen
# GRUB-Menue: Eintrag markieren, "e" druecken
# Zeile "linux ..." ans Ende ergaenzen:
rd.break enforcing=0
# Strg-X zum Booten, dann:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel # noetig wegen SELinux
exit; exit # System bootet durch, relabelt und startet erneut
Achtung: Ohne touch /.autorelabel bleibt nach dem
Passwortwechsel der SELinux-Kontext von /etc/shadow falsch – die Anmeldung
schlägt dann trotz richtigem Passwort fehl.
⚙systemd – Units, Dienste & Timer
| systemctl status sshd | Status, PID, letzte Logzeilen eines Dienstes |
| systemctl start / stop / restart / reload sshd | Dienst steuern (reload ohne Verbindungsabbruch) |
| systemctl enable --now sshd | Autostart aktivieren und sofort starten |
| systemctl disable --now sshd | Autostart abschalten und stoppen |
| systemctl mask firewalld | Dienst hart blockieren (auch als Abhängigkeit) |
| systemctl unmask firewalld | Blockade wieder aufheben |
| systemctl is-active / is-enabled / is-failed sshd | Skripttaugliche Statusabfragen |
| systemctl --failed | Alle fehlgeschlagenen Units – erster Blick bei Störungen |
| systemctl list-units --type=service --state=running | Laufende Dienste |
| systemctl list-unit-files --state=enabled | Alle für den Autostart aktivierten Units |
| systemctl cat sshd | Effektive Unit-Datei inkl. aller Drop-ins anzeigen |
| systemctl edit sshd | Drop-in-Datei anlegen (Änderung überlebt Updates) |
| systemctl edit --full sshd | Komplette Unit nach /etc/systemd/system kopieren und bearbeiten |
| systemctl daemon-reload | Nach jeder Änderung an Unit-Dateien zwingend nötig |
| systemctl show sshd -p MemoryCurrent,Restart | Einzelne Eigenschaften einer Unit abfragen |
| systemctl list-dependencies multi-user.target | Abhängigkeitsbaum eines Targets |
| systemctl set-property httpd.service MemoryMax=2G | Ressourcenlimit zur Laufzeit setzen (cgroups) |
| systemd-cgls / systemd-cgtop | cgroup-Baum / Live-Ressourcenverbrauch je cgroup |
| systemd-run --unit=test --on-active=5m /pfad/skript | Einmaligen Job als temporäre Unit starten |
| systemd-analyze verify /etc/systemd/system/x.service | Unit-Datei auf Syntaxfehler prüfen |
Timer statt Cron
| systemctl list-timers --all | Alle Timer mit nächster und letzter Ausführung |
| systemctl enable --now backup.timer | Timer aktivieren (nicht den .service selbst) |
| systemd-analyze calendar "Mon *-*-* 03:00:00" | OnCalendar-Ausdruck testen |
# /etc/systemd/system/backup.service
[Unit]
Description=Naechtliche Sicherung
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Backup taeglich 02:30
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true # nachholen, wenn System aus war
[Install]
WantedBy=timers.target
systemctl daemon-reload && systemctl enable --now backup.timer
Drop-ins statt Kopien: systemctl edit dienst legt
/etc/systemd/system/dienst.service.d/override.conf an. Nur dort Änderungen
vornehmen – Dateien unter /usr/lib/systemd/system werden bei Paket-Updates
überschrieben.
📜journald, rsyslog & Logs
| journalctl -xe | Letzte Einträge mit Erklärtexten – Standard bei Störungen |
| journalctl -u sshd -f | Log eines Dienstes live mitlesen |
| journalctl -b / -b -1 | Aktueller / vorheriger Bootvorgang |
| journalctl --list-boots | Alle gespeicherten Bootvorgänge |
| journalctl -p err -b | Nur Fehler und schlimmer seit dem Booten |
| journalctl --since "2026-08-18 08:00" --until "09:00" | Zeitfenster eingrenzen |
| journalctl --since "-2h" | Letzte zwei Stunden |
| journalctl -k | Nur Kernel-Meldungen (wie dmesg) |
| journalctl _PID=1234 / _UID=1000 | Nach Feldern filtern |
| journalctl -u httpd -o json-pretty | Vollständige Felder ausgeben (Auswertung/Weiterleitung) |
| journalctl --disk-usage | Belegter Platz des Journals |
| journalctl --vacuum-time=14d | Journal auf 14 Tage kürzen (--vacuum-size=1G analog) |
| /etc/systemd/journald.conf | Storage=persistent setzen, damit Logs Reboots überleben |
| tail -f /var/log/messages | Klassisches Syslog (rsyslog schreibt weiter dorthin) |
| tail -f /var/log/secure | Authentifizierung (RHEL) |
| tail -f /var/log/messages | Auth-Meldungen landen hier ebenfalls (SLES) |
| /etc/rsyslog.conf, /etc/rsyslog.d/ | Regeln für Weiterleitung an zentrales Log |
| logger -p local0.info "Change 12345 abgeschlossen" | Eigene Meldung ins Log schreiben |
| logrotate -d /etc/logrotate.conf | Rotation im Testmodus prüfen (-f erzwingt) |
| lastb / last / lastlog | Fehlgeschlagene / erfolgreiche Anmeldungen / letzter Login je User |
Reihenfolge bei Störungen: systemctl --failed →
systemctl status dienst → journalctl -xeu dienst →
dmesg -T -l err. In den meisten Fällen steht die Ursache bereits im zweiten Schritt.
📦Paketverwaltung: dnf & zypper
RHEL – dnf / rpm
| dnf install httpd | Paket installieren (-y ohne Rückfrage) |
| dnf remove httpd / dnf autoremove | Entfernen / verwaiste Abhängigkeiten aufräumen |
| dnf update / dnf update --security | Alles aktualisieren / nur Sicherheitsupdates |
| dnf check-update | Verfügbare Updates auflisten, ohne zu installieren |
| dnf search begriff / dnf info paket | Suchen / Details anzeigen |
| dnf provides /usr/bin/lsof | Welches Paket liefert diese Datei? |
| dnf list installed | grep kernel | Installierte Pakete filtern |
| dnf history / dnf history info 42 | Transaktionshistorie / Details einer Transaktion |
| dnf history undo 42 | Transaktion zurückrollen – der Rettungsanker nach Updates |
| dnf repolist / dnf repolist --all | Aktive / alle Repositories |
| dnf config-manager --set-enabled repo-id | Repository aktivieren |
| dnf module list / dnf module enable nodejs:18 | Application Streams verwalten |
| dnf needs-restarting -r | Ist ein Reboot nötig? (Exit-Code auswertbar) |
| dnf downgrade paket | Auf vorherige Version zurück |
| subscription-manager register --auto-attach | System registrieren und Subskription zuweisen |
| subscription-manager repos --list-enabled | Freigeschaltete Repositories |
| rpm -qa | grep -i openssl | Installierte Pakete durchsuchen |
| rpm -qi / -ql / -qf /pfad/datei | Info / Dateiliste / Paket zu einer Datei |
| rpm -qV paket / rpm -Va | Veränderte Dateien gegenüber Paketstand prüfen |
| rpm -q --changelog kernel | head | Änderungshistorie eines Pakets |
SLES – zypper
| zypper in paket / zypper rm paket | Installieren / entfernen |
| zypper up | Pakete innerhalb der Version aktualisieren |
| zypper dup | Distribution Upgrade – für Service-Pack-Migration |
| zypper patch / zypper lp | Patches einspielen / verfügbare Patches auflisten |
| zypper lp --cve / zypper patch --category security | Sicherheitsrelevante Patches |
| zypper se -s begriff / zypper if paket | Suchen mit Versionen / Detailinfo |
| zypper se --provides /usr/bin/lsof | Paket zu einer Datei finden |
| zypper lr -u / zypper ar URL alias | Repositories auflisten / hinzufügen |
| zypper mr -e alias / zypper ref | Repository aktivieren / Metadaten aktualisieren |
| zypper ps -s | Prozesse, die veraltete Bibliotheken nutzen (Neustart nötig) |
| zypper --non-interactive in paket | Skripttauglich ohne Rückfragen |
| SUSEConnect --list-extensions | Verfügbare Module und Erweiterungen |
| SUSEConnect -p sle-module-legacy/15.5/x86_64 | Modul aktivieren |
| transactional-update pkg install paket | Atomares Update auf SLE Micro / transaktionalen Systemen |
Rollback-Strategie: RHEL nutzt dnf history undo bzw. ReaR/LVM-Snapshots.
SLES setzt auf btrfs mit snapper – vor und nach jeder zypper-Transaktion wird
automatisch ein Snapshot angelegt, Rollback per snapper rollback und Reboot.
🔌Storage, Devices & Multipath
| lsblk -f | Blockgeräte mit Dateisystem, UUID und Mountpoint |
| lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,WWN,MODEL | Eigene Spaltenauswahl inkl. WWN |
| blkid | UUIDs und Typen aller Geräte (für /etc/fstab) |
| lsscsi -s | SCSI-Geräte mit Größe und Hersteller |
| rescan-scsi-bus.sh -a | Neue LUNs suchen (Paket sg3_utils) |
| echo "- - -" > /sys/class/scsi_host/host0/scan | Manueller Rescan eines HBA ohne Zusatzpaket |
| echo 1 > /sys/block/sdb/device/rescan | Geänderte LUN-Größe einlesen |
| multipath -ll | Alle Multipath-Geräte mit Pfadstatus |
| multipath -r | Map neu einlesen nach Änderungen |
| multipath -f mpatha | Einzelne Map entfernen |
| mpathconf --enable --with_multipathd y | Multipathing initial einrichten (RHEL) |
| /etc/multipath.conf | Aliase, blacklist, path_grouping_policy, no_path_retry |
| udevadm info -q all -n /dev/sdb | Alle udev-Attribute eines Geräts (für eigene Regeln) |
| udevadm trigger / udevadm control --reload | Regeln neu anwenden / neu einlesen |
| fcinfo / systool -c fc_host -v | FC-HBAs und WWPNs (Zoning) |
| cat /sys/class/fc_host/host*/port_name | WWPNs schnell auslesen |
| iscsiadm -m discovery -t st -p 10.0.0.5 | iSCSI-Targets ermitteln |
| iscsiadm -m node -T iqn... -l | An iSCSI-Target anmelden (-u abmelden) |
| nvme list / nvme smart-log /dev/nvme0 | NVMe-Geräte und Gesundheitswerte |
| smartctl -a /dev/sda | SMART-Werte einer lokalen Platte |
| parted -l / parted /dev/sdb print | Partitionstabellen anzeigen |
| parted /dev/sdb mklabel gpt | GPT-Label anlegen (löscht die Partitionstabelle) |
| sgdisk -n 1:0:0 -t 1:8e00 /dev/sdb | Partition über die ganze Platte als LVM-Typ |
| partprobe /dev/sdb / partx -u /dev/sdb | Kernel über neue Partitionstabelle informieren |
| wipefs -a /dev/sdb | Alte Dateisystem-Signaturen entfernen |
Vorsicht: wipefs -a, mklabel und sgdisk
arbeiten sofort und ohne Rückfrage. Vor jedem Eingriff lsblk -f und
multipath -ll prüfen – Gerätenamen wie /dev/sdb können
sich nach einem Reboot verschieben.
🗃LVM2
| pvs / vgs / lvs | Kompakte Übersicht über PVs, VGs und LVs |
| lvs -a -o +devices,lv_layout | Welche LVs liegen auf welchen Geräten |
| pvdisplay / vgdisplay / lvdisplay | Ausführliche Detailansicht |
| pvcreate /dev/mapper/mpathb | Gerät als Physical Volume initialisieren |
| vgcreate datavg /dev/mapper/mpathb | Volume Group anlegen |
| vgextend datavg /dev/mapper/mpathc | Weiteres PV aufnehmen |
| vgreduce datavg /dev/mapper/mpathc | PV entfernen (muss vorher leer sein) |
| pvmove /dev/mapper/mpathc | Daten online auf andere PVs verschieben |
| pvresize /dev/mapper/mpathb | Vergrößerte LUN im PV nutzbar machen |
| lvcreate -L 50G -n datalv datavg | LV mit fester Größe anlegen |
| lvcreate -l 100%FREE -n datalv datavg | Gesamten freien Platz nutzen |
| lvextend -L +10G -r /dev/datavg/datalv | LV und Dateisystem in einem Schritt vergrößern |
| lvextend -l +100%FREE -r /dev/datavg/datalv | Restlichen VG-Platz zuweisen |
| lvreduce -L -5G -r /dev/datavg/datalv | Verkleinern – nur ext4, niemals XFS |
| lvremove /dev/datavg/datalv | LV löschen |
| lvconvert -m1 /dev/datavg/datalv | LV spiegeln |
| lvcreate -s -L 5G -n snap /dev/datavg/datalv | Snapshot als konsistente Backup-Quelle |
| lvcreate --type thin-pool -L 500G -n pool datavg | Thin Pool anlegen |
| lvs -o lv_name,data_percent,metadata_percent | Auslastung von Thin Pools überwachen |
| vgchange -ay datavg | Volume Group aktivieren |
| vgcfgbackup / vgcfgrestore -f datei datavg | Metadaten sichern / wiederherstellen |
| ls /etc/lvm/archive/ | Automatische Metadaten-Sicherungen vor jeder Änderung |
| vgimportclone --basevgname neu /dev/sdX | Geklonte LUN mit doppelter VG-UUID einbinden |
Merksatz: lvextend -r spart den zweiten Schritt –
es ruft je nach Dateisystem automatisch xfs_growfs oder resize2fs auf.
Beim Verkleinern gibt es diese Bequemlichkeit nicht, und XFS lässt sich überhaupt
nicht verkleinern.
📁Dateisysteme: XFS, ext4 & btrfs
| df -hT | Belegung mit Dateisystemtyp |
| df -i | Inode-Auslastung (voll trotz freiem Platz) |
| findmnt / findmnt -t xfs | Mount-Baum übersichtlich, nach Typ filterbar |
| mount -a / mount /data | Alles aus /etc/fstab / einzelnen Eintrag mounten |
| mount -o remount,rw /data | Optionen ohne Aushängen ändern |
| umount /data ; umount -l /data | Aushängen / verzögert (lazy) bei blockierten Zugriffen |
| systemctl daemon-reload | Nach Änderungen an /etc/fstab ausführen |
| mkfs.xfs /dev/datavg/datalv | XFS anlegen (Standard bei RHEL) |
| mkfs.ext4 -L data /dev/sdb1 | ext4 mit Label anlegen |
| xfs_info /data | Geometrie, Blockgröße, Log-Bereich |
| xfs_growfs /data | XFS vergrößern (nur im gemounteten Zustand) |
| xfs_repair -n /dev/datavg/datalv | Trockenlauf der Prüfung (Gerät muss ausgehängt sein) |
| xfs_repair -L /dev/... | Letzte Rettung: Log verwerfen – Datenverlust möglich |
| xfs_admin -L neuesLabel /dev/... | Label ändern |
| resize2fs /dev/sdb1 | ext4 an LV-Größe anpassen |
| tune2fs -l /dev/sdb1 | Superblock-Informationen von ext4 |
| tune2fs -c 0 -i 0 /dev/sdb1 | Automatische fsck-Intervalle abschalten |
| e2fsck -f /dev/sdb1 | ext4 prüfen (nur ausgehängt) |
| du -sh --max-depth=1 /var | sort -h | Größte Unterverzeichnisse |
| du -xsh /var/* | Ohne Mount-Grenzen zu überschreiten |
| lsof +D /data / fuser -m /data | Wer hält das Dateisystem offen |
| lsof +L1 | Gelöschte, aber noch offene Dateien – die häufigste Ursache für „voll trotz du“ |
| xfs_quota -x -c "report -h" /data | Quota-Bericht für XFS |
btrfs & snapper (SLES)
| btrfs filesystem show / usage / | Belegung realistisch anzeigen (df täuscht bei btrfs) |
| btrfs subvolume list / | Alle Subvolumes |
| btrfs balance start -dusage=50 / | Platz zurückgewinnen bei „no space left“ trotz freiem df |
| btrfs scrub start / status / | Prüfsummenlauf über alle Daten |
| snapper list | Alle Snapshots mit Typ und Beschreibung |
| snapper create -d "vor Change 12345" | Manuellen Snapshot anlegen |
| snapper status 42..43 / snapper diff 42..43 | Geänderte Dateien / inhaltliche Unterschiede |
| snapper undochange 42..43 | Einzelne Änderungen zurücknehmen |
| snapper rollback 42 | System auf Snapshot zurücksetzen (Reboot nötig) |
fstab-Regel: Immer UUID= oder /dev/mapper/...
verwenden, nie /dev/sdX. Nach jeder Änderung mount -a testen,
bevor rebootet wird – ein Tippfehler in der fstab kann das System in den
Emergency-Modus zwingen. Die Option nofail entschärft das bei Datenplatten.
📈Swap & Speicherverhalten
| swapon --show / free -h | Aktive Swap-Bereiche / Speicherübersicht |
| mkswap /dev/datavg/swaplv | Swap-Bereich anlegen |
| swapon /dev/datavg/swaplv | Aktivieren (Eintrag in /etc/fstab nicht vergessen) |
| swapoff -a / swapoff /dev/... | Deaktivieren – braucht ausreichend freien RAM |
| sysctl vm.swappiness / sysctl -w vm.swappiness=10 | Auslagerungsneigung (Standard 30–60, DB-Server oft 10) |
| cat /proc/meminfo | grep -E "Commit|Swap" | Commit Limit und Swap-Nutzung |
| smem -rs swap / for p in /proc/[0-9]*; do ... | Swap-Verbrauch je Prozess ermitteln |
| dmesg -T | grep -i "out of memory" | Wurde der OOM-Killer aktiv? |
| systemd-cgtop -m | Speicherverbrauch je cgroup/Dienst |
OOM-Killer: Steht im Log Killed process ... (mysqld), war nicht der
Dienst schuld, sondern der Speicher zu knapp. Mehr Swap verzögert das Problem nur –
Limits über systemctl set-property oder mehr RAM sind die eigentliche Lösung.
🧮Prozesse, Limits & cgroups
| ps -ef / ps aux | Alle Prozesse in den beiden gängigen Formaten |
| ps -eo pid,ppid,user,%cpu,%mem,rss,args --sort=-%cpu | head | Top-Verbraucher mit eigener Spaltenwahl |
| ps -eo pid,args --forest | Prozessbaum |
| top / htop | Interaktive Übersicht (in top: 1=CPUs, M=Speicher, H=Threads) |
| pgrep -a nginx / pkill -f muster | Prozesse suchen / gezielt beenden |
| kill -15 PID / kill -9 PID | Sauber beenden / erzwingen |
| renice -n 10 -p PID / nice -n 10 cmd | Priorität ändern / gesetzt starten |
| ionice -c2 -n7 -p PID | I/O-Priorität senken (z. B. für Backups) |
| taskset -pc 0-3 PID | Prozess an bestimmte CPUs binden |
| lsof -p PID / ls -l /proc/PID/fd | Offene Dateien und Sockets eines Prozesses |
| strace -f -p PID -e trace=file | Systemaufrufe mitschneiden (Hang-Analyse) |
| cat /proc/PID/status / limits / cmdline | Status, effektive Limits und Startparameter |
| ulimit -a / ulimit -n 65536 | Limits der Shell anzeigen / setzen |
| /etc/security/limits.d/90-app.conf | Dauerhafte Limits für Login-Sitzungen |
| systemctl show dienst -p LimitNOFILE | Limits von Diensten kommen aus systemd, nicht aus limits.conf |
| systemd-cgls -u httpd.service | Welche Prozesse gehören zur Unit |
Häufige Falle: Bei Diensten unter systemd greifen die Werte aus
/etc/security/limits.conf nicht. Dort zählt ausschließlich
LimitNOFILE= in der Unit bzw. im Drop-in.
📊Performance-Analyse
| vmstat 2 5 | CPU, Speicher, Swap-Aktivität (si/so beobachten) |
| iostat -xz 2 | Disk-Latenzen: r_await, w_await, %util |
| mpstat -P ALL 2 | Auslastung je CPU (%iowait, %steal) |
| pidstat -d 2 / pidstat -r 2 | I/O bzw. Speicher je Prozess |
| sar -A / sar -f /var/log/sa/sa18 | Historische Daten (Paket sysstat aktivieren) |
| systemctl enable --now sysstat | Datensammlung für sar einschalten |
| cat /proc/pressure/{cpu,io,memory} | Pressure Stall Information – wo klemmt es wirklich |
| numactl --hardware / numastat -m | NUMA-Topologie und Speicherverteilung |
| perf top / perf record -g -p PID; perf report | CPU-Profiling bis auf Funktionsebene |
| biolatency / execsnoop / opensnoop | eBPF-Werkzeuge aus bcc-tools |
| bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm]=count(); }' | Ad-hoc-Analyse mit bpftrace |
| tuned-adm list / tuned-adm profile throughput-performance | Tuning-Profil anzeigen / setzen |
| ss -s / ss -tulpen | Socket-Statistik / lauschende Ports mit Prozess |
| iftop / nload / sar -n DEV 2 | Netzwerkdurchsatz live bzw. historisch |
| dstat -tcmndy / atop | Kombinierte Live-Ansichten |
Reihenfolge: erst vmstat (CPU oder Speicher?), dann
iostat -xz (Storage?), dann pidstat/top (welcher Prozess?).
Hohes %steal heißt: das Problem liegt beim Hypervisor, nicht in der VM.
🧠Kernel, Module & kdump
| sysctl -a | grep vm.dirty | Kernel-Parameter durchsuchen |
| sysctl -w net.ipv4.ip_forward=1 | Parameter zur Laufzeit setzen (nicht persistent) |
| /etc/sysctl.d/90-custom.conf | Dauerhafte Parameter ablegen |
| sysctl --system | Alle Konfigurationsdateien neu einlesen |
| lsmod / modinfo nf_conntrack | Geladene Module / Details und Parameter |
| modprobe modul / modprobe -r modul | Laden / entladen |
| /etc/modprobe.d/blacklist.conf | Module dauerhaft blockieren |
| /etc/modules-load.d/custom.conf | Module beim Booten laden |
| rpm -q kernel / dnf list installed kernel | Installierte Kernel – mehrere Versionen sind normal |
| systemctl status kdump / kdumpctl status | Ist die Crash-Dump-Sammlung aktiv? |
| /etc/kdump.conf bzw. /etc/sysconfig/kdump | Zielpfad und Kompression konfigurieren |
| grubby --update-kernel=ALL --args="crashkernel=auto" | Speicher für den Crash-Kernel reservieren |
| echo c > /proc/sysrq-trigger | Absturz erzwingen zum Test – nur auf Testsystemen! |
| crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcore | Dump analysieren (bt, log, ps) |
🌐Netzwerk
| ip -br a | Kompakte Übersicht aller Interfaces mit Status und IP |
| ip a / ip a show dev eth0 | Adressen ausführlich |
| ip r / ip route get 8.8.8.8 | Routing-Tabelle / welcher Weg wird genommen |
| ip -s link | Paketzähler und Fehler je Interface |
| ip neigh | ARP-/Nachbarschaftstabelle |
| ss -tulpen | Lauschende TCP/UDP-Ports mit Prozess und User |
| ss -tan state established | Bestehende Verbindungen |
| ethtool eth0 / ethtool -i eth0 / ethtool -S eth0 | Speed und Duplex / Treiber / Fehlerzähler |
| ping -c3 / tracepath / mtr -rw ziel | Erreichbarkeit und Pfad |
| dig +short host / dig -x 10.0.0.5 | Namensauflösung vorwärts und rückwärts |
| nc -zv host 443 / curl -Iv https://host | Portprüfung / HTTP-Diagnose |
| tcpdump -nni eth0 port 443 -w /tmp/t.pcap | Mitschnitt für Wireshark |
| hostnamectl set-hostname srv01.example.com | Hostname dauerhaft setzen |
NetworkManager (RHEL, optional auf SLES)
| nmcli device status / nmcli connection show | Geräte und Profile |
| nmcli con show "System eth0" | grep ipv4 | Details eines Profils |
| nmcli con add type ethernet con-name lan ifname eth0 ip4 10.0.0.10/24 gw4 10.0.0.1 | Statisches Profil anlegen |
| nmcli con mod lan ipv4.dns "10.0.0.5 10.0.0.6" ipv4.method manual | Profil ändern |
| nmcli con up lan / nmcli con down lan | Profil aktivieren / deaktivieren |
| nmcli con reload | Nach manuellen Dateiedits neu einlesen |
| nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad,miimon=100" | Bond anlegen |
| nmcli con add type ethernet slave-type bond con-name bond0-p1 ifname eth1 master bond0 | Slave zuordnen |
| nmcli con add type vlan con-name vlan100 dev eth0 id 100 | VLAN-Interface |
| nmtui | Textoberfläche für schnelle Änderungen |
| cat /proc/net/bonding/bond0 | Aktiven Slave und Linkstatus prüfen |
wicked (SLES-Standard)
| wicked show all / wicked show eth0 | Status aller bzw. eines Interface |
| wicked ifup eth0 / wicked ifdown eth0 | Interface aktivieren / deaktivieren |
| wicked ifreload all | Konfiguration neu einlesen und anwenden |
| /etc/sysconfig/network/ifcfg-eth0 | Profil: BOOTPROTO, IPADDR, STARTMODE=auto |
| /etc/sysconfig/network/routes | Statische Routen und Default-Gateway |
| /etc/sysconfig/network/config | DNS-Verwaltung (NETCONFIG_DNS_STATIC_SERVERS) |
| netconfig update -f | /etc/resolv.conf aus der Konfiguration neu erzeugen |
| yast lan | Menügeführte Netzwerkkonfiguration |
Nicht direkt editieren: /etc/resolv.conf wird von
NetworkManager bzw. netconfig überschrieben. DNS-Server gehören ins
Verbindungsprofil (nmcli ... ipv4.dns) bzw. nach
/etc/sysconfig/network/config.
🛡Firewall: firewalld & nftables
| firewall-cmd --state / systemctl status firewalld | Läuft die Firewall? |
| firewall-cmd --get-active-zones | Welche Zone gilt für welches Interface |
| firewall-cmd --list-all | Komplettes Regelwerk der Standardzone |
| firewall-cmd --list-all --zone=dmz | Regelwerk einer bestimmten Zone |
| firewall-cmd --add-service=https --permanent | Dienst dauerhaft freigeben |
| firewall-cmd --add-port=8080/tcp --permanent | Einzelnen Port freigeben |
| firewall-cmd --remove-service=telnet --permanent | Freigabe zurücknehmen |
| firewall-cmd --add-source=10.0.0.0/24 --zone=trusted --permanent | Netzbereich einer Zone zuordnen |
| firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.5 service name=ssh accept' --permanent | Feingranulare Regel |
| firewall-cmd --reload | Permanente Regeln aktivieren – ohne das passiert nichts |
| firewall-cmd --runtime-to-permanent | Getestete Laufzeitregeln dauerhaft übernehmen |
| firewall-cmd --panic-on / --panic-off | Allen Verkehr sofort blockieren / freigeben |
| nft list ruleset | Effektives nftables-Regelwerk (auch das von firewalld erzeugte) |
| nft -f /etc/nftables/custom.nft | Eigenes Regelwerk laden |
| iptables-save / iptables-translate | Legacy-Regeln sichern / nach nft übersetzen |
Klassischer Fehler: Regel ohne --permanent gesetzt und
gefreut – nach --reload oder Reboot ist sie weg. Umgekehrt gilt: mit
--permanent gesetzte Regeln wirken erst nach --reload. Bei
Remote-Zugriff immer erst die Laufzeitregel testen, dann
--runtime-to-permanent.
👤User, Gruppen & Rechte
| useradd -m -s /bin/bash -c "Rene Pfeifer" rene | User mit Home und Shell anlegen |
| usermod -aG wheel rene | Zu Gruppe hinzufügen – -a nicht vergessen! |
| usermod -L rene / usermod -U rene | Konto sperren / entsperren |
| userdel -r rene | User inkl. Home löschen |
| passwd rene / passwd -e rene | Passwort setzen / Wechsel beim nächsten Login erzwingen |
| chage -l rene | Passwort-Ablaufdaten anzeigen |
| chage -M 90 -W 14 rene | Maximale Gültigkeit und Warnzeit setzen |
| groupadd -g 2001 dba / groupmod -n neu alt | Gruppe anlegen / umbenennen |
| id rene / groups rene | UID, GID und Gruppenmitgliedschaften |
| getent passwd rene / getent group dba | Auflösung inkl. LDAP/AD, nicht nur lokale Dateien |
| /etc/login.defs, /etc/skel | Vorgaben für neue Konten und Home-Verzeichnisse |
| visudo / visudo -f /etc/sudoers.d/team | sudo-Regeln mit Syntaxprüfung bearbeiten |
| sudo -l / sudo -lU rene | Eigene / fremde sudo-Rechte anzeigen |
| chmod 750 / chmod g+s verzeichnis | Rechte / SetGID für gemeinsame Verzeichnisse |
| chown -R rene:dba /data | Eigentümer rekursiv setzen |
| getfacl /data / setfacl -m u:rene:rwx /data | ACLs lesen / setzen |
| setfacl -d -m g:dba:rwx /data | Default-ACL: gilt für neu angelegte Dateien |
| lsattr datei / chattr +i datei | Dateiattribute / unveränderbar setzen |
| ssh-keygen -t ed25519 -C "rene@srv01" | Modernes Schlüsselpaar erzeugen |
| ssh-copy-id rene@ziel | Public Key hinterlegen |
| sshd -t && systemctl reload sshd | Konfiguration prüfen, dann neu laden |
| faillock --user rene / faillock --user rene --reset | Fehlversuche anzeigen / Sperre aufheben (RHEL) |
| realm join --user=admin ad.example.com | In Active Directory aufnehmen (SSSD) |
| sssctl domain-status ad.example.com | AD-Anbindung prüfen |
Falle: usermod -G dba rene ohne -a ersetzt
alle Nebengruppen des Users – er verliert damit unter Umständen den
sudo-Zugang. Immer usermod -aG verwenden.
🔒SELinux (RHEL) & AppArmor (SLES)
SELinux
| getenforce / sestatus | Aktueller Modus (Enforcing/Permissive/Disabled) |
| setenforce 0 / setenforce 1 | Temporär auf Permissive / zurück auf Enforcing |
| /etc/selinux/config | Dauerhafter Modus (Reboot nötig) |
| ls -Z /var/www/html / ps -Z | Sicherheitskontexte von Dateien / Prozessen |
| ausearch -m avc -ts recent | Aktuelle Zugriffsverweigerungen – erster Blick bei Rechtefehlern |
| audit2why < /var/log/audit/audit.log | Verweigerung im Klartext erklären |
| audit2allow -a -M meinmodul; semodule -i meinmodul.pp | Passendes Policy-Modul erzeugen und laden |
| semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" | Kontextregel dauerhaft hinterlegen |
| restorecon -Rv /web | Kontexte gemäß Regeln neu setzen |
| semanage port -a -t http_port_t -p tcp 8080 | Zusätzlichen Port für einen Dienst erlauben |
| getsebool -a | grep httpd | Alle Schalter eines Dienstes |
| setsebool -P httpd_can_network_connect on | Schalter dauerhaft setzen |
| touch /.autorelabel && reboot | Komplettes Relabeling des Dateisystems |
| sealert -a /var/log/audit/audit.log | Auswertung mit Handlungsempfehlung (setroubleshoot) |
AppArmor
| aa-status | Geladene Profile und ihr Modus |
| aa-complain /usr/sbin/nginx | Profil nur protokollieren lassen |
| aa-enforce /usr/sbin/nginx | Profil durchsetzen |
| aa-genprof programm / aa-logprof | Profil erzeugen / aus Logmeldungen erweitern |
| /etc/apparmor.d/ | Profildateien |
| systemctl reload apparmor | Profile neu laden |
Diagnose-Reflex: Wenn Rechte und Eigentümer stimmen und es
trotzdem „Permission denied“ heißt, ist fast immer SELinux bzw. AppArmor die
Ursache. ausearch -m avc -ts recent bzw. aa-status prüfen –
und nicht reflexhaft abschalten, sondern den Kontext korrigieren.
🕔Zeit, Cron & Automatisierung
| timedatectl | Zeit, Zeitzone, NTP-Synchronisationsstatus |
| timedatectl set-timezone Europe/Berlin | Zeitzone setzen |
| timedatectl set-ntp true | Zeitsynchronisation aktivieren |
| chronyc sources -v / chronyc tracking | Zeitquellen / Abweichung und Drift |
| chronyc makestep | Zeit sofort korrigieren statt langsam anzugleichen |
| /etc/chrony.conf bzw. /etc/chrony.d/ | Zeitserver eintragen |
| crontab -e / crontab -l -u oracle | Eigene / fremde Crontab |
| /etc/cron.d/, /etc/cron.daily/ | Systemweite Jobs |
| systemctl list-timers | Moderne Alternative zu Cron |
| at now + 2 hours | Einmaligen Job planen (mit Strg-D abschließen) |
| run-parts --test /etc/cron.daily | Prüfen, was ausgeführt würde |
📦Container & Virtualisierung
Podman
| podman ps -a / podman images | Container / Images auflisten |
| podman run -d --name web -p 8080:80 nginx | Container im Hintergrund starten |
| podman logs -f web / podman exec -it web bash | Log verfolgen / Shell im Container |
| podman inspect web | less | Vollständige Konfiguration |
| podman stats | Ressourcenverbrauch live |
| podman generate systemd --name web --files --new | Container als systemd-Unit verwalten |
| podman system prune -a | Ungenutzte Images und Volumes aufräumen |
| podman system df | Speicherverbrauch von Images, Containern, Volumes |
| skopeo inspect docker://registry/image:tag | Image prüfen, ohne es zu laden |
KVM / libvirt
| virsh list --all | Alle definierten VMs mit Status |
| virsh start / shutdown / destroy vm01 | Starten / sauber herunterfahren / hart ausschalten |
| virsh autostart vm01 | Beim Hoststart automatisch mitstarten |
| virsh dumpxml vm01 > /backup/vm01.xml | Definition sichern |
| virsh edit vm01 | Definition bearbeiten (mit Validierung) |
| virsh console vm01 | Serielle Konsole (Beenden mit Strg-]) |
| virsh setmem / setvcpus vm01 --live --config | Ressourcen ändern, sofort und dauerhaft |
| virsh domblklist vm01 / virsh domiflist vm01 | Zugeordnete Platten / Netzwerkkarten |
| qemu-img info / qemu-img convert -O qcow2 a.raw b.qcow2 | Image-Info / Format konvertieren |
| virsh snapshot-list vm01 / snapshot-create-as | Snapshots verwalten |
💾Backup, Restore & Recovery
| tar -czvf /backup/etc.tar.gz --exclude='*.tmp' /etc | Archiv mit Ausschlüssen |
| tar -tzvf /backup/etc.tar.gz | head | Inhalt prüfen, ohne zu entpacken |
| tar -xzvf archiv.tar.gz -C /restore etc/hosts | Einzelne Datei gezielt zurückholen |
| rsync -aAXHv --delete /src/ user@ziel:/dst/ | Inkrementell inkl. ACLs, Attribute und Hardlinks |
| rsync -aAX --dry-run --itemize-changes /src/ /dst/ | Trockenlauf mit Änderungsliste |
| xfsdump -l 0 -f /backup/data.xfsdump /data | Vollsicherung eines XFS |
| xfsrestore -f /backup/data.xfsdump /restore | Wiederherstellen (-i für interaktive Auswahl) |
| dd if=/dev/sda of=/backup/mbr.img bs=512 count=1 | Bootsektor sichern |
| rear -v mkbackup | Bootfähige Systemsicherung erstellen (Relax-and-Recover) |
| rear -v mkrescue | Nur Rettungsmedium ohne Datensicherung |
| rear recover | Vom Rettungsmedium aus komplett wiederherstellen |
| /etc/rear/local.conf | Backup-Ziel (NFS, USB, Tape) und Ausgabeformat |
| snapper rollback 42 | Systemzustand zurückrollen (SLES/btrfs) |
| dnf history undo 42 | Paket-Transaktion zurückrollen (RHEL) |
# Konsistentes Backup ueber LVM-Snapshot
lvcreate -s -L 10G -n datasnap /dev/datavg/datalv
mount -o ro,nouuid /dev/datavg/datasnap /mnt/snap # nouuid bei XFS noetig
tar -czf /backup/data.tar.gz -C /mnt/snap .
umount /mnt/snap
lvremove -f /dev/datavg/datasnap
Nach jedem Restore: Bootloader und initramfs prüfen
(grub2-mkconfig, dracut -f), UUIDs in /etc/fstab gegen
blkid abgleichen und bei RHEL touch /.autorelabel setzen.
Ein Restore-Test gehört mindestens einmal jährlich in den Plan.
🚨Diagnose & Support-Daten
| sos report --batch | Support-Datensammlung für Red Hat (früher sosreport) |
| supportconfig -t /var/log | Support-Datensammlung für SUSE |
| systemctl --failed; journalctl -p err -b | Schneller Gesamtüberblick |
| dmesg -T -l err,warn | Kernel-Fehler und Warnungen |
| rpm -Va | grep -v "^\.\{8\}" | Veränderte Paketdateien aufspüren |
| needs-restarting -r ; zypper ps -s | Reboot nötig? / veraltete Bibliotheken in Nutzung |
| abrt-cli list / coredumpctl list | Abgestürzte Anwendungen und Coredumps |
| coredumpctl gdb PID | Coredump direkt im Debugger öffnen |
| insights-client --status | Red Hat Insights (RHEL) |
| last -x | head -20 | Reboots und Shutdowns nachvollziehen |
📄Wichtige Dateien & Verzeichnisse
| /etc/os-release | Distribution und Version, distributionsunabhängig |
| /etc/fstab | Dauerhafte Mounts – immer mit UUID |
| /etc/default/grub | Bootloader-Grundkonfiguration |
| /etc/systemd/system/ | Eigene Units und Drop-ins (hat Vorrang) |
| /usr/lib/systemd/system/ | Mitgelieferte Units – nie direkt ändern |
| /etc/sysctl.d/ | Dauerhafte Kernel-Parameter |
| /etc/security/limits.d/ | Limits für Login-Sitzungen |
| /etc/multipath.conf | Multipath-Konfiguration |
| /etc/lvm/archive/, /etc/lvm/backup/ | LVM-Metadaten vor und nach jeder Änderung |
| /etc/NetworkManager/system-connections/ | Verbindungsprofile (RHEL) |
| /etc/sysconfig/network/ifcfg-* | Netzwerkprofile (SLES) |
| /etc/sudoers.d/ | sudo-Regeln modular ablegen |
| /var/log/messages, /var/log/secure | Klassische Logdateien |
| /var/log/audit/audit.log | auditd inkl. SELinux-Meldungen |
| /var/crash/ | Kernel-Dumps von kdump |
| /proc/, /sys/ | Laufzeitinformationen des Kernels |
🔧Shell-Tipps & Praxis-Workflows
| man 5 fstab / apropos lvm | Handbuchabschnitt gezielt / Stichwortsuche |
| type -a befehl / command -v befehl | Herkunft eines Kommandos (Alias, Funktion, Datei) |
| history | grep lvextend / !1234 | Frühere Befehle finden und erneut ausführen |
| script -a /tmp/change.log | Sitzung protokollieren – guter Change-Nachweis |
| tmux new -s wartung / tmux attach -t wartung | Sitzung überlebt Verbindungsabbrüche |
| watch -n2 'multipath -ll | grep -c active' | Wert wiederholt beobachten |
| timeout 30 befehl | Befehl nach 30 Sekunden abbrechen |
| for h in $(cat hosts); do ssh $h 'uname -r'; done | Einfache Schleife über mehrere Server |
| grep -rn "muster" /etc --include="*.conf" | Rekursiv in Konfigurationsdateien suchen |
| diff -u alt neu / vimdiff a b | Konfigurationen vergleichen |
| cp -a datei datei.$(date +%F) | Sicherungskopie vor jeder Änderung |
Neue SAN-LUN einbinden und Dateisystem erweitern
rescan-scsi-bus.sh -a # oder: echo "- - -" > /sys/class/scsi_host/host0/scan
multipath -r && multipath -ll # neue Map, alle Pfade active ready
pvcreate /dev/mapper/mpathc
vgextend datavg /dev/mapper/mpathc
vgs # freier Platz sichtbar?
lvextend -l +100%FREE -r /dev/datavg/datalv # LV und Dateisystem in einem Schritt
df -hT /data
Bestehende LUN wurde im Storage vergrößert
for d in $(multipath -ll mpathb | grep -o 'sd[a-z]*'); do
echo 1 > /sys/block/$d/device/rescan
done
multipathd -k'resize map mpathb'
pvresize /dev/mapper/mpathb
lvextend -l +100%FREE -r /dev/datavg/datalv
Dienst startet nicht
systemctl --failed
systemctl status httpd -l
journalctl -xeu httpd --since "-15min"
systemd-analyze verify /etc/systemd/system/httpd.service.d/override.conf
ausearch -m avc -ts recent | grep httpd # SELinux als Ursache?
ss -tulpn | grep :80 # Port schon belegt?
systemctl daemon-reload && systemctl restart httpd
Dateisystem voll
df -hT ; df -i # Platz oder Inodes?
du -xsh /var/* 2>/dev/null | sort -h | tail
lsof +L1 | head # geloeschte, offene Dateien
journalctl --disk-usage && journalctl --vacuum-time=14d
lvs ; vgs # ist Platz in der VG?
lvextend -L +5G -r /dev/rootvg/varlv
Merksatz: Unter Linux ist fast alles eine Datei oder eine Unit.
Temporäre Änderungen mit ip, sysctl -w, mount oder
firewall-cmd ohne --permanent sind nach dem Reboot weg –
dauerhaft wird es erst in /etc/sysctl.d, /etc/fstab,
im Verbindungsprofil oder im systemd-Drop-in.