Enterprise Linux Administration Cheat Sheet

RHEL 8 / 9 · SLES 15 (SP3–SP6) · Unterschiede gekennzeichnet mit (RHEL) / (SLES)
Keine Treffer – Suchbegriff anpassen.

💻System-Informationen

hostnamectlHostname, OS, Kernel, Architektur, Virtualisierung auf einen Blick
cat /etc/os-releaseDistribution und Version (funktioniert überall)
cat /etc/redhat-releaseRHEL-Version (RHEL)
cat /etc/SuSE-release bzw. SUSEConnect -sSLES-Version und Registrierungsstatus (SLES)
uname -r / uname -aLaufender Kernel / vollständige Kernel-Info
lscpuCPU-Modell, Kerne, Sockel, NUMA-Knoten, Flags
lsmem / free -hSpeicherblöcke / freier und belegter RAM inkl. Cache
dmidecode -t system -t memoryHersteller, Seriennummer, bestückte DIMM-Slots
lspci / lspci -nnkPCI-Geräte / mit Kernel-Treiber und IDs
lshw -shortKompakte Hardwareübersicht (Paket lshw)
dmesg -T | tail -50Kernel-Meldungen mit lesbarem Zeitstempel
uptime / wLaufzeit, Load Average / angemeldete Benutzer
timedatectl / localectlZeitzone und NTP-Status / Sprache und Tastaturlayout
systemd-detect-virtLäuft das System virtuell? (kvm, vmware, none …)
virt-whatAlternative Erkennung der Virtualisierungsplattform
nproc / getconf _NPROCESSORS_ONLNAnzahl nutzbarer CPUs
tuned-adm activeAktives Tuning-Profil (throughput-performance, virtual-guest …)
subscription-manager statusSubskriptionsstatus (RHEL)
SUSEConnect --status-textRegistrierung 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.targetStandard-Target anzeigen / setzen (ersetzt Runlevel)
systemctl reboot / poweroff / haltNeustart / ausschalten
shutdown -r +5 "Wartung"Neustart in 5 Minuten mit Meldung an alle Sitzungen
systemctl isolate rescue.targetIm laufenden Betrieb in den Rescue-Modus wechseln
grubby --info=ALLAlle Boot-Einträge mit Kernel und Parametern (RHEL)
grubby --default-kernelWelcher 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/grubZentrale GRUB-Konfiguration (Timeout, CMDLINE)
grub2-mkconfig -o /boot/grub2/grub.cfgKonfiguration neu erzeugen (BIOS-Boot)
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfgUEFI-Variante (RHEL – Pfad je Distribution)
grub2-mkconfig -o /boot/grub2/grub.cfgAuch unter UEFI der korrekte Pfad (SLES)
grub2-install /dev/sdaBootloader neu schreiben (nur BIOS/MBR)
efibootmgr -vUEFI-Booteinträge und Reihenfolge anzeigen
efibootmgr -o 0002,0001Bootreihenfolge im UEFI setzen
dracut -finitramfs des laufenden Kernels neu bauen
dracut -f --regenerate-allinitramfs für alle installierten Kernel neu bauen
lsinitrd | grep -i multipathPrüfen, ob ein Modul im initramfs enthalten ist
mkinitrdWrapper um dracut (SLES)
systemd-analyze / systemd-analyze blameBoot-Dauer gesamt / je Unit
systemd-analyze critical-chainKritischer Pfad des Bootvorgangs
journalctl -b -1 -p errFehler des vorherigen Bootvorgangs
kexec -l /boot/vmlinuz-... ; kexec -eKernel 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 sshdStatus, PID, letzte Logzeilen eines Dienstes
systemctl start / stop / restart / reload sshdDienst steuern (reload ohne Verbindungsabbruch)
systemctl enable --now sshdAutostart aktivieren und sofort starten
systemctl disable --now sshdAutostart abschalten und stoppen
systemctl mask firewalldDienst hart blockieren (auch als Abhängigkeit)
systemctl unmask firewalldBlockade wieder aufheben
systemctl is-active / is-enabled / is-failed sshdSkripttaugliche Statusabfragen
systemctl --failedAlle fehlgeschlagenen Units – erster Blick bei Störungen
systemctl list-units --type=service --state=runningLaufende Dienste
systemctl list-unit-files --state=enabledAlle für den Autostart aktivierten Units
systemctl cat sshdEffektive Unit-Datei inkl. aller Drop-ins anzeigen
systemctl edit sshdDrop-in-Datei anlegen (Änderung überlebt Updates)
systemctl edit --full sshdKomplette Unit nach /etc/systemd/system kopieren und bearbeiten
systemctl daemon-reloadNach jeder Änderung an Unit-Dateien zwingend nötig
systemctl show sshd -p MemoryCurrent,RestartEinzelne Eigenschaften einer Unit abfragen
systemctl list-dependencies multi-user.targetAbhängigkeitsbaum eines Targets
systemctl set-property httpd.service MemoryMax=2GRessourcenlimit zur Laufzeit setzen (cgroups)
systemd-cgls / systemd-cgtopcgroup-Baum / Live-Ressourcenverbrauch je cgroup
systemd-run --unit=test --on-active=5m /pfad/skriptEinmaligen Job als temporäre Unit starten
systemd-analyze verify /etc/systemd/system/x.serviceUnit-Datei auf Syntaxfehler prüfen

