Dasselbe im Terminal
$ curl tools.otw.solutions/linux/selinuxGanzer Spickzettel im Terminal (englisch): curl tools.otw.solutions/linux | less · Debian: ?distro=debian anhängen
Spickzettel
Die Befehle, die du brauchst, wenn etwas kaputt ist — geschrieben für AlmaLinux / RHEL 9, die Debian-/Ubuntu-Entsprechungen einen Klick entfernt.
hostnamectlHostname, OS, Kernel, Virtualisierung
cat /etc/os-releaseDistribution und genaue Version
uptimeLaufzeit und Load Average (1/5/15 Min.)
who -b; last reboot | headLetzter Boot und Neustart-Verlauf
free -hRAM- und Swap-Auslastung
lscpuCPU-Modell, Kerne, Architektur
ps aux --sort=-%cpu | headGrößte CPU-Verbraucher
ps aux --sort=-%mem | headGrößte RAM-Verbraucher
topProzesse live — 1 für Ansicht pro Kern, M sortiert nach RAM, P nach CPU
dnf install epel-release && dnf install htophtop installieren (RHEL: aus EPEL)
apt install htophtop installieren
vmstat 1 5CPU, RAM, Swap und I/O-Wait, 5 Messungen
dnf install sysstat && iostat -xz 1Auslastung und Latenz pro Disk
apt install sysstat && iostat -xz 1Auslastung und Latenz pro Disk
dmesg -T --level=err,warnKernel-Fehler und -Warnungen mit Zeitstempel
dmesg -T | grep -i -E 'oom|killed process'Vom OOM-Killer beendete Prozesse
systemctl status <service>Status, Haupt-PID und die letzten Logzeilen
systemctl --failedAlle 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=runningLaufende Dienste
systemctl cat <service>Unit-Datei inklusive Drop-in-Overrides
systemctl edit <service>Drop-in-Override anlegen (übersteht Paket-Updates)
systemctl daemon-reloadUnit-Dateien nach dem Bearbeiten neu laden
systemctl list-timersGeplante Timer und ihre nächste Ausführung
systemd-analyze blame | headWas den letzten Boot gebremst hat
journalctl -u <service> -fLog eines Dienstes live mitlesen
journalctl -u <service> --since "1 hour ago"Dienst-Log der letzten Stunde
journalctl -p err -bAlle Fehler seit dem aktuellen Boot
journalctl -b -1 -p warningWarnungen des vorherigen Boots (z. B. nach einem Absturz)
journalctl -k -bKernel-Meldungen dieses Boots
journalctl --disk-usageSpeicherplatz des Journals
journalctl --vacuum-time=14dVorsicht Journal-Einträge älter als 14 Tage löschen
tail -f /var/log/messagesAllgemeines Systemlog
tail -f /var/log/syslogAllgemeines Systemlog (Debian 12: rsyslog installieren, sonst journalctl verwenden)
tail -f /var/log/secureSSH-Logins, sudo, Authentifizierung
tail -f /var/log/auth.logSSH-Logins, sudo, Authentifizierung
grep 'Failed password' /var/log/secure | tailFehlgeschlagene SSH-Logins
grep 'Failed password' /var/log/auth.log | tailFehlgeschlagene SSH-Logins
tail -50 /var/log/dnf.logLetzte Paketinstallationen und Updates
tail -50 /var/log/apt/history.logLetzte Paketinstallationen und Updates
tail -f /var/log/audit/audit.logAudit-Log (SELinux-Denials, Logins, sudo)
ip -br aInterfaces und IP-Adressen, je eine Zeile
ip rRouting-Tabelle und Default-Gateway
ip -s link show <interface>Paket-, Fehler- und Drop-Zähler
nmcli device statusVon NetworkManager verwaltete Interfaces
cat /etc/network/interfacesInterface-Konfiguration (Debian-Server: ifupdown; Ubuntu: netplan get)
nmcli connection show <connection>Alle Verbindungseinstellungen (IP, DNS, Gateway)
networkctl statusLink-Status, wenn systemd-networkd verwendet wird (Ubuntu)
nmcli connection up <connection>Vorsicht Verbindung nach Änderungen neu anwenden
systemctl restart networkingVorsicht /etc/network/interfaces neu anwenden (Ubuntu: netplan apply)
cat /etc/resolv.confVerwendete DNS-Server
ss -tulpnLauschende TCP/UDP-Ports und ihr Prozess
ss -tnp state establishedAufgebaute 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 openPort-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-cmd --stateLäuft die Firewall?
ufw status verboseufw-Status und -Regeln (apt install ufw — standardmäßig nicht installiert)
systemctl enable --now firewalldFirewall aktivieren (jetzt und beim Boot)
ufw allow OpenSSH && ufw enableFirewall aktivieren — vorher SSH erlauben, sonst sperrst du dich aus
systemctl disable --now firewalldVorsicht Firewall deaktivieren — nur zum Testen
ufw disableVorsicht Firewall deaktivieren — nur zum Testen
firewall-cmd --list-allRegeln der Standardzone
ufw status numberedRegeln mit Nummern (zum Löschen)
firewall-cmd --get-active-zonesZonen und ihre Interfaces
firewall-cmd --permanent --add-service=https && firewall-cmd --reloadDienst dauerhaft erlauben
ufw allow 443/tcpDienst dauerhaft erlauben
firewall-cmd --permanent --remove-service=https && firewall-cmd --reloadVorsicht Erlaubten Dienst entfernen
ufw delete allow 443/tcpVorsicht Erlaubten Dienst entfernen
firewall-cmd --permanent --add-port=<port>/tcp && firewall-cmd --reloadPort dauerhaft erlauben
ufw allow <port>/tcpPort dauerhaft erlauben
firewall-cmd --permanent --remove-port=<port>/tcp && firewall-cmd --reloadVorsicht Erlaubten Port entfernen
ufw delete allow <port>/tcpVorsicht Erlaubten Port entfernen
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=<ip> port port=22 protocol=tcp accept' && firewall-cmd --reloadPort nur von einer Quell-IP erlauben
ufw allow from <ip> to any port 22 proto tcpPort 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 --reloadVorsicht Diese Quell-IP-Regel entfernen (gleicher Text wie beim Hinzufügen)
ufw delete allow from <ip> to any port 22 proto tcpVorsicht 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 rulesetDas tatsächliche Kernel-Regelwerk (nftables) hinter den Tools
getenforceEnforcing, Permissive oder Disabled
aa-statusGeladene Profile und ihr Modus
ausearch -m avc -ts recentLetzte SELinux-Denials
journalctl -k | grep -i 'apparmor="DENIED"'Letzte AppArmor-Denials
dnf install setroubleshoot-server && sealert -a /var/log/audit/audit.logDenials 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 httpPorts, 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 httpdSELinux-Booleans für einen Dienst
setsebool -P httpd_can_network_connect onBoolean aktivieren: Webservern/Proxys ausgehende Verbindungen erlauben
setsebool -P httpd_can_network_connect offDiesen Boolean wieder deaktivieren
setenforce 0Vorsicht Permissive bis zum Neustart — nur zum Testen, danach die Ursache beheben
setenforce 1Zurü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
dnf check-updateVerfügbare Updates
apt update && apt list --upgradableVerfügbare Updates
dnf upgradeAlle Updates installieren
apt update && apt upgradeAlle Updates installieren
dnf upgrade --securityNur Sicherheitsupdates
unattended-upgrade --dry-run -dWas 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 historyVerlauf 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 --allRepositories und ob sie aktiv sind
apt-cache policyAktive 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 -rIst 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 -sDienste, die nach Updates einen Neustart brauchen
apt install needrestart && needrestart -r lDienste, die nach Updates einen Neustart brauchen
df -hTFreier Platz pro Dateisystem, mit Typ
df -iFreie Inodes — „Disk voll“, obwohl noch Platz frei ist?
du -xh --max-depth=1 <path> 2>/dev/null | sort -hGrößte Verzeichnisse (bleibt auf einem Dateisystem)
find / -xdev -type f -size +1G -exec ls -lh {} + 2>/dev/nullDateien größer als 1 GB
lsof +L1Gelöschte, aber noch geöffnete Dateien (Platz wird erst nach Neustart frei)
lsblk -fDisks, Partitionen, Dateisysteme, Mountpoints
findmnt --verify/etc/fstab vor dem Neustart prüfen
pvs; vgs; lvsLVM: 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)
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> wheelsudo-Rechte entziehen (wirkt ab dem nächsten Login)
gpasswd -d <user> sudosudo-Rechte entziehen (wirkt ab dem nächsten Login)
last -n 20Letzte Logins
lastb -n 20Letzte fehlgeschlagene Logins (root)
chage -l <user>Passwortalter und Ablauf
faillock --user <user>Nach Fehlversuchen gesperrt?
faillock --user <user> --resetKonto entsperren
passwd -S <user>Passwortstatus (gesperrt, gesetzt, abgelaufen)
sshd -tsshd_config vor dem Neustart von sshd testen
ssh -vvv <user>@<host>Fehlschlagenden SSH-Login vom Client aus debuggen
timedatectlUhrzeit, Zeitzone, NTP-Sync-Status
chronyc trackingUhrabweichung und Sync-Qualität (chrony)
timedatectl timesync-statusSync-Status (systemd-timesyncd, Debian-Standard)
chronyc sources -vVerwendete NTP-Server
timedatectl show-timesync --allVerwendete NTP-Server
timedatectl set-timezone Europe/ViennaZeitzone setzen
openssl s_client -connect <host>:443 -servername <host> </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -datesZertifikat eines entfernten Servers
openssl x509 -in <cert.pem> -noout -textZertifikatsdatei ansehen
cp <ca.crt> /etc/pki/ca-trust/source/anchors/ && update-ca-trustInterner CA systemweit vertrauen
cp <ca.crt> /usr/local/share/ca-certificates/ && update-ca-certificatesInterner CA systemweit vertrauen
Kein Befehl passt zu diesem Filter.
$ curl tools.otw.solutions/linux/selinuxGanzer Spickzettel im Terminal (englisch): curl tools.otw.solutions/linux | less · Debian: ?distro=debian anhängen