Spickzettel

Linux-Fehlersuche

Die Befehle, die du brauchst, wenn etwas kaputt ist — geschrieben für AlmaLinux / RHEL 9, die Debian-/Ubuntu-Entsprechungen einen Klick entfernt.

SystemüberblickSystemüberblick

  • hostnamectl

    Hostname, OS, Kernel, Virtualisierung

  • cat /etc/os-release

    Distribution und genaue Version

  • uptime

    Laufzeit und Load Average (1/5/15 Min.)

  • who -b; last reboot | head

    Letzter Boot und Neustart-Verlauf

  • free -h

    RAM- und Swap-Auslastung

  • lscpu

    CPU-Modell, Kerne, Architektur

  • ps aux --sort=-%cpu | head

    Größte CPU-Verbraucher

  • ps aux --sort=-%mem | head

    Größte RAM-Verbraucher

  • top

    Prozesse live — 1 für Ansicht pro Kern, M sortiert nach RAM, P nach CPU

  • dnf install epel-release && dnf install htop

    htop installieren (RHEL: aus EPEL)

  • apt install htop

    htop installieren

  • vmstat 1 5

    CPU, RAM, Swap und I/O-Wait, 5 Messungen

  • dnf install sysstat && iostat -xz 1

    Auslastung und Latenz pro Disk

  • apt install sysstat && iostat -xz 1

    Auslastung und Latenz pro Disk

  • dmesg -T --level=err,warn

    Kernel-Fehler und -Warnungen mit Zeitstempel

  • dmesg -T | grep -i -E 'oom|killed process'

    Vom OOM-Killer beendete Prozesse

Dienste (systemd)Dienste (systemd)

  • systemctl status <service>

    Status, Haupt-PID und die letzten Logzeilen

  • systemctl --failed

    Alle fehlgeschlagenen Units

  • systemctl restart <service>

    Dienst neu starten

  • systemctl enable --now <service>

    Aktivieren: jetzt und bei jedem Boot starten

  • systemctl disable --now <service>

    Deaktivieren: jetzt stoppen und beim Boot nicht mehr starten

  • systemctl is-enabled <service>

    Startet beim Boot? (enabled / disabled / masked)

  • systemctl mask --now <service>

    Vorsicht Komplett sperren — lässt sich nicht starten, auch nicht als Abhängigkeit

  • systemctl unmask <service>

    Sperre aufheben (danach bei Bedarf wieder aktivieren)

  • systemctl list-units --type=service --state=running

    Laufende Dienste

  • systemctl cat <service>

    Unit-Datei inklusive Drop-in-Overrides

  • systemctl edit <service>

    Drop-in-Override anlegen (übersteht Paket-Updates)

  • systemctl daemon-reload

    Unit-Dateien nach dem Bearbeiten neu laden

  • systemctl list-timers

    Geplante Timer und ihre nächste Ausführung

  • systemd-analyze blame | head

    Was den letzten Boot gebremst hat

LogsLogs

  • journalctl -u <service> -f

    Log eines Dienstes live mitlesen

  • journalctl -u <service> --since "1 hour ago"

    Dienst-Log der letzten Stunde

  • journalctl -p err -b

    Alle Fehler seit dem aktuellen Boot

  • journalctl -b -1 -p warning

    Warnungen des vorherigen Boots (z. B. nach einem Absturz)

  • journalctl -k -b

    Kernel-Meldungen dieses Boots

  • journalctl --disk-usage

    Speicherplatz des Journals

  • journalctl --vacuum-time=14d

    Vorsicht Journal-Einträge älter als 14 Tage löschen

  • tail -f /var/log/messages

    Allgemeines Systemlog

  • tail -f /var/log/syslog

    Allgemeines Systemlog (Debian 12: rsyslog installieren, sonst journalctl verwenden)

  • tail -f /var/log/secure

    SSH-Logins, sudo, Authentifizierung

  • tail -f /var/log/auth.log

    SSH-Logins, sudo, Authentifizierung

  • grep 'Failed password' /var/log/secure | tail

    Fehlgeschlagene SSH-Logins

  • grep 'Failed password' /var/log/auth.log | tail

    Fehlgeschlagene SSH-Logins

  • tail -50 /var/log/dnf.log

    Letzte Paketinstallationen und Updates

  • tail -50 /var/log/apt/history.log

    Letzte Paketinstallationen und Updates

  • tail -f /var/log/audit/audit.log

    Audit-Log (SELinux-Denials, Logins, sudo)