Timer statt Cron

systemctl list-timers --allAlle Timer mit nächster und letzter Ausführung
systemctl enable --now backup.timerTimer 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 -xeLetzte Einträge mit Erklärtexten – Standard bei Störungen
journalctl -u sshd -fLog eines Dienstes live mitlesen
journalctl -b / -b -1Aktueller / vorheriger Bootvorgang
journalctl --list-bootsAlle gespeicherten Bootvorgänge
journalctl -p err -bNur 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 -kNur Kernel-Meldungen (wie dmesg)
journalctl _PID=1234 / _UID=1000Nach Feldern filtern
journalctl -u httpd -o json-prettyVollständige Felder ausgeben (Auswertung/Weiterleitung)
journalctl --disk-usageBelegter Platz des Journals
journalctl --vacuum-time=14dJournal auf 14 Tage kürzen (--vacuum-size=1G analog)
/etc/systemd/journald.confStorage=persistent setzen, damit Logs Reboots überleben
tail -f /var/log/messagesKlassisches Syslog (rsyslog schreibt weiter dorthin)
tail -f /var/log/secureAuthentifizierung (RHEL)
tail -f /var/log/messagesAuth-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.confRotation im Testmodus prüfen (-f erzwingt)
lastb / last / lastlogFehlgeschlagene / 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 httpdPaket installieren (-y ohne Rückfrage)
dnf remove httpd / dnf autoremoveEntfernen / verwaiste Abhängigkeiten aufräumen
dnf update / dnf update --securityAlles aktualisieren / nur Sicherheitsupdates
dnf check-updateVerfügbare Updates auflisten, ohne zu installieren
dnf search begriff / dnf info paketSuchen / Details anzeigen
dnf provides /usr/bin/lsofWelches Paket liefert diese Datei?
dnf list installed | grep kernelInstallierte Pakete filtern
dnf history / dnf history info 42Transaktionshistorie / Details einer Transaktion
dnf history undo 42Transaktion zurückrollen – der Rettungsanker nach Updates
dnf repolist / dnf repolist --allAktive / alle Repositories
dnf config-manager --set-enabled repo-idRepository aktivieren
dnf module list / dnf module enable nodejs:18Application Streams verwalten
dnf needs-restarting -rIst ein Reboot nötig? (Exit-Code auswertbar)
dnf downgrade paketAuf vorherige Version zurück
subscription-manager register --auto-attachSystem registrieren und Subskription zuweisen
subscription-manager repos --list-enabledFreigeschaltete Repositories
rpm -qa | grep -i opensslInstallierte Pakete durchsuchen
rpm -qi / -ql / -qf /pfad/dateiInfo / Dateiliste / Paket zu einer Datei
rpm -qV paket / rpm -VaVeränderte Dateien gegenüber Paketstand prüfen
rpm -q --changelog kernel | headÄnderungshistorie eines Pakets

