Bash-Befehlssammlung für Linux-Server
Die wichtigsten Linux-Befehle für Server-Administration – Systeminfo, Dateien und Rechte, Benutzer, Pakete, systemd, Logs mit journalctl, Netzwerk, DNS, Firewall, SSH, Datenträger, Webserver, Backups und Fehlersuche.
Bash-Befehlssammlung für Linux-Server
Die Befehle, die auf Linux-Servern immer wieder gebraucht werden – mit Schwerpunkt auf Debian/Ubuntu . Wo sich RHEL-basierte Systeme (Rocky, Alma, Fedora) unterscheiden, steht es dabei.
Warnung
Auf produktiven Servern gilt: erst lesen, dann ändern. Konfigurationsdateien vor dem Bearbeiten sichern (cp datei datei.bak), Konfiguration vor dem Neuladen testen (apachectl configtest, nginx -t, sshd -t) und bei Firewall- oder SSH-Änderungen eine zweite Sitzung offen lassen .
Schnellübersicht
Thema
Erste Befehle
System
hostnamectl, uptime, free -h, lsblk
Dateien und Navigation
ls -la, find, grep -r, tail -f
Rechte und Besitz
chmod, chown, stat
Benutzer und sudo
id, useradd, usermod -aG
Pakete
apt update, apt upgrade, dnf
Dienste mit systemd
systemctl status, restart, enable
Logs
journalctl -u, journalctl -f
Prozesse und Last
top, htop, ps aux, kill
Netzwerk
ip a, ip r, ss -tulpn, ping, curl
DNS
dig, resolvectl status
Firewall
ufw status, nft list ruleset
SSH
ssh-keygen, ssh-copy-id, sshd -t
Datenträger
df -h, du -sh, ncdu, smartctl
Webserver und Zertifikate
apachectl configtest, nginx -t, openssl
Archive, Kopie, Backup
tar, rsync, scp
Zeitpläne
crontab -e, systemctl list-timers
Docker
docker ps, docker logs, docker compose
Bash-Helfer
Pipes, Umleitungen, Verlauf, Tastenkürzel
1. System
Befehl
Zweck
hostnamectl
Hostname, Betriebssystem, Kernel, Virtualisierung
cat /etc/os-release
Distribution und Version
uname -r
Kernel-Version
uptime
Laufzeit und Load-Average (1/5/15 Minuten)
free -h
Arbeitsspeicher und Swap
nproc · lscpu
Anzahl CPU-Kerne · CPU-Details
lsblk
Datenträger und Partitionen als Baum
lspci · lsusb
PCI- und USB-Geräte
dmidecode -t system 🔒
Hersteller, Modell, Seriennummer
timedatectl
Uhrzeit, Zeitzone, NTP-Synchronisierung
last -n 10
letzte Anmeldungen
who · w
wer ist gerade angemeldet (und was läuft)?
systemctl reboot 🔒
neu starten
[ -f /var/run/reboot-required ] && cat /var/run/reboot-required
braucht der Server einen Neustart? (Debian/Ubuntu)
Kurzer Server-Steckbrief:
bash Kopieren
echo "Host: $(hostname -f) "
echo "System: $(. /etc/os-release; echo "$PRETTY_NAME " ) "
echo "Kernel: $(uname -r) "
echo "Laufzeit:$(uptime -p) "
echo "Last: $(cut -d' ' -f1-3 /proc/loadavg) "
free -h | awk '/^Mem/ {print "RAM: " $3 " von " $2 " belegt"}'
df -h / | awk 'NR==2 {print "Root-FS: " $3 " von " $2 " belegt (" $5 ")"}'
ip -4 -br addr show scope global
2. Dateien und Navigation
Befehl
Zweck
pwd
aktuelles Verzeichnis
cd -
zurück ins vorherige Verzeichnis
ls -lah
Inhalt mit versteckten Dateien, Rechten und lesbaren Größen
ls -lt | head
zuletzt geänderte Dateien zuerst
tree -L 2
Verzeichnisbaum, zwei Ebenen tief (Paket tree)
cp -a quelle ziel
kopieren mit Rechten und Zeitstempeln
mv alt neu
verschieben oder umbenennen
rm -i datei
löschen mit Rückfrage
mkdir -p a/b/c
Verzeichnisse samt Zwischenebenen anlegen
less datei
Datei seitenweise lesen (/ sucht, q beendet)
head -n 50 datei · tail -n 50 datei
Anfang · Ende einer Datei
tail -f /var/log/syslog
Datei live mitlesen
nano datei · vim datei
Datei bearbeiten
diff -u alt neu
Unterschiede zweier Dateien
ln -s ziel link
symbolischen Link anlegen
Suchen:
Befehl
Zweck
find /etc -name "*.conf"
Dateien nach Namen
find /var/log -mtime -1
in den letzten 24 Stunden geändert
find / -xdev -size +500M 2>/dev/null
große Dateien auf dem Root-Dateisystem
grep -rn "ServerName" /etc/apache2/
Text in Dateien suchen, mit Zeilennummer
grep -v "^#" datei | grep -v "^$"
Konfiguration ohne Kommentare und Leerzeilen
grep -i fehler datei
ohne Groß-/Kleinschreibung
which <befehl> · type <befehl>
wo liegt ein Programm?
Gefahr
rm -rf fragt nicht nach und kennt keinen Papierkorb. Vor dem Löschen mit Platzhaltern erst ls mit demselben Muster ausführen und das Ergebnis prüfen.
3. Rechte und Besitz
Befehl
Zweck
ls -l datei
Rechte, Besitzer, Gruppe
stat datei
alle Metadaten inkl. Rechte als Zahl
chmod 640 datei
Rechte als Zahl setzen (Besitzer rw, Gruppe r, Rest nichts)
chmod u+x skript.sh
Besitzer darf ausführen
chmod -R g+rX ordner
Gruppe darf lesen, Ordner betreten (großes X nur für Ordner)
chown user:gruppe datei 🔒
Besitzer und Gruppe ändern
chown -R www-data:www-data /var/www/site 🔒
rekursiv, z. B. für Webinhalte
namei -l /pfad/zur/datei
Rechte entlang des gesamten Pfades – findet das Verzeichnis, an dem der Zugriff scheitert
getfacl datei · setfacl -m u:name:r datei
erweiterte Rechte (ACL)
Zahl
Bedeutung
Typisch für
600
nur Besitzer lesen/schreiben
private Schlüssel, Passwortdateien
640
Besitzer rw, Gruppe r
Konfiguration mit Geheimnissen
644
alle lesen, Besitzer schreibt
normale Dateien
750
Besitzer alles, Gruppe lesen/betreten
Programm- und Datenverzeichnisse
755
alle lesen/betreten, Besitzer schreibt
öffentliche Verzeichnisse, Programme
Warnung
chmod 777 ist nie die Lösung. Wenn ein Dienst nicht zugreifen darf, mit namei -l den Pfad prüfen und gezielt Besitzer oder Gruppe anpassen.
4. Benutzer und sudo
Befehl
Zweck
whoami · id
aktueller Benutzer · UID, GID und Gruppen
id <name>
Gruppen eines anderen Benutzers
getent passwd <name>
Kontoeintrag (auch aus LDAP/AD)
adduser <name> 🔒
Benutzer interaktiv anlegen (Debian/Ubuntu)
useradd -m -s /bin/bash <name> 🔒
Benutzer anlegen (alle Distributionen)
passwd <name> 🔒
Passwort setzen
usermod -aG sudo <name> 🔒
zur sudo-Gruppe hinzufügen (RHEL: Gruppe wheel)
usermod -L <name> · usermod -U <name> 🔒
Konto sperren · entsperren
chage -l <name>
Passwortablauf anzeigen
userdel -r <name> 🔒
Benutzer samt Home-Verzeichnis löschen
sudo -i
Root-Shell
sudo -u <name> <befehl>
Befehl als anderer Benutzer ausführen
sudo -l
was darf ich per sudo?
visudo 🔒
sudo-Regeln sicher bearbeiten (mit Syntaxprüfung)
Hinweis
Neue Gruppenmitgliedschaften gelten erst nach einer neuen Anmeldung. In der laufenden Sitzung hilft newgrp <gruppe>.
5. Pakete und Updates
Debian/Ubuntu (apt):
Befehl
Zweck
apt update 🔒
Paketlisten aktualisieren
apt list --upgradable
verfügbare Updates
apt upgrade 🔒
Updates installieren
apt full-upgrade 🔒
Updates inkl. Abhängigkeitswechsel (neue Kernel o. Ä.)
apt install <paket> 🔒
Paket installieren
apt remove <paket> · apt purge <paket> 🔒
entfernen · samt Konfiguration entfernen
apt autoremove 🔒
nicht mehr benötigte Abhängigkeiten entfernen
apt search <begriff> · apt show <paket>
suchen · Details
dpkg -l | grep <name>
ist ein Paket installiert?
dpkg -S /pfad/datei
zu welchem Paket gehört eine Datei?
apt-mark hold <paket> 🔒
Paket von Updates ausnehmen
dpkg-reconfigure -plow unattended-upgrades 🔒
automatische Sicherheitsupdates einrichten
RHEL, Rocky, Alma, Fedora (dnf):
Befehl
Zweck
dnf check-update
verfügbare Updates
dnf upgrade 🔒
Updates installieren
dnf install <paket> · dnf remove <paket> 🔒
installieren · entfernen
rpm -qa | grep <name>
installierte Pakete
rpm -qf /pfad/datei
zu welchem Paket gehört eine Datei?
6. Dienste mit systemd
Befehl
Zweck
systemctl status <dienst>
Status, letzte Logzeilen, Hauptprozess
systemctl start · stop · restart <dienst> 🔒
starten · stoppen · neu starten
systemctl reload <dienst> 🔒
Konfiguration neu laden ohne Unterbrechung (wenn unterstützt)
systemctl enable --now <dienst> 🔒
beim Booten starten und sofort starten
systemctl disable <dienst> 🔒
nicht mehr automatisch starten
systemctl is-active <dienst> · is-enabled <dienst>
kurze Ja/Nein-Antwort, gut für Skripte
systemctl --failed
alle fehlgeschlagenen Units
systemctl list-units --type=service --state=running
laufende Dienste
systemctl cat <dienst>
Unit-Datei samt Ergänzungen anzeigen
systemctl edit <dienst> 🔒
Ergänzung (Drop-in) anlegen statt Original zu ändern
systemctl daemon-reload 🔒
nach Änderungen an Unit-Dateien
systemd-analyze blame
was hat beim Booten wie lange gedauert?
Tipp
systemctl edit legt eine Datei unter /etc/systemd/system/<dienst>.service.d/override.conf an. So bleiben eigene Anpassungen bei Paket-Updates erhalten.
7. Logs mit journalctl
Befehl
Zweck
journalctl -u <dienst>
Logs eines Dienstes
journalctl -u <dienst> -f
live mitlesen
journalctl -u <dienst> --since "1 hour ago"
nur die letzte Stunde
journalctl -u <dienst> -n 100 --no-pager
die letzten 100 Zeilen, ohne Blättern
journalctl -p err -b
alle Fehler seit dem letzten Start
journalctl -b -1
Logs des vorherigen Starts – nach einem Absturz
journalctl --list-boots
alle gespeicherten Starts
journalctl -k
Kernel-Meldungen (wie dmesg)
journalctl --disk-usage
Platzbedarf des Journals
journalctl --vacuum-time=14d 🔒
Journal auf 14 Tage kürzen
dmesg -T | tail -50 🔒
Kernel-Meldungen mit lesbarer Uhrzeit
Klassische Logdateien unter /var/log:
Datei
Inhalt
/var/log/syslog · /var/log/messages
allgemeines Systemlog (Debian · RHEL)
/var/log/auth.log · /var/log/secure
Anmeldungen, sudo, SSH (Debian · RHEL)
/var/log/apache2/error.log
Apache-Fehler (RHEL: /var/log/httpd/)
/var/log/nginx/error.log
nginx-Fehler
/var/log/apt/history.log
was wurde wann installiert?
Fehlgeschlagene SSH-Anmeldungen zählen:
bash Kopieren
journalctl -u ssh --since today | grep -i "failed password" |
grep -oE 'from [0-9.]+' | sort | uniq -c | sort -rn | head
8. Prozesse und Last
Befehl
Zweck
top
Live-Übersicht (M sortiert nach RAM, P nach CPU, q beendet)
htop
komfortablere Variante (Paket htop)
ps aux --sort=-%mem | head
Top-Prozesse nach Arbeitsspeicher
ps aux --sort=-%cpu | head
Top-Prozesse nach CPU
pgrep -a <name>
Prozesse nach Namen finden
kill <pid>
Prozess höflich beenden (SIGTERM)
kill -9 <pid>
Prozess hart beenden – nur wenn kill nicht reicht
pkill <name>
Prozesse nach Namen beenden
lsof -p <pid>
geöffnete Dateien eines Prozesses
lsof +L1
gelöschte, aber noch geöffnete Dateien – erklärt „Platte voll, aber du findet nichts“
vmstat 1 5
CPU, RAM, Swap, I/O im Sekundentakt
iostat -x 1
Auslastung der Datenträger (Paket sysstat)
Tipp
Faustregel zum Load-Average aus uptime: Werte dauerhaft über der Zahl der CPU-Kerne (nproc) bedeuten, dass Prozesse warten – auf CPU oder auf langsame Datenträger.
9. Netzwerk
Befehl
Zweck
ip -br a
Adressen aller Schnittstellen, kurz
ip a
Adressen mit allen Details
ip r
Routingtabelle, Standard-Gateway
ip -br link
Schnittstellen mit Status und MAC
ip neigh
ARP-Tabelle
ss -tulpn 🔒
welche Ports lauschen, mit Prozess
ss -tnp state established
aktive TCP-Verbindungen
ping -c 4 1.1.1.1
Verbindung testen
traceroute 1.1.1.1 · mtr 1.1.1.1
Weg der Pakete · mit Paketverlust je Hop
curl -I https://example.com
HTTP-Kopfzeilen
curl -v https://example.com -o /dev/null
Verbindungsaufbau samt TLS im Detail
nc -zv <host> 443
ist ein TCP-Port erreichbar?
wget <url>
Datei herunterladen
nmcli · netplan get
Netzwerkkonfiguration (NetworkManager · Ubuntu-Server)
Wo ist die Netzwerkkonfiguration?
System
Ort
Ubuntu Server
/etc/netplan/*.yaml, anwenden mit netplan try (rollt nach 120 s ohne Bestätigung zurück)
Debian
/etc/network/interfaces, neu laden mit systemctl restart networking
RHEL/Rocky/Alma
NetworkManager: nmcli con show, nmcli con mod …
Tipp
Bei Fernwartung netplan try statt netplan apply verwenden: Sperrt man sich aus, wird die alte Konfiguration automatisch wiederhergestellt.
10. DNS
Befehl
Zweck
dig example.com
A-Record mit Details (Paket dnsutils bzw. bind-utils)
dig +short example.com
nur die Antwort
dig example.com MX · TXT · AAAA
bestimmte Record-Typen
dig @1.1.1.1 example.com
gezielt einen DNS-Server fragen
dig -x 203.0.113.10
Rückwärtsauflösung (PTR)
dig +trace example.com
Auflösung ab den Root-Servern verfolgen
resolvectl status
verwendete DNS-Server (systemd-resolved)
resolvectl flush-caches 🔒
DNS-Cache leeren
cat /etc/resolv.conf
eingetragene Resolver
getent hosts example.com
Auflösung so, wie Programme sie sehen (inkl. /etc/hosts)
11. Firewall
ufw (Ubuntu, einfach):
Befehl
Zweck
ufw status verbose 🔒
Status und Regeln
ufw status numbered 🔒
Regeln mit Nummer
ufw allow OpenSSH 🔒
SSH erlauben – vor dem Einschalten!
ufw allow from 10.0.0.0/24 to any port 22 proto tcp 🔒
SSH nur aus dem eigenen Netz
ufw allow 443/tcp 🔒
HTTPS erlauben
ufw delete <nummer> 🔒
Regel löschen
ufw enable 🔒
Firewall einschalten
nftables / firewalld:
Befehl
Zweck
nft list ruleset 🔒
alle nftables-Regeln
iptables -L -n -v 🔒
Regeln in iptables-Ansicht (ältere Systeme)
firewall-cmd --list-all 🔒
aktive Zone und Regeln (RHEL)
firewall-cmd --add-service=https --permanent && firewall-cmd --reload 🔒
Dienst dauerhaft freigeben (RHEL)
Gefahr
Firewall-Änderungen per SSH nur mit offener zweiter Sitzung und erst, wenn die SSH-Regel steht. Sonst sperrt man sich selbst aus – und braucht die Konsole des Hypervisors oder Hosters.
12. SSH
Befehl
Zweck
ssh user@host
verbinden
ssh -p 2222 user@host
anderer Port
ssh-keygen -t ed25519 -C "dennis@laptop"
Schlüsselpaar erzeugen
ssh-copy-id user@host
öffentlichen Schlüssel auf den Server übertragen
ssh -L 8080:127.0.0.1:80 user@host
lokale Portweiterleitung (Tunnel)
ssh -J sprung@bastion user@ziel
über einen Sprungserver verbinden
sshd -t 🔒
SSH-Server-Konfiguration prüfen
systemctl reload ssh 🔒
Konfiguration übernehmen, bestehende Sitzungen bleiben
ssh-keygen -R host
alten Host-Schlüssel nach Neuinstallation entfernen
Eintrag in ~/.ssh/config – kürzere Befehle:
text Kopieren
Host wiki
HostName 10.0.0.51
User dennis
IdentityFile ~/.ssh/id_ed25519
Danach reicht ssh wiki.
Sinnvolle Härtung in /etc/ssh/sshd_config.d/10-haertung.conf 🔒:
text Kopieren
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
Warnung
PasswordAuthentication no erst setzen, wenn die Anmeldung per Schlüssel nachweislich funktioniert . Danach sshd -t, dann systemctl reload ssh – und die alte Sitzung offen lassen, bis eine neue Anmeldung geklappt hat.
13. Datenträger und Speicher
Befehl
Zweck
df -h
belegter und freier Platz je Dateisystem
df -i
freie Inodes – „Platte voll“ trotz freien Speichers
du -sh /var/log
Größe eines Verzeichnisses
du -h --max-depth=1 /var | sort -h
Unterordner nach Größe sortiert
ncdu /
interaktiv aufräumen (Paket ncdu)
lsblk -f
Datenträger mit Dateisystem, UUID, Einhängepunkt
blkid 🔒
UUIDs für /etc/fstab
mount -a 🔒
/etc/fstab testen, bevor neu gestartet wird
findmnt
eingehängte Dateisysteme als Baum
smartctl -a /dev/sda 🔒
SMART-Werte einer Platte (Paket smartmontools)
fstrim -av 🔒
TRIM für SSDs
Platz schaffen – typische Kandidaten:
bash Kopieren
sudo journalctl --vacuum-size=500M
sudo apt clean && sudo apt autoremove
sudo find /var/log -name "*.gz" -mtime +30 -delete
docker system df
Warnung
Nach Änderungen an /etc/fstab immer mount -a ausführen. Ein Tippfehler dort kann dazu führen, dass der Server nicht mehr startet.
14. Webserver und Zertifikate
Apache:
Befehl
Zweck
apachectl configtest 🔒
Konfiguration prüfen – vor jedem Reload
apachectl -S 🔒
alle VirtualHosts mit Datei und Zeile
apachectl -M 🔒
geladene Module
a2ensite <site> · a2dissite <site> 🔒
Site aktivieren · deaktivieren (Debian)
a2enmod proxy_http 🔒
Modul aktivieren (Debian)
systemctl reload apache2 🔒
Konfiguration übernehmen (RHEL: httpd)
nginx:
Befehl
Zweck
nginx -t 🔒
Konfiguration prüfen
nginx -T 🔒
gesamte geladene Konfiguration ausgeben
systemctl reload nginx 🔒
Konfiguration übernehmen
Zertifikate:
Befehl
Zweck
openssl s_client -connect example.com:443 -servername example.com </dev/null
Zertifikatskette eines Servers
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer
Gültigkeit, Name, Aussteller
openssl x509 -in cert.pem -noout -text
Zertifikatsdatei lesen
certbot certificates 🔒
Let’s-Encrypt-Zertifikate mit Ablaufdatum
certbot renew --dry-run 🔒
Verlängerung testen
15. Archive, Kopie und Backup
Befehl
Zweck
tar -czf backup.tar.gz ordner/
Archiv packen (gzip)
tar -tzf backup.tar.gz
Inhalt anzeigen, ohne zu entpacken
tar -xzf backup.tar.gz -C /ziel
entpacken in ein Zielverzeichnis
zip -r archiv.zip ordner/ · unzip archiv.zip
ZIP packen · entpacken
scp datei user@host:/pfad/
Datei per SSH kopieren
rsync -avh quelle/ user@host:/ziel/
synchronisieren, nur Änderungen übertragen
rsync -avh --dry-run --delete quelle/ ziel/
Probelauf : zeigt, was gelöscht würde
sha256sum datei
Prüfsumme – stimmt die Kopie?
Tipp
Bei rsync entscheidet der Schrägstrich am Ende der Quelle: quelle/ kopiert den Inhalt, quelle den Ordner selbst. Mit --delete immer zuerst --dry-run.
Hinweis
Ein Backup ist erst ein Backup, wenn die Wiederherstellung getestet wurde. Datenbanken nicht als Dateien im laufenden Betrieb kopieren, sondern mit dem passenden Werkzeug sichern (mysqldump, pg_dump, sqlite3 db ".backup ziel.db").
16. Zeitpläne: cron und Timer
Befehl
Zweck
crontab -l
eigene Cronjobs anzeigen
crontab -e
eigene Cronjobs bearbeiten
sudo crontab -l -u <name>
Cronjobs eines anderen Benutzers
ls /etc/cron.d /etc/cron.daily
systemweite Cronjobs
systemctl list-timers
systemd-Timer mit nächster Ausführung
Aufbau einer Cron-Zeile:
text Kopieren
# Minute Stunde Tag Monat Wochentag Befehl
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# -> täglich um 02:30, Ausgabe und Fehler ins Log
Tipp
Cron hat eine sehr kurze PATH-Variable. In Cronjobs deshalb immer vollständige Pfade verwenden (/usr/bin/rsync statt rsync).
17. Docker
Befehl
Zweck
docker ps · docker ps -a
laufende · alle Container
docker logs -f --tail 100 <container>
Logs live mitlesen
docker exec -it <container> sh
Shell im Container
docker stats
CPU und RAM je Container
docker inspect <container>
alle Details (Netz, Volumes, Umgebung)
docker compose up -d
Stack starten (im Verzeichnis mit compose.yaml)
docker compose pull && docker compose up -d
Images aktualisieren und neu starten
docker compose logs -f
Logs aller Dienste des Stacks
docker system df
Platzbedarf von Images, Containern, Volumes
docker image prune
ungenutzte Images löschen
Warnung
docker system prune -a --volumes löscht auch Volumes ungenutzter Container – und damit möglicherweise Daten. Ohne --volumes bleiben sie erhalten.
18. Bash-Helfer
Schreibweise
Bedeutung
befehl1 | befehl2
Ausgabe weiterreichen (Pipe)
befehl > datei · >> datei
Ausgabe in Datei schreiben · anhängen
befehl 2>&1
Fehler mit in die normale Ausgabe
befehl 2>/dev/null
Fehlermeldungen verwerfen
befehl1 && befehl2
zweiter Befehl nur, wenn der erste klappt
befehl1 || befehl2
zweiter Befehl nur, wenn der erste scheitert
befehl | tee datei
anzeigen und in Datei schreiben
sudo !!
letzten Befehl mit sudo wiederholen
echo $?
Rückgabewert des letzten Befehls (0 = Erfolg)
history | grep <begriff>
im Befehlsverlauf suchen
watch -n 2 <befehl>
Befehl alle 2 Sekunden wiederholen
tmux · screen
Sitzung, die einen Verbindungsabbruch überlebt
Tastenkürzel:
Kürzel
Wirkung
Tab
Befehle und Pfade vervollständigen
Strg + R
rückwärts im Verlauf suchen
Strg + C
laufenden Befehl abbrechen
Strg + D
Sitzung beenden
Strg + L
Bildschirm leeren
Strg + A · Strg + E
an den Zeilenanfang · ans Zeilenende
Tipp
Lange Arbeiten (Updates, große Kopien) per SSH immer in tmux starten. Bricht die Verbindung ab, läuft der Befehl weiter – mit tmux attach ist man wieder drin.
Typische Abläufe
Problem
Reihenfolge
Dienst startet nicht
systemctl status <d> → journalctl -u <d> -n 50 → Konfiguration testen (-t/configtest) → ss -tulpn (Port schon belegt?)
Platte voll
df -h → df -i → du -h --max-depth=1 / | sort -h → lsof +L1 → Journal/Paket-Cache aufräumen
Server langsam
uptime → top → free -h (Swap?) → iostat -x 1 → journalctl -p err -b
Website nicht erreichbar
systemctl status apache2 → ss -tulpn | grep :443 → curl -I http://127.0.0.1 → Firewall → DNS (dig) → Zertifikat (openssl s_client)
Nach Absturz
journalctl --list-boots → journalctl -b -1 -p err → dmesg -T → smartctl -a
SSH-Anmeldung scheitert
ssh -v user@host → journalctl -u ssh auf dem Server → Rechte von ~/.ssh (700) und authorized_keys (600)