NetzwerkNetzwerk

  • ip -br a

    Interfaces und IP-Adressen, je eine Zeile

  • ip r

    Routing-Tabelle und Default-Gateway

  • ip -s link show <interface>

    Paket-, Fehler- und Drop-Zähler

  • nmcli device status

    Von NetworkManager verwaltete Interfaces

  • cat /etc/network/interfaces

    Interface-Konfiguration (Debian-Server: ifupdown; Ubuntu: netplan get)

  • nmcli connection show <connection>

    Alle Verbindungseinstellungen (IP, DNS, Gateway)

  • networkctl status

    Link-Status, wenn systemd-networkd verwendet wird (Ubuntu)

  • nmcli connection up <connection>

    Vorsicht Verbindung nach Änderungen neu anwenden

  • systemctl restart networking

    Vorsicht /etc/network/interfaces neu anwenden (Ubuntu: netplan apply)

  • cat /etc/resolv.conf

    Verwendete DNS-Server

  • ss -tulpn

    Lauschende TCP/UDP-Ports und ihr Prozess

  • ss -tnp state established

    Aufgebaute TCP-Verbindungen

  • ping -c 4 <host>

    Grundlegende Erreichbarkeit

  • tracepath <host>

    Weg zu einem Host (standardmäßig installiert, ohne root)

  • dnf install mtr && mtr <host>

    Live-Traceroute mit Paketverlust pro Hop

  • apt install mtr-tiny && mtr <host>

    Live-Traceroute mit Paketverlust pro Hop

  • dnf install bind-utils && dig <domain>

    DNS-Abfrage (mit @1.1.1.1 einen bestimmten Server fragen)

  • apt install dnsutils && dig <domain>

    DNS-Abfrage (mit @1.1.1.1 einen bestimmten Server fragen)

  • curl -sv -o /dev/null https://<host>

    HTTP(S)-Anfrage mit TLS-Handshake und Headern

  • dnf install nmap-ncat && nc -zv <host> <port>

    Ist ein TCP-Port erreichbar?

  • apt install netcat-openbsd && nc -zv <host> <port>

    Ist ein TCP-Port erreichbar?

  • timeout 3 bash -c "</dev/tcp/<host>/<port>" && echo open

    Port-Test ganz ohne Zusatztools

  • tcpdump -i any -nn port <port>

    Traffic auf einem Port mitschneiden (tcpdump installieren)

  • ethtool <interface>

    Link-Geschwindigkeit, Duplex, Link erkannt

Firewall (firewalld)Firewall (ufw / nftables)

  • firewall-cmd --state

    Läuft die Firewall?

  • ufw status verbose

    ufw-Status und -Regeln (apt install ufw — standardmäßig nicht installiert)

  • systemctl enable --now firewalld

    Firewall aktivieren (jetzt und beim Boot)

  • ufw allow OpenSSH && ufw enable

    Firewall aktivieren — vorher SSH erlauben, sonst sperrst du dich aus

  • systemctl disable --now firewalld

    Vorsicht Firewall deaktivieren — nur zum Testen

  • ufw disable

    Vorsicht Firewall deaktivieren — nur zum Testen

  • firewall-cmd --list-all

    Regeln der Standardzone

  • ufw status numbered

    Regeln mit Nummern (zum Löschen)

  • firewall-cmd --get-active-zones

    Zonen und ihre Interfaces

  • firewall-cmd --permanent --add-service=https && firewall-cmd --reload

    Dienst dauerhaft erlauben

  • ufw allow 443/tcp

    Dienst dauerhaft erlauben

  • firewall-cmd --permanent --remove-service=https && firewall-cmd --reload

    Vorsicht Erlaubten Dienst entfernen

  • ufw delete allow 443/tcp

    Vorsicht Erlaubten Dienst entfernen

  • firewall-cmd --permanent --add-port=<port>/tcp && firewall-cmd --reload

    Port dauerhaft erlauben

  • ufw allow <port>/tcp

    Port dauerhaft erlauben

  • firewall-cmd --permanent --remove-port=<port>/tcp && firewall-cmd --reload

    Vorsicht Erlaubten Port entfernen

  • ufw delete allow <port>/tcp

    Vorsicht Erlaubten Port entfernen

  • firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=<ip> port port=22 protocol=tcp accept' && firewall-cmd --reload

    Port nur von einer Quell-IP erlauben

  • ufw allow from <ip> to any port 22 proto tcp

    Port nur von einer Quell-IP erlauben

  • firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=<ip> port port=22 protocol=tcp accept' && firewall-cmd --reload

    Vorsicht Diese Quell-IP-Regel entfernen (gleicher Text wie beim Hinzufügen)

  • ufw delete allow from <ip> to any port 22 proto tcp

    Vorsicht Diese Quell-IP-Regel entfernen (gleicher Text wie beim Hinzufügen)

  • ufw delete <rule-number>

    Vorsicht Regel über ihre Nummer entfernen (siehe ufw status numbered)

  • nft list ruleset

    Das tatsächliche Kernel-Regelwerk (nftables) hinter den Tools