SLES – zypper

zypper in paket / zypper rm paketInstallieren / entfernen
zypper upPakete innerhalb der Version aktualisieren
zypper dupDistribution Upgrade – für Service-Pack-Migration
zypper patch / zypper lpPatches einspielen / verfügbare Patches auflisten
zypper lp --cve / zypper patch --category securitySicherheitsrelevante Patches
zypper se -s begriff / zypper if paketSuchen mit Versionen / Detailinfo
zypper se --provides /usr/bin/lsofPaket zu einer Datei finden
zypper lr -u / zypper ar URL aliasRepositories auflisten / hinzufügen
zypper mr -e alias / zypper refRepository aktivieren / Metadaten aktualisieren
zypper ps -sProzesse, die veraltete Bibliotheken nutzen (Neustart nötig)
zypper --non-interactive in paketSkripttauglich ohne Rückfragen
SUSEConnect --list-extensionsVerfügbare Module und Erweiterungen
SUSEConnect -p sle-module-legacy/15.5/x86_64Modul aktivieren
transactional-update pkg install paketAtomares 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 -fBlockgeräte mit Dateisystem, UUID und Mountpoint
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,WWN,MODELEigene Spaltenauswahl inkl. WWN
blkidUUIDs und Typen aller Geräte (für /etc/fstab)
lsscsi -sSCSI-Geräte mit Größe und Hersteller
rescan-scsi-bus.sh -aNeue LUNs suchen (Paket sg3_utils)
echo "- - -" > /sys/class/scsi_host/host0/scanManueller Rescan eines HBA ohne Zusatzpaket
echo 1 > /sys/block/sdb/device/rescanGeänderte LUN-Größe einlesen
multipath -llAlle Multipath-Geräte mit Pfadstatus
multipath -rMap neu einlesen nach Änderungen
multipath -f mpathaEinzelne Map entfernen
mpathconf --enable --with_multipathd yMultipathing initial einrichten (RHEL)
/etc/multipath.confAliase, blacklist, path_grouping_policy, no_path_retry
udevadm info -q all -n /dev/sdbAlle udev-Attribute eines Geräts (für eigene Regeln)
udevadm trigger / udevadm control --reloadRegeln neu anwenden / neu einlesen
fcinfo / systool -c fc_host -vFC-HBAs und WWPNs (Zoning)
cat /sys/class/fc_host/host*/port_nameWWPNs schnell auslesen
iscsiadm -m discovery -t st -p 10.0.0.5iSCSI-Targets ermitteln
iscsiadm -m node -T iqn... -lAn iSCSI-Target anmelden (-u abmelden)
nvme list / nvme smart-log /dev/nvme0NVMe-Geräte und Gesundheitswerte
smartctl -a /dev/sdaSMART-Werte einer lokalen Platte
parted -l / parted /dev/sdb printPartitionstabellen anzeigen
parted /dev/sdb mklabel gptGPT-Label anlegen (löscht die Partitionstabelle)
sgdisk -n 1:0:0 -t 1:8e00 /dev/sdbPartition über die ganze Platte als LVM-Typ
partprobe /dev/sdb / partx -u /dev/sdbKernel über neue Partitionstabelle informieren
wipefs -a /dev/sdbAlte 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 / lvsKompakte Übersicht über PVs, VGs und LVs
lvs -a -o +devices,lv_layoutWelche LVs liegen auf welchen Geräten
pvdisplay / vgdisplay / lvdisplayAusführliche Detailansicht
pvcreate /dev/mapper/mpathbGerät als Physical Volume initialisieren
vgcreate datavg /dev/mapper/mpathbVolume Group anlegen
vgextend datavg /dev/mapper/mpathcWeiteres PV aufnehmen
vgreduce datavg /dev/mapper/mpathcPV entfernen (muss vorher leer sein)
pvmove /dev/mapper/mpathcDaten online auf andere PVs verschieben
pvresize /dev/mapper/mpathbVergrößerte LUN im PV nutzbar machen
lvcreate -L 50G -n datalv datavgLV mit fester Größe anlegen
lvcreate -l 100%FREE -n datalv datavgGesamten freien Platz nutzen
lvextend -L +10G -r /dev/datavg/datalvLV und Dateisystem in einem Schritt vergrößern
lvextend -l +100%FREE -r /dev/datavg/datalvRestlichen VG-Platz zuweisen
lvreduce -L -5G -r /dev/datavg/datalvVerkleinern – nur ext4, niemals XFS
lvremove /dev/datavg/datalvLV löschen
lvconvert -m1 /dev/datavg/datalvLV spiegeln
lvcreate -s -L 5G -n snap /dev/datavg/datalvSnapshot als konsistente Backup-Quelle
lvcreate --type thin-pool -L 500G -n pool datavgThin Pool anlegen
lvs -o lv_name,data_percent,metadata_percentAuslastung von Thin Pools überwachen
vgchange -ay datavgVolume Group aktivieren
vgcfgbackup / vgcfgrestore -f datei datavgMetadaten sichern / wiederherstellen
ls /etc/lvm/archive/Automatische Metadaten-Sicherungen vor jeder Änderung
vgimportclone --basevgname neu /dev/sdXGeklonte 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 -hTBelegung mit Dateisystemtyp
df -iInode-Auslastung (voll trotz freiem Platz)
findmnt / findmnt -t xfsMount-Baum übersichtlich, nach Typ filterbar
mount -a / mount /dataAlles aus /etc/fstab / einzelnen Eintrag mounten
mount -o remount,rw /dataOptionen ohne Aushängen ändern
umount /data ; umount -l /dataAushängen / verzögert (lazy) bei blockierten Zugriffen
systemctl daemon-reloadNach Änderungen an /etc/fstab ausführen
mkfs.xfs /dev/datavg/datalvXFS anlegen (Standard bei RHEL)
mkfs.ext4 -L data /dev/sdb1ext4 mit Label anlegen
xfs_info /dataGeometrie, Blockgröße, Log-Bereich
xfs_growfs /dataXFS vergrößern (nur im gemounteten Zustand)
xfs_repair -n /dev/datavg/datalvTrockenlauf 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/sdb1ext4 an LV-Größe anpassen
tune2fs -l /dev/sdb1Superblock-Informationen von ext4
tune2fs -c 0 -i 0 /dev/sdb1Automatische fsck-Intervalle abschalten
e2fsck -f /dev/sdb1ext4 prüfen (nur ausgehängt)
du -sh --max-depth=1 /var | sort -hGrößte Unterverzeichnisse
du -xsh /var/*Ohne Mount-Grenzen zu überschreiten
lsof +D /data / fuser -m /dataWer hält das Dateisystem offen
lsof +L1Gelöschte, aber noch offene Dateien – die häufigste Ursache für „voll trotz du“
xfs_quota -x -c "report -h" /dataQuota-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 listAlle Snapshots mit Typ und Beschreibung
snapper create -d "vor Change 12345"Manuellen Snapshot anlegen
snapper status 42..43 / snapper diff 42..43Geänderte Dateien / inhaltliche Unterschiede
snapper undochange 42..43Einzelne Änderungen zurücknehmen
snapper rollback 42System 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 -hAktive Swap-Bereiche / Speicherübersicht
mkswap /dev/datavg/swaplvSwap-Bereich anlegen
swapon /dev/datavg/swaplvAktivieren (Eintrag in /etc/fstab nicht vergessen)
swapoff -a / swapoff /dev/...Deaktivieren – braucht ausreichend freien RAM
sysctl vm.swappiness / sysctl -w vm.swappiness=10Auslagerungsneigung (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 -mSpeicherverbrauch 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 auxAlle Prozesse in den beiden gängigen Formaten
ps -eo pid,ppid,user,%cpu,%mem,rss,args --sort=-%cpu | headTop-Verbraucher mit eigener Spaltenwahl
ps -eo pid,args --forestProzessbaum
top / htopInteraktive Übersicht (in top: 1=CPUs, M=Speicher, H=Threads)
pgrep -a nginx / pkill -f musterProzesse suchen / gezielt beenden
kill -15 PID / kill -9 PIDSauber beenden / erzwingen
renice -n 10 -p PID / nice -n 10 cmdPriorität ändern / gesetzt starten
ionice -c2 -n7 -p PIDI/O-Priorität senken (z. B. für Backups)
taskset -pc 0-3 PIDProzess an bestimmte CPUs binden
lsof -p PID / ls -l /proc/PID/fdOffene Dateien und Sockets eines Prozesses
strace -f -p PID -e trace=fileSystemaufrufe mitschneiden (Hang-Analyse)
cat /proc/PID/status / limits / cmdlineStatus, effektive Limits und Startparameter
ulimit -a / ulimit -n 65536Limits der Shell anzeigen / setzen
/etc/security/limits.d/90-app.confDauerhafte Limits für Login-Sitzungen
systemctl show dienst -p LimitNOFILELimits von Diensten kommen aus systemd, nicht aus limits.conf
systemd-cgls -u httpd.serviceWelche 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 5CPU, Speicher, Swap-Aktivität (si/so beobachten)
iostat -xz 2Disk-Latenzen: r_await, w_await, %util
mpstat -P ALL 2Auslastung je CPU (%iowait, %steal)
pidstat -d 2 / pidstat -r 2I/O bzw. Speicher je Prozess
sar -A / sar -f /var/log/sa/sa18Historische Daten (Paket sysstat aktivieren)
systemctl enable --now sysstatDatensammlung für sar einschalten
cat /proc/pressure/{cpu,io,memory}Pressure Stall Information – wo klemmt es wirklich
numactl --hardware / numastat -mNUMA-Topologie und Speicherverteilung
perf top / perf record -g -p PID; perf reportCPU-Profiling bis auf Funktionsebene
biolatency / execsnoop / opensnoopeBPF-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-performanceTuning-Profil anzeigen / setzen
ss -s / ss -tulpenSocket-Statistik / lauschende Ports mit Prozess
iftop / nload / sar -n DEV 2Netzwerkdurchsatz live bzw. historisch
dstat -tcmndy / atopKombinierte 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.dirtyKernel-Parameter durchsuchen
sysctl -w net.ipv4.ip_forward=1Parameter zur Laufzeit setzen (nicht persistent)
/etc/sysctl.d/90-custom.confDauerhafte Parameter ablegen
sysctl --systemAlle Konfigurationsdateien neu einlesen
lsmod / modinfo nf_conntrackGeladene Module / Details und Parameter
modprobe modul / modprobe -r modulLaden / entladen
/etc/modprobe.d/blacklist.confModule dauerhaft blockieren
/etc/modules-load.d/custom.confModule beim Booten laden
rpm -q kernel / dnf list installed kernelInstallierte Kernel – mehrere Versionen sind normal
systemctl status kdump / kdumpctl statusIst die Crash-Dump-Sammlung aktiv?
/etc/kdump.conf bzw. /etc/sysconfig/kdumpZielpfad und Kompression konfigurieren
grubby --update-kernel=ALL --args="crashkernel=auto"Speicher für den Crash-Kernel reservieren
echo c > /proc/sysrq-triggerAbsturz erzwingen zum Test – nur auf Testsystemen!
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux vmcoreDump analysieren (bt, log, ps)

🌐Netzwerk

ip -br aKompakte Übersicht aller Interfaces mit Status und IP
ip a / ip a show dev eth0Adressen ausführlich
ip r / ip route get 8.8.8.8Routing-Tabelle / welcher Weg wird genommen
ip -s linkPaketzähler und Fehler je Interface
ip neighARP-/Nachbarschaftstabelle
ss -tulpenLauschende TCP/UDP-Ports mit Prozess und User
ss -tan state establishedBestehende Verbindungen
ethtool eth0 / ethtool -i eth0 / ethtool -S eth0Speed und Duplex / Treiber / Fehlerzähler
ping -c3 / tracepath / mtr -rw zielErreichbarkeit und Pfad
dig +short host / dig -x 10.0.0.5Namensauflösung vorwärts und rückwärts
nc -zv host 443 / curl -Iv https://hostPortprüfung / HTTP-Diagnose
tcpdump -nni eth0 port 443 -w /tmp/t.pcapMitschnitt für Wireshark
hostnamectl set-hostname srv01.example.comHostname dauerhaft setzen

NetworkManager (RHEL, optional auf SLES)

nmcli device status / nmcli connection showGeräte und Profile
nmcli con show "System eth0" | grep ipv4Details eines Profils
nmcli con add type ethernet con-name lan ifname eth0 ip4 10.0.0.10/24 gw4 10.0.0.1Statisches Profil anlegen
nmcli con mod lan ipv4.dns "10.0.0.5 10.0.0.6" ipv4.method manualProfil ändern
nmcli con up lan / nmcli con down lanProfil aktivieren / deaktivieren
nmcli con reloadNach 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 bond0Slave zuordnen
nmcli con add type vlan con-name vlan100 dev eth0 id 100VLAN-Interface
nmtuiTextoberfläche für schnelle Änderungen
cat /proc/net/bonding/bond0Aktiven Slave und Linkstatus prüfen

wicked (SLES-Standard)

wicked show all / wicked show eth0Status aller bzw. eines Interface
wicked ifup eth0 / wicked ifdown eth0Interface aktivieren / deaktivieren
wicked ifreload allKonfiguration neu einlesen und anwenden
/etc/sysconfig/network/ifcfg-eth0Profil: BOOTPROTO, IPADDR, STARTMODE=auto
/etc/sysconfig/network/routesStatische Routen und Default-Gateway
/etc/sysconfig/network/configDNS-Verwaltung (NETCONFIG_DNS_STATIC_SERVERS)
netconfig update -f/etc/resolv.conf aus der Konfiguration neu erzeugen
yast lanMenü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 firewalldLäuft die Firewall?
firewall-cmd --get-active-zonesWelche Zone gilt für welches Interface
firewall-cmd --list-allKomplettes Regelwerk der Standardzone
firewall-cmd --list-all --zone=dmzRegelwerk einer bestimmten Zone
firewall-cmd --add-service=https --permanentDienst dauerhaft freigeben
firewall-cmd --add-port=8080/tcp --permanentEinzelnen Port freigeben
firewall-cmd --remove-service=telnet --permanentFreigabe zurücknehmen
firewall-cmd --add-source=10.0.0.0/24 --zone=trusted --permanentNetzbereich einer Zone zuordnen
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.5 service name=ssh accept' --permanentFeingranulare Regel
firewall-cmd --reloadPermanente Regeln aktivieren – ohne das passiert nichts
firewall-cmd --runtime-to-permanentGetestete Laufzeitregeln dauerhaft übernehmen
firewall-cmd --panic-on / --panic-offAllen Verkehr sofort blockieren / freigeben
nft list rulesetEffektives nftables-Regelwerk (auch das von firewalld erzeugte)
nft -f /etc/nftables/custom.nftEigenes Regelwerk laden
iptables-save / iptables-translateLegacy-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" reneUser mit Home und Shell anlegen
usermod -aG wheel reneZu Gruppe hinzufügen – -a nicht vergessen!
usermod -L rene / usermod -U reneKonto sperren / entsperren
userdel -r reneUser inkl. Home löschen
passwd rene / passwd -e renePasswort setzen / Wechsel beim nächsten Login erzwingen
chage -l renePasswort-Ablaufdaten anzeigen
chage -M 90 -W 14 reneMaximale Gültigkeit und Warnzeit setzen
groupadd -g 2001 dba / groupmod -n neu altGruppe anlegen / umbenennen
id rene / groups reneUID, GID und Gruppenmitgliedschaften
getent passwd rene / getent group dbaAuflösung inkl. LDAP/AD, nicht nur lokale Dateien
/etc/login.defs, /etc/skelVorgaben für neue Konten und Home-Verzeichnisse
visudo / visudo -f /etc/sudoers.d/teamsudo-Regeln mit Syntaxprüfung bearbeiten
sudo -l / sudo -lU reneEigene / fremde sudo-Rechte anzeigen
chmod 750 / chmod g+s verzeichnisRechte / SetGID für gemeinsame Verzeichnisse
chown -R rene:dba /dataEigentümer rekursiv setzen
getfacl /data / setfacl -m u:rene:rwx /dataACLs lesen / setzen
setfacl -d -m g:dba:rwx /dataDefault-ACL: gilt für neu angelegte Dateien
lsattr datei / chattr +i dateiDateiattribute / unveränderbar setzen
ssh-keygen -t ed25519 -C "rene@srv01"Modernes Schlüsselpaar erzeugen
ssh-copy-id rene@zielPublic Key hinterlegen
sshd -t && systemctl reload sshdKonfiguration prüfen, dann neu laden
faillock --user rene / faillock --user rene --resetFehlversuche anzeigen / Sperre aufheben (RHEL)
realm join --user=admin ad.example.comIn Active Directory aufnehmen (SSSD)
sssctl domain-status ad.example.comAD-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 / sestatusAktueller Modus (Enforcing/Permissive/Disabled)
setenforce 0 / setenforce 1Temporär auf Permissive / zurück auf Enforcing
/etc/selinux/configDauerhafter Modus (Reboot nötig)
ls -Z /var/www/html / ps -ZSicherheitskontexte von Dateien / Prozessen
ausearch -m avc -ts recentAktuelle Zugriffsverweigerungen – erster Blick bei Rechtefehlern
audit2why < /var/log/audit/audit.logVerweigerung im Klartext erklären
audit2allow -a -M meinmodul; semodule -i meinmodul.ppPassendes Policy-Modul erzeugen und laden
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"Kontextregel dauerhaft hinterlegen
restorecon -Rv /webKontexte gemäß Regeln neu setzen
semanage port -a -t http_port_t -p tcp 8080Zusätzlichen Port für einen Dienst erlauben
getsebool -a | grep httpdAlle Schalter eines Dienstes
setsebool -P httpd_can_network_connect onSchalter dauerhaft setzen
touch /.autorelabel && rebootKomplettes Relabeling des Dateisystems
sealert -a /var/log/audit/audit.logAuswertung mit Handlungsempfehlung (setroubleshoot)

AppArmor

aa-statusGeladene Profile und ihr Modus
aa-complain /usr/sbin/nginxProfil nur protokollieren lassen
aa-enforce /usr/sbin/nginxProfil durchsetzen
aa-genprof programm / aa-logprofProfil erzeugen / aus Logmeldungen erweitern
/etc/apparmor.d/Profildateien
systemctl reload apparmorProfile 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

timedatectlZeit, Zeitzone, NTP-Synchronisationsstatus
timedatectl set-timezone Europe/BerlinZeitzone setzen
timedatectl set-ntp trueZeitsynchronisation aktivieren
chronyc sources -v / chronyc trackingZeitquellen / Abweichung und Drift
chronyc makestepZeit sofort korrigieren statt langsam anzugleichen
/etc/chrony.conf bzw. /etc/chrony.d/Zeitserver eintragen
crontab -e / crontab -l -u oracleEigene / fremde Crontab
/etc/cron.d/, /etc/cron.daily/Systemweite Jobs
systemctl list-timersModerne Alternative zu Cron
at now + 2 hoursEinmaligen Job planen (mit Strg-D abschließen)
run-parts --test /etc/cron.dailyPrüfen, was ausgeführt würde

📦Container & Virtualisierung

Podman

podman ps -a / podman imagesContainer / Images auflisten
podman run -d --name web -p 8080:80 nginxContainer im Hintergrund starten
podman logs -f web / podman exec -it web bashLog verfolgen / Shell im Container
podman inspect web | lessVollständige Konfiguration
podman statsRessourcenverbrauch live
podman generate systemd --name web --files --newContainer als systemd-Unit verwalten
podman system prune -aUngenutzte Images und Volumes aufräumen
podman system dfSpeicherverbrauch von Images, Containern, Volumes
skopeo inspect docker://registry/image:tagImage prüfen, ohne es zu laden

KVM / libvirt

virsh list --allAlle definierten VMs mit Status
virsh start / shutdown / destroy vm01Starten / sauber herunterfahren / hart ausschalten
virsh autostart vm01Beim Hoststart automatisch mitstarten
virsh dumpxml vm01 > /backup/vm01.xmlDefinition sichern
virsh edit vm01Definition bearbeiten (mit Validierung)
virsh console vm01Serielle Konsole (Beenden mit Strg-])
virsh setmem / setvcpus vm01 --live --configRessourcen ändern, sofort und dauerhaft
virsh domblklist vm01 / virsh domiflist vm01Zugeordnete Platten / Netzwerkkarten
qemu-img info / qemu-img convert -O qcow2 a.raw b.qcow2Image-Info / Format konvertieren
virsh snapshot-list vm01 / snapshot-create-asSnapshots verwalten

💾Backup, Restore & Recovery

tar -czvf /backup/etc.tar.gz --exclude='*.tmp' /etcArchiv mit Ausschlüssen
tar -tzvf /backup/etc.tar.gz | headInhalt prüfen, ohne zu entpacken
tar -xzvf archiv.tar.gz -C /restore etc/hostsEinzelne 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 /dataVollsicherung eines XFS
xfsrestore -f /backup/data.xfsdump /restoreWiederherstellen (-i für interaktive Auswahl)
dd if=/dev/sda of=/backup/mbr.img bs=512 count=1Bootsektor sichern
rear -v mkbackupBootfähige Systemsicherung erstellen (Relax-and-Recover)
rear -v mkrescueNur Rettungsmedium ohne Datensicherung
rear recoverVom Rettungsmedium aus komplett wiederherstellen
/etc/rear/local.confBackup-Ziel (NFS, USB, Tape) und Ausgabeformat
snapper rollback 42Systemzustand zurückrollen (SLES/btrfs)
dnf history undo 42Paket-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 --batchSupport-Datensammlung für Red Hat (früher sosreport)
supportconfig -t /var/logSupport-Datensammlung für SUSE
systemctl --failed; journalctl -p err -bSchneller Gesamtüberblick
dmesg -T -l err,warnKernel-Fehler und Warnungen
rpm -Va | grep -v "^\.\{8\}"Veränderte Paketdateien aufspüren
needs-restarting -r ; zypper ps -sReboot nötig? / veraltete Bibliotheken in Nutzung
abrt-cli list / coredumpctl listAbgestürzte Anwendungen und Coredumps
coredumpctl gdb PIDCoredump direkt im Debugger öffnen
insights-client --statusRed Hat Insights (RHEL)
last -x | head -20Reboots und Shutdowns nachvollziehen

📄Wichtige Dateien & Verzeichnisse

/etc/os-releaseDistribution und Version, distributionsunabhängig
/etc/fstabDauerhafte Mounts – immer mit UUID
/etc/default/grubBootloader-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.confMultipath-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/secureKlassische Logdateien
/var/log/audit/audit.logauditd inkl. SELinux-Meldungen
/var/crash/Kernel-Dumps von kdump
/proc/, /sys/Laufzeitinformationen des Kernels

🔧Shell-Tipps & Praxis-Workflows

man 5 fstab / apropos lvmHandbuchabschnitt gezielt / Stichwortsuche
type -a befehl / command -v befehlHerkunft eines Kommandos (Alias, Funktion, Datei)
history | grep lvextend / !1234Frühere Befehle finden und erneut ausführen
script -a /tmp/change.logSitzung protokollieren – guter Change-Nachweis
tmux new -s wartung / tmux attach -t wartungSitzung überlebt Verbindungsabbrüche
watch -n2 'multipath -ll | grep -c active'Wert wiederholt beobachten
timeout 30 befehlBefehl nach 30 Sekunden abbrechen
for h in $(cat hosts); do ssh $h 'uname -r'; doneEinfache Schleife über mehrere Server
grep -rn "muster" /etc --include="*.conf"Rekursiv in Konfigurationsdateien suchen
diff -u alt neu / vimdiff a bKonfigurationen 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.