SELinuxAppArmor

  • getenforce

    Enforcing, Permissive oder Disabled

  • aa-status

    Geladene Profile und ihr Modus

  • ausearch -m avc -ts recent

    Letzte SELinux-Denials

  • journalctl -k | grep -i 'apparmor="DENIED"'

    Letzte AppArmor-Denials

  • dnf install setroubleshoot-server && sealert -a /var/log/audit/audit.log

    Denials erklärt, mit vorgeschlagener Lösung

  • ls -Z <path>

    SELinux-Kontext von Dateien

  • restorecon -Rv <path>

    Dateikontexte zurücksetzen — behebt die meisten Probleme mit „verschobenen Dateien“

  • semanage fcontext -a -t httpd_sys_content_t '<path>(/.*)?' && restorecon -Rv <path>

    Eigenes Webverzeichnis dauerhaft labeln

  • semanage fcontext -d '<path>(/.*)?' && restorecon -Rv <path>

    Dieses eigene Label wieder entfernen

  • semanage port -l | grep http

    Ports, an die sich ein Diensttyp binden darf

  • semanage port -a -t http_port_t -p tcp <port>

    Dienst auf einem Nicht-Standard-Port erlauben

  • semanage port -d -t http_port_t -p tcp <port>

    Diese Port-Berechtigung wieder entfernen

  • getsebool -a | grep httpd

    SELinux-Booleans für einen Dienst

  • setsebool -P httpd_can_network_connect on

    Boolean aktivieren: Webservern/Proxys ausgehende Verbindungen erlauben

  • setsebool -P httpd_can_network_connect off

    Diesen Boolean wieder deaktivieren

  • setenforce 0

    Vorsicht Permissive bis zum Neustart — nur zum Testen, danach die Ursache beheben

  • setenforce 1

    Zurück auf Enforcing

  • aa-complain /etc/apparmor.d/<profile>

    Vorsicht Profil in den Complain-Modus (nur loggen) — zum Testen

  • aa-enforce /etc/apparmor.d/<profile>

    Profil zurück in den Enforce-Modus

Pakete (dnf / rpm)Pakete (apt / dpkg)

  • dnf check-update

    Verfügbare Updates

  • apt update && apt list --upgradable

    Verfügbare Updates

  • dnf upgrade

    Alle Updates installieren

  • apt update && apt upgrade

    Alle Updates installieren

  • dnf upgrade --security

    Nur Sicherheitsupdates

  • unattended-upgrade --dry-run -d

    Was unattended-upgrades installieren würde

  • dnf install <package>

    Paket installieren

  • apt install <package>

    Paket installieren

  • dnf provides '*/bin/<command>'

    Welches Paket enthält einen Befehl?

  • apt install apt-file && apt-file update && apt-file search bin/<command>

    Welches Paket enthält einen Befehl?

  • rpm -qf <path>

    Zu welchem installierten Paket gehört eine Datei?

  • dpkg -S <path>

    Zu welchem installierten Paket gehört eine Datei?

  • rpm -qa | grep <name>

    Ist ein Paket installiert, in welcher Version?

  • dpkg -l | grep <name>

    Ist ein Paket installiert, in welcher Version?

  • rpm -V <package>

    Seit der Installation geänderte Dateien

  • dpkg --verify <package>

    Seit der Installation geänderte Dateien

  • dnf history

    Verlauf der Paket-Transaktionen

  • zgrep -h Commandline /var/log/apt/history.log*

    Verlauf der Paket-Transaktionen

  • dnf history undo <id>

    Vorsicht Transaktion rückgängig machen

  • dnf repolist --all

    Repositories und ob sie aktiv sind

  • apt-cache policy

    Aktive Repositories

  • dnf config-manager --set-enabled <repo>

    Repository aktivieren (z. B. crb, das viele EPEL-Pakete brauchen)

  • dnf config-manager --set-disabled <repo>

    Repository deaktivieren

  • dnf install dnf-utils && needs-restarting -r

    Ist nach Updates ein Neustart nötig?

  • cat /var/run/reboot-required 2>/dev/null || echo "no reboot needed"

    Ist nach Updates ein Neustart nötig?

  • needs-restarting -s

    Dienste, die nach Updates einen Neustart brauchen

  • apt install needrestart && needrestart -r l

    Dienste, die nach Updates einen Neustart brauchen

Disks & DateisystemeDisks & Dateisysteme

  • df -hT

    Freier Platz pro Dateisystem, mit Typ

  • df -i

    Freie Inodes — „Disk voll“, obwohl noch Platz frei ist?

  • du -xh --max-depth=1 <path> 2>/dev/null | sort -h

    Größte Verzeichnisse (bleibt auf einem Dateisystem)

  • find / -xdev -type f -size +1G -exec ls -lh {} + 2>/dev/null

    Dateien größer als 1 GB

  • lsof +L1

    Gelöschte, aber noch geöffnete Dateien (Platz wird erst nach Neustart frei)

  • lsblk -f

    Disks, Partitionen, Dateisysteme, Mountpoints

  • findmnt --verify

    /etc/fstab vor dem Neustart prüfen

  • pvs; vgs; lvs

    LVM: Physical Volumes, Volume Groups, Logical Volumes

  • growpart /dev/<disk> <partition-number>

    Partition nach dem Vergrößern der virtuellen Disk erweitern (cloud-utils-growpart)

  • growpart /dev/<disk> <partition-number>

    Partition nach dem Vergrößern der virtuellen Disk erweitern (cloud-guest-utils)

  • lvextend -r -L +<size>G /dev/<vg>/<lv>

    Logical Volume und Dateisystem in einem Schritt vergrößern

  • xfs_info /

    Dateisystem-Details (RHEL-Standard: XFS)

  • tune2fs -l /dev/<partition>

    Dateisystem-Details (Debian-Standard: ext4)

  • smartctl -a /dev/<disk>

    Zustand der Disk (smartmontools installieren)

Benutzer & ZugriffBenutzer & Zugriff

  • id <user>

    UID, Gruppen

  • sudo -l -U <user>

    Was ein Benutzer mit sudo ausführen darf

  • usermod -aG wheel <user>

    sudo-Rechte vergeben (Gruppe wheel)

  • usermod -aG sudo <user>

    sudo-Rechte vergeben (Gruppe sudo)

  • gpasswd -d <user> wheel

    sudo-Rechte entziehen (wirkt ab dem nächsten Login)

  • gpasswd -d <user> sudo

    sudo-Rechte entziehen (wirkt ab dem nächsten Login)

  • last -n 20

    Letzte Logins

  • lastb -n 20

    Letzte fehlgeschlagene Logins (root)

  • chage -l <user>

    Passwortalter und Ablauf

  • faillock --user <user>

    Nach Fehlversuchen gesperrt?

  • faillock --user <user> --reset

    Konto entsperren

  • passwd -S <user>

    Passwortstatus (gesperrt, gesetzt, abgelaufen)

  • sshd -t

    sshd_config vor dem Neustart von sshd testen

  • ssh -vvv <user>@<host>

    Fehlschlagenden SSH-Login vom Client aus debuggen

Zeit & ZertifikateZeit & Zertifikate

  • timedatectl

    Uhrzeit, Zeitzone, NTP-Sync-Status

  • chronyc tracking

    Uhrabweichung und Sync-Qualität (chrony)

  • timedatectl timesync-status

    Sync-Status (systemd-timesyncd, Debian-Standard)

  • chronyc sources -v

    Verwendete NTP-Server

  • timedatectl show-timesync --all

    Verwendete NTP-Server

  • timedatectl set-timezone Europe/Vienna

    Zeitzone setzen

  • openssl s_client -connect <host>:443 -servername <host> </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

    Zertifikat eines entfernten Servers

  • openssl x509 -in <cert.pem> -noout -text

    Zertifikatsdatei ansehen

  • cp <ca.crt> /etc/pki/ca-trust/source/anchors/ && update-ca-trust

    Interner CA systemweit vertrauen

  • cp <ca.crt> /usr/local/share/ca-certificates/ && update-ca-certificates

    Interner CA systemweit vertrauen

Dasselbe im Terminal

$ curl tools.otw.solutions/linux/selinux

Ganzer Spickzettel im Terminal (englisch): curl tools.otw.solutions/linux | less · Debian: ?distro=debian anhängen