1.10 Schnellreferenz – Diagnosebefehle für Windows, Linux und macOS
1.10 Schnellreferenz – Diagnosebefehle für Windows, Linux und macOS
Diese Seite fasst die wichtigsten Diagnosebefehle aus Kapitel 1 als plattformübergreifendes Nachschlagewerk zusammen.
Sie ist für die schnelle Fehlersuche gedacht. Die ausführliche Vorgehensweise, Einschränkungen und Interpretationen befinden sich auf den vorherigen Seiten.
Befehle nicht wahllos nacheinander ausführen. Zuerst Fehlerbild und Umfang bestimmen, flüchtige Informationen sichern und anschließend gezielt prüfen.
Die Bereiche ab Punkt 3 können über die jeweilige Überschrift auf- und zugeklappt werden.
1. Kennzeichnungen
| Kennzeichnung | Bedeutung |
|---|---|
[RO] |
Read-only: liest Informationen aus |
[TEST] |
Führt eine aktive Prüfung aus |
[FILE] |
Erstellt oder überschreibt eine Datei |
[PRIV] |
Benötigt möglicherweise Administrator- oder Root-Rechte |
[CHANGE] |
Verändert Konfiguration oder Betriebszustand |
[DISRUPTIV] |
Kann Benutzer oder produktive Dienste beeinträchtigen |
[SENSITIV] |
Ausgabe kann vertrauliche Daten enthalten |
Auch [RO]-Befehle sind nicht vollständig spurlos. Sie starten Prozesse und können in Shell-Historien, Auditprotokollen oder Sicherheitslösungen erscheinen.
2. Platzhalter
Alle Angaben in spitzen Klammern müssen vor der Ausführung ersetzt werden.
| Platzhalter | Bedeutung |
|---|---|
<Servername> |
Hostname oder FQDN des Zielservers |
<IP-Adresse> |
IPv4- oder IPv6-Adresse |
<Port> |
TCP- oder UDP-Port |
<Dienstname> |
interner Dienstname |
<Dienstlabel> |
launchd-Label unter macOS |
<Prozessname> |
Name eines Prozesses |
<PID> |
Prozess-ID |
<Benutzername> |
Benutzerkonto |
<Datei> |
vollständiger Dateipfad |
<Pfad> |
Datei- oder Verzeichnispfad |
<Zielpfad> |
freigegebener Speicherort |
<Interface> |
Netzwerkschnittstelle |
<DNS-Server-IP> |
Adresse des abzufragenden DNS-Servers |
3. Plattformhinweise
| Plattform | Hinweise |
|---|---|
| Windows | PowerShell möglichst mit normalen Benutzerrechten starten; erhöhte Rechte nur bei Bedarf |
| Linux | Befehle unterscheiden sich nach Distribution, Init-System und installierten Paketen |
| macOS | Viele Werkzeuge verwenden BSD-Syntax und unterscheiden sich von den Linux-Versionen |
| Alle | Befehle mit Schreib-, Neustart- oder Aufzeichnungsfunktion vorher auf Auswirkungen prüfen |
Lokale Hilfe anzeigen
| Windows PowerShell | Linux | macOS |
|---|---|---|
[RO] Get-Help <Befehl> -Full |
[RO] man <Befehl> |
[RO] man <Befehl> |
[RO] Get-Command <Befehl> -Syntax |
[RO] <Befehl> --help |
[RO] <Befehl> -h oder man <Befehl> |
4. Schneller Diagnoseablauf
| Reihenfolge | Prüfung | Ziel |
|---|---|---|
| 1 | Uhrzeit und Zeitzone | Protokolle korrekt vergleichen |
| 2 | Fehler exakt reproduzieren | tatsächliches Symptom bestätigen |
| 3 | betroffene und funktionierende Systeme vergleichen | Fehlerumfang eingrenzen |
| 4 | IP-Konfiguration prüfen | lokale Netzwerkkonfiguration bestätigen |
| 5 | DNS prüfen | Name und Zieladresse bestätigen |
| 6 | Routing und Gateway prüfen | Netzwerkpfad bestätigen |
| 7 | Zielport prüfen | Transportverbindung testen |
| 8 | Protokoll oder Anwendung prüfen | HTTP, TLS oder Anwendungsebene |
| 9 | Dienst und Listener prüfen | serverseitigen Zustand bestätigen |
| 10 | Protokolle prüfen | technische Fehler und Zeitpunkt finden |
| 11 | Ressourcen prüfen | CPU, RAM, Datenträger und I/O |
| 12 | letzte Änderungen prüfen | Updates, Deployments und Konfiguration |
| 13 | Hypothesen mit Gegenprobe testen | Ursache bestätigen oder widerlegen |
| 14 | Ausgangszustand sichern | sichere Änderung und Rückfall ermöglichen |
| 15 | Lösung umsetzen und Ende-zu-Ende prüfen | Funktion dauerhaft bestätigen |
5. Datum, Uhrzeit und Zeitzone
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Lokale Zeit | [RO] Get-Date -Format o |
[RO] date --iso-8601=seconds |
[RO] date "+%Y-%m-%dT%H:%M:%S%z" |
| UTC-Zeit | [RO] (Get-Date).ToUniversalTime().ToString("o") |
[RO] date -u "+%Y-%m-%dT%H:%M:%SZ" |
[RO] date -u "+%Y-%m-%dT%H:%M:%SZ" |
| Zeitzone | [RO] Get-TimeZone |
[RO] timedatectl status |
[RO][PRIV] sudo systemsetup -gettimezone |
| Zeitquelle | [RO] w32tm /query /source |
[RO] timedatectl timesync-status |
[TEST] sntp -d time.apple.com |
| Synchronisationsstatus | [RO] w32tm /query /status |
[RO] timedatectl status |
[TEST] sntp -d time.apple.com |
| chrony-Status | Nicht zutreffend | [RO] chronyc tracking |
Nicht standardmäßig vorhanden |
| chrony-Quellen | Nicht zutreffend | [RO] chronyc sources -v |
Nicht standardmäßig vorhanden |
Interpretation
| Beobachtung | Mögliche Bedeutung |
|---|---|
| Systemzeit weicht ab | NTP-, Domänen-, Netzwerk- oder Konfigurationsproblem |
| Zeitzonen unterscheiden sich | Ereignisse vor dem Vergleich umrechnen |
| Zeitquelle nicht erreichbar | Firewall, DNS, Routing oder Zeitdienst prüfen |
| Kerberos- oder Zertifikatsfehler | Systemzeit und Zeitzone zuerst prüfen |
6. Hostname, Betriebssystem und Hardware
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Hostname | [RO] hostname |
[RO] hostname |
[RO] hostname |
| Systemübersicht | [RO] Get-ComputerInfo |
[RO] hostnamectl |
[RO] system_profiler SPSoftwareDataType SPHardwareDataType |
| Betriebssystem | [RO] Get-CimInstance Win32_OperatingSystem | Select-Object Caption,Version,BuildNumber |
[RO] cat /etc/os-release |
[RO] sw_vers |
| Kernel und Architektur | [RO] systeminfo |
[RO] uname -a |
[RO] uname -a |
| Prozessor | [RO] Get-CimInstance Win32_Processor |
[RO] lscpu |
[RO] sysctl -n machdep.cpu.brand_string |
| Hardwaremodell | [RO] Get-CimInstance Win32_ComputerSystem |
[RO][PRIV] dmidecode -t system |
[RO] system_profiler SPHardwareDataType |
| Seriennummer | [RO] Get-CimInstance Win32_BIOS | Select-Object SerialNumber |
[RO][PRIV] dmidecode -s system-serial-number |
[RO] system_profiler SPHardwareDataType |
dmidecode ist nicht auf jeder Linux-Installation vorhanden und benötigt üblicherweise Root-Rechte.
7. Systemstart und Betriebsdauer
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Letzter Start | [RO] Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime |
[RO] uptime -s |
[RO] sysctl -n kern.boottime |
| Alternative | [RO] systeminfo |
[RO] who -b |
[RO] last reboot |
| Betriebsdauer | [RO] (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime |
[RO] uptime |
[RO] uptime |
| Neustartverlauf | Ereignisanzeige beziehungsweise Systemprotokoll | [RO] last reboot |
[RO] last reboot |
| Aktueller Boot | Ereignisanzeige | [RO] journalctl -b |
Unified Log über Startzeit eingrenzen |
| Vorheriger Boot | Ereignisanzeige | [RO] journalctl -b -1 |
[RO] last reboot |
8. Benutzeridentität und Sitzungen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Aktueller Benutzer | [RO] whoami |
[RO] whoami |
[RO] whoami |
| Benutzer-ID und Gruppen | [RO][SENSITIV] whoami /all |
[RO] id |
[RO] id |
| Bestimmter Benutzer | lokale oder Domänenverwaltung verwenden | [RO] id <Benutzername> |
[RO] id <Benutzername> |
| Angemeldete Benutzer | [RO] quser |
[RO] who -a |
[RO] who |
| Sitzungen und Aktivität | [RO] query user |
[RO] w |
[RO] w |
| Lokale Benutzer | [RO] Get-LocalUser |
[RO] getent passwd |
[RO] dscl . -list /Users |
| Lokale Gruppen | [RO] Get-LocalGroup |
[RO] getent group |
[RO] dscl . -list /Groups |
Ausgaben können Benutzernamen, SIDs, Gruppen und sicherheitsrelevante Informationen enthalten.
9. Prozesse
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Prozessübersicht | [RO] Get-Process |
[RO][SENSITIV] ps auxww |
[RO][SENSITIV] ps auxww |
| PID, Elternprozess und Befehlszeile | [RO][SENSITIV] Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine |
[RO][SENSITIV] ps -ef --forest |
[RO][SENSITIV] ps -axo pid,ppid,user,lstart,state,%cpu,%mem,command |
| Einzelnen Prozess prüfen | [RO] Get-Process -Id <PID> | Format-List * |
[RO] ps -p <PID> -o pid,ppid,user,lstart,stat,%cpu,%mem,command |
[RO] ps -p <PID> -o pid,ppid,user,lstart,state,%cpu,%mem,command |
| Nach Namen suchen | [RO] Get-Process -Name <Prozessname> |
[RO] pgrep -a <Prozessname> |
[RO] pgrep -fl <Prozessname> |
| Höchste CPU-Nutzung | [RO] Get-Process | Sort-Object CPU -Descending | Select-Object -First 20 |
[RO] ps aux --sort=-%cpu | head -n 20 |
[RO] top -l 1 -o cpu |
| Höchste Speichernutzung | [RO] Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 20 |
[RO] ps aux --sort=-%mem | head -n 20 |
[RO] top -l 1 -o mem |
| Offene Dateien eines Prozesses | kein einheitlicher integrierter PowerShell-Befehl | [RO][PRIV][SENSITIV] lsof -p <PID> |
[RO][PRIV][SENSITIV] lsof -p <PID> |
10. Dienste
| Aufgabe | Windows | Linux mit systemd | macOS |
|---|---|---|---|
| Alle Dienste | [RO] Get-Service |
[RO] systemctl list-units --type=service --all |
[RO] launchctl list |
| Bestimmten Dienst prüfen | [RO] Get-Service -Name <Dienstname> |
[RO] systemctl status <Dienstname>.service --no-pager |
[RO][PRIV] launchctl print system/<Dienstlabel> |
| Benutzerdienst prüfen | [RO] Get-Service -Name <Dienstname> |
[RO] systemctl --user status <Dienstname>.service |
[RO] launchctl print gui/$(id -u)/<Dienstlabel> |
| Fehlgeschlagene Dienste | Status und Ereignisprotokoll prüfen | [RO] systemctl --failed |
Prozess und Unified Log prüfen |
| Laufende Dienste | [RO] Get-Service | Where-Object Status -eq "Running" |
[RO] systemctl list-units --type=service --state=running |
[RO] launchctl list |
| Dienstkonfiguration | [RO][SENSITIV] Get-CimInstance Win32_Service -Filter "Name='<Dienstname>'" |
[RO] systemctl cat <Dienstname>.service |
[RO] plutil -p "<Pfad-zur-plist>" |
| Prozess-ID | [RO] Get-CimInstance Win32_Service -Filter "Name='<Dienstname>'" | Select-Object ProcessId |
[RO] systemctl show <Dienstname>.service -p MainPID |
[RO] launchctl print system/<Dienstlabel> |
| Startmodus | [RO] Get-CimInstance Win32_Service -Filter "Name='<Dienstname>'" | Select-Object StartMode |
[RO] systemctl is-enabled <Dienstname>.service |
Property-List mit plutil -p prüfen |
| Dienstkonto | [RO][SENSITIV] Get-CimInstance Win32_Service -Filter "Name='<Dienstname>'" | Select-Object StartName |
[RO] systemctl show <Dienstname>.service -p User -p Group |
[RO] plutil -p "<Pfad-zur-plist>" |
11. Dienstabhängigkeiten
| Aufgabe | Windows | Linux mit systemd | macOS |
|---|---|---|---|
| Benötigte Dienste | [RO] Get-Service -Name <Dienstname> -RequiredServices |
[RO] systemctl list-dependencies <Dienstname>.service --all |
keine allgemeine Abhängigkeitsdarstellung |
| Abhängige Dienste | [RO] Get-Service -Name <Dienstname> -DependentServices |
[RO] systemctl list-dependencies <Dienstname>.service --reverse --all |
anwendungsspezifisch prüfen |
| Reihenfolge und Anforderungen | [RO] sc.exe qc <Dienstname> |
[RO] systemctl show <Dienstname>.service -p Requires -p Wants -p After -p Before |
Property-List und Dokumentation prüfen |
| Effektive Konfiguration | [RO] Get-CimInstance Win32_Service -Filter "Name='<Dienstname>'" |
[RO] systemctl cat <Dienstname>.service |
[RO] plutil -p "<Pfad-zur-plist>" |
12. Arbeitsspeicher
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Arbeitsspeicherübersicht | [RO] Get-CimInstance Win32_OperatingSystem | Select-Object TotalVisibleMemorySize,FreePhysicalMemory |
[RO] free -h |
[RO] vm_stat |
| Prozessspeicher | [RO] Get-Process | Sort-Object WorkingSet64 -Descending |
[RO] ps aux --sort=-%mem |
[RO] top -l 1 -o mem |
| Laufende Übersicht | [RO] Get-Process oder Task-Manager |
[RO] top |
[RO] top |
Bei Windows werden TotalVisibleMemorySize und FreePhysicalMemory in KiB ausgegeben.
13. Datenträger und Dateisysteme
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Volumes | [RO] Get-Volume |
[RO] lsblk -f |
[RO] diskutil list |
| Freier Speicher | [RO] Get-PSDrive -PSProvider FileSystem |
[RO] df -hT |
[RO] df -h |
| Inode-Belegung | nicht in dieser Unix-Form anwendbar | [RO] df -ih |
[RO] df -ih |
| Mounts | [RO] Get-Volume |
[RO] findmnt |
[RO] mount |
| Physische Datenträger | [RO] Get-PhysicalDisk |
[RO] lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS |
[RO] diskutil list |
| Datenträgerinformationen | [RO] Get-Disk |
[RO] lsblk -f |
[RO] diskutil info <Datenträger> |
| I/O-Messung | Performance Monitor oder passende Counter | [RO][TEST] iostat -xz 1 5 |
[RO][TEST] iostat -w 1 -c 5 |
iostat gehört unter Linux häufig zum Paket sysstat.
14. IP-Konfiguration
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Vollständige IP-Konfiguration | [RO] ipconfig /all |
[RO] ip -details address show |
[RO] ifconfig -a |
| PowerShell-Netzwerkübersicht | [RO] Get-NetIPConfiguration |
Nicht zutreffend | Nicht zutreffend |
| Interfacezustand | [RO] Get-NetAdapter |
[RO] ip -details link show |
[RO] ifconfig -a |
| NetworkManager-Geräte | Nicht zutreffend | [RO] nmcli device status |
Nicht zutreffend |
| NetworkManager-Verbindungen | Nicht zutreffend | [RO][SENSITIV] nmcli connection show |
Nicht zutreffend |
| Hardwareports | [RO] Get-NetAdapter |
[RO] ip link show |
[RO] networksetup -listallhardwareports |
| Netzwerkdienste | Adapter über PowerShell | NetworkManager oder systemd-networkd | [RO] networksetup -listallnetworkservices |
15. DHCP-Informationen am Client
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| DHCP-Server und Lease | [RO] ipconfig /all |
abhängig vom Netzwerkmanager und DHCP-Client | [RO] ipconfig getpacket <Interface> |
| NetworkManager-DHCP | Nicht zutreffend | [RO] nmcli device show <Interface> |
Nicht zutreffend |
| systemd-networkd | Nicht zutreffend | [RO] networkctl status <Interface> |
Nicht zutreffend |
| Interface-IP | [RO] Get-NetIPAddress |
[RO] ip address show <Interface> |
[RO] ipconfig getifaddr <Interface> |
DHCP-Lease-Dateien und Speicherorte unterscheiden sich nach Distribution und verwendetem Netzwerkdienst.
16. DNS-Konfiguration
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| DNS-Server | [RO] Get-DnsClientServerAddress |
[RO] resolvectl status |
[RO][SENSITIV] scutil --dns |
| Resolverdatei | ipconfig /all verwenden |
[RO] cat /etc/resolv.conf |
[RO] cat /etc/resolv.conf |
| Suchdomänen | [RO] ipconfig /all |
[RO] resolvectl status |
[RO][SENSITIV] scutil --dns |
| DNS-Cache | [RO][SENSITIV] Get-DnsClientCache |
kein einheitlicher systemweiter Cache-Dump | kein einheitlicher systemweiter Cache-Dump |
| Alternative Cacheanzeige | [RO][SENSITIV] ipconfig /displaydns |
abhängig vom Resolver | abhängig vom Resolver |
17. DNS-Auflösung
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Standardabfrage | [TEST] Resolve-DnsName <Servername> |
[TEST] getent ahosts <Servername> |
[TEST] dscacheutil -q host -a name <Servername> |
| Abfrage mit dig | dig nur wenn installiert | [TEST] dig <Servername> |
[TEST] dig <Servername> |
| Kurze Ausgabe | [TEST] Resolve-DnsName <Servername> | Select-Object Name,Type,IPAddress |
[TEST] dig +short <Servername> |
[TEST] dig +short <Servername> |
| Bestimmten DNS-Server abfragen | [TEST] Resolve-DnsName <Servername> -Server <DNS-Server-IP> |
[TEST] dig @<DNS-Server-IP> <Servername> |
[TEST] dig @<DNS-Server-IP> <Servername> |
| nslookup | [TEST] nslookup <Servername> |
[TEST] nslookup <Servername> |
[TEST] nslookup <Servername> |
| Reverse Lookup | [TEST] Resolve-DnsName <IP-Adresse> |
[TEST] dig -x <IP-Adresse> |
[TEST] dig -x <IP-Adresse> |
Interpretation
| Ergebnis | Mögliche Bedeutung |
|---|---|
| Name wird nicht aufgelöst | DNS-Server, Clientkonfiguration, Zone oder Netzwerk |
| Falsche IP-Adresse | falscher Eintrag, Cache, Hosts-Datei oder Split-DNS |
| Verschiedene IP-Adressen | Load Balancing, DNS-Rotation oder unterschiedliche Resolver |
| Bestimmter DNS-Server antwortet korrekt | Standardresolver oder Clientkonfiguration prüfen |
| IP funktioniert, Name nicht | DNS priorisieren |
18. Hosts-Datei anzeigen
| Windows | Linux | macOS |
|---|---|---|
[RO] Get-Content "$env:SystemRoot\System32\drivers\etc\hosts" |
[RO] cat /etc/hosts |
[RO] cat /etc/hosts |
Die Hosts-Datei kann DNS-Ergebnisse lokal überschreiben.
19. Routing
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Routingtabelle | [RO] route print |
[RO] ip route show table all |
[RO] netstat -rn |
| PowerShell-Routen | [RO] Get-NetRoute |
Nicht zutreffend | Nicht zutreffend |
| IPv4-Routen | [RO] Get-NetRoute -AddressFamily IPv4 |
[RO] ip -4 route show table all |
[RO] netstat -rn -f inet |
| IPv6-Routen | [RO] Get-NetRoute -AddressFamily IPv6 |
[RO] ip -6 route show table all |
[RO] netstat -rn -f inet6 |
| Route zu einem Ziel | [RO] Test-NetConnection <IP-Adresse> -DiagnoseRouting -InformationLevel Detailed |
[RO] ip route get <IP-Adresse> |
[RO] route -n get <IP-Adresse> |
| Standardroute | [RO] Get-NetRoute -DestinationPrefix "0.0.0.0/0" |
[RO] ip route show default |
[RO] route -n get default |
20. ARP- und Neighbor-Tabelle
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| ARP-Tabelle | [RO] arp -a |
[RO] ip neigh show |
[RO] arp -an |
| PowerShell-Neighbor | [RO] Get-NetNeighbor |
Nicht zutreffend | Nicht zutreffend |
| Bestimmtes Interface | [RO] Get-NetNeighbor -InterfaceAlias "<Interface>" |
[RO] ip neigh show dev <Interface> |
[RO] arp -an |
Interpretation
| Zustand | Bedeutung |
|---|---|
| Reachable | Nachbar wurde kürzlich bestätigt |
| Stale | Eintrag vorhanden, aber nicht aktuell bestätigt |
| Incomplete oder Failed | Adressauflösung fehlgeschlagen |
| unterschiedliche MAC-Adressen | Redundanz, Proxy ARP, IP-Konflikt oder Änderung prüfen |
21. Proxykonfiguration
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| WinHTTP-Proxy | [RO] netsh winhttp show proxy |
Nicht zutreffend | Nicht zutreffend |
| Umgebungsvariablen | [RO][SENSITIV] Get-ChildItem Env: | Where-Object Name -Match "proxy" |
[RO][SENSITIV] env | grep -i proxy |
[RO][SENSITIV] env | grep -i proxy |
| Systemproxy | Internetoptionen und Richtlinien prüfen | Desktop- oder Netzwerkmanager abhängig | [RO] scutil --proxy |
| curl ohne Proxy | [TEST] curl.exe --noproxy "*" -v https://<Servername>/ |
[TEST] curl --noproxy "*" -v https://<Servername>/ |
[TEST] curl --noproxy "*" -v https://<Servername>/ |
Das Umgehen eines Unternehmensproxys darf nur erfolgen, wenn direkte Verbindungen erlaubt und der Test autorisiert ist.
22. Aktive TCP-Verbindungen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| TCP-Verbindungen | [RO][PRIV] Get-NetTCPConnection |
[RO][PRIV] ss -tanp |
[RO] netstat -anv -p tcp |
| Verbindungen mit PID | [RO][PRIV] Get-NetTCPConnection | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess |
[RO][PRIV] ss -tanp |
[RO][PRIV] lsof -nP -iTCP |
| Klassische Übersicht | [RO][PRIV] netstat -ano |
[RO] netstat -antp sofern installiert |
[RO] netstat -anv -p tcp |
| Bestehende Verbindungen | [RO] Get-NetTCPConnection -State Established |
[RO][PRIV] ss -tanp state established |
[RO][PRIV] lsof -nP -iTCP -sTCP:ESTABLISHED |
23. UDP-Endpunkte
| Windows | Linux | macOS |
|---|---|---|
[RO][PRIV] Get-NetUDPEndpoint |
[RO][PRIV] ss -uanp |
[RO] netstat -anv -p udp |
[RO][PRIV] netstat -ano -p udp |
[RO][PRIV] lsof -nP -iUDP |
[RO][PRIV] lsof -nP -iUDP |
UDP besitzt keinen TCP-Verbindungszustand wie Established. Ein offener UDP-Endpunkt bestätigt nicht, dass eine Anwendung antwortet.
24. TCP-Listener
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Alle Listener | [RO][PRIV] Get-NetTCPConnection -State Listen |
[RO][PRIV] ss -lntp |
[RO][PRIV] lsof -nP -iTCP -sTCP:LISTEN |
| Bestimmter Port | [RO][PRIV] Get-NetTCPConnection -State Listen -LocalPort <Port> |
[RO][PRIV] ss -lntp | grep ":<Port>" |
[RO][PRIV] lsof -nP -iTCP:<Port> -sTCP:LISTEN |
| PID zu Listener | Eigenschaft OwningProcess verwenden |
Ausgabe von ss -lntp |
Ausgabe von lsof |
| Prozess zur PID | [RO] Get-Process -Id <PID> |
[RO] ps -p <PID> -o pid,user,command |
[RO] ps -p <PID> -o pid,user,command |
Ein Listener bestätigt nur, dass ein Prozess den Port gebunden hat. Die Anwendung kann intern trotzdem fehlerhaft sein.
25. ICMP-Erreichbarkeit
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Vier Ping-Versuche | [TEST] ping -n 4 <IP-Adresse> |
[TEST] ping -c 4 <IP-Adresse> |
[TEST] ping -c 4 <IP-Adresse> |
| Zehn Versuche | [TEST] ping -n 10 <IP-Adresse> |
[TEST] ping -c 10 <IP-Adresse> |
[TEST] ping -c 10 <IP-Adresse> |
| PowerShell-Test | [TEST] Test-Connection -ComputerName <Servername> -Count 4 |
PowerShell nur wenn installiert | PowerShell nur wenn installiert |
Ein fehlgeschlagener Ping beweist keinen Serverausfall. ICMP kann blockiert sein, während TCP- oder UDP-Dienste funktionieren.
26. TCP-Port testen
| Windows | Linux | macOS |
|---|---|---|
[TEST] Test-NetConnection <Servername> -Port <Port> -InformationLevel Detailed |
[TEST] nc -vz -w 3 <Servername> <Port> |
[TEST] nc -vz -w 3 <Servername> <Port> |
[TEST] Test-NetConnection <Servername> -Port <Port> -InformationLevel Quiet |
nc verwenden |
nc verwenden |
Windows-Auswertung
Besonders relevantes Feld:
TcpTestSucceeded
Interpretation
| Ergebnis | Mögliche Bedeutung |
|---|---|
| Verbindung erfolgreich | Netzwerkpfad und TCP-Listener grundsätzlich erreichbar |
| Connection refused | Ziel erreichbar, aber kein Listener oder aktive Ablehnung |
| Timeout | Filterung, Routing, Überlastung oder nicht antwortendes Ziel |
| Name nicht auflösbar | DNS zuerst prüfen |
| Nur ein Client betroffen | lokales System, lokales Netz oder lokale Sicherheitssoftware |
| Nur ein VLAN betroffen | ACL, Routing, Firewall oder VLAN-Konfiguration |
27. Netzwerkpfad verfolgen
| Windows | Linux | macOS |
|---|---|---|
[TEST] tracert <Servername> |
[TEST] tracepath <Servername> |
[TEST] traceroute <Servername> |
[TEST] Test-NetConnection <Servername> -TraceRoute |
[TEST] traceroute <Servername> sofern installiert |
[TEST] traceroute <Servername> |
Sternchen bedeuten nicht automatisch einen Fehler. Router können Traceroute-Anfragen ignorieren und Nutzverkehr trotzdem weiterleiten.
28. Lokalen und entfernten Dienst vergleichen
| Testpunkt | Windows | Linux | macOS |
|---|---|---|---|
| localhost | [TEST] Test-NetConnection localhost -Port <Port> |
[TEST] nc -vz -w 3 localhost <Port> |
[TEST] nc -vz -w 3 localhost <Port> |
| eigene IP | [TEST] Test-NetConnection <Eigene-IP> -Port <Port> |
[TEST] nc -vz -w 3 <Eigene-IP> <Port> |
[TEST] nc -vz -w 3 <Eigene-IP> <Port> |
| Servername | [TEST] Test-NetConnection <Servername> -Port <Port> |
[TEST] nc -vz -w 3 <Servername> <Port> |
[TEST] nc -vz -w 3 <Servername> <Port> |
Interpretation
| localhost | Eigene IP | Remote | Möglicher Fehlerbereich |
|---|---|---|---|
| erfolgreich | erfolgreich | fehlgeschlagen | Netzwerkpfad oder Firewall |
| erfolgreich | fehlgeschlagen | fehlgeschlagen | Bindung oder lokale Firewall |
| fehlgeschlagen | fehlgeschlagen | fehlgeschlagen | Dienst oder Anwendung |
| erfolgreich | erfolgreich | erfolgreich | Transportebene funktioniert |
29. HTTP- und HTTPS-Test
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Ausführlicher Test | [TEST] curl.exe -v -o NUL https://<Servername>/ |
[TEST] curl -v -o /dev/null https://<Servername>/ |
[TEST] curl -v -o /dev/null https://<Servername>/ |
| Nur Header | [TEST] curl.exe -vI https://<Servername>/ |
[TEST] curl -vI https://<Servername>/ |
[TEST] curl -vI https://<Servername>/ |
| Zeitbegrenzung | [TEST] curl.exe --connect-timeout 5 --max-time 15 https://<Servername>/ |
[TEST] curl --connect-timeout 5 --max-time 15 https://<Servername>/ |
[TEST] curl --connect-timeout 5 --max-time 15 https://<Servername>/ |
| HTTP-Fehler als curl-Fehler | [TEST] curl.exe --fail https://<Servername>/ |
[TEST] curl --fail https://<Servername>/ |
[TEST] curl --fail https://<Servername>/ |
Einige Server unterstützen die HTTP-Methode HEAD nicht korrekt. Ein fehlgeschlagener curl -I-Test sollte daher mit einem normalen GET-Test verglichen werden.
30. HTTP-Zeiten messen
Windows PowerShell
[TEST] curl.exe -sS -o NUL -w 'code=%{http_code} remote=%{remote_ip} dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}\n' --connect-timeout 5 --max-time 15 https://<Servername>/
Linux und macOS
[TEST] curl -sS -o /dev/null -w "code=%{http_code} remote=%{remote_ip} dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total}\n" --connect-timeout 5 --max-time 15 https://<Servername>/
| Wert | Bedeutung |
|---|---|
http_code |
HTTP-Status |
remote_ip |
verwendete Ziel-IP |
time_namelookup |
Dauer der Namensauflösung |
time_connect |
Dauer bis TCP-Verbindungsaufbau |
time_appconnect |
Dauer bis TLS-Verbindungsaufbau |
time_starttransfer |
Dauer bis zum ersten Byte |
time_total |
Gesamtzeit |
31. Bestimmtes HTTPS-Ziel ohne DNS-Änderung testen
| Windows | Linux | macOS |
|---|---|---|
[TEST] curl.exe --resolve "<Servername>:443:<IP-Adresse>" -v -o NUL https://<Servername>/ |
[TEST] curl --resolve "<Servername>:443:<IP-Adresse>" -v -o /dev/null https://<Servername>/ |
[TEST] curl --resolve "<Servername>:443:<IP-Adresse>" -v -o /dev/null https://<Servername>/ |
--resolve behält für diesen curl-Aufruf:
- Hostname,
- HTTP-Host-Header,
- TLS-SNI,
- Zertifikatsprüfung.
Nur die Ziel-IP wird vorgegeben.
32. TLS prüfen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| TLS-Verbindung | [TEST] openssl s_client -connect <Servername>:443 -servername <Servername> -showcerts sofern OpenSSL installiert |
[TEST] openssl s_client -connect <Servername>:443 -servername <Servername> -showcerts </dev/null |
[TEST] openssl s_client -connect <Servername>:443 -servername <Servername> -showcerts </dev/null |
| OpenSSL-Version | [RO] openssl version -a |
[RO] openssl version -a |
[RO] openssl version -a |
| Zertifikatdatei | [RO] openssl x509 -in "<Datei.pem>" -noout -text |
[RO] openssl x509 -in "<Datei.pem>" -noout -text |
[RO] openssl x509 -in "<Datei.pem>" -noout -text |
Zu prüfen
- Gültigkeitszeitraum,
- Hostname und Subject Alternative Names,
- Aussteller,
- Zertifikatskette,
- TLS-Version,
- Cipher Suite,
- Verifikationsergebnis.
33. HTTP-Status schnell interpretieren
| Status | Typische Bedeutung |
|---|---|
| 200 | Anfrage erfolgreich |
| 301 oder 302 | Weiterleitung |
| 400 | ungültige Anfrage |
| 401 | Authentifizierung erforderlich oder fehlgeschlagen |
| 403 | Zugriff verweigert |
| 404 | Ressource oder Pfad nicht gefunden |
| 408 | Anfrage-Timeout |
| 429 | zu viele Anfragen oder Rate Limit |
| 500 | interner Anwendungsfehler |
| 502 | Proxy oder Gateway erhält ungültige Backend-Antwort |
| 503 | Dienst oder Backend nicht verfügbar |
| 504 | Proxy oder Gateway wartet vergeblich auf Backend |
| 000 bei curl | keine gültige HTTP-Antwort empfangen |
Die genaue Bedeutung kann durch die Anwendung erweitert oder verändert werden.
34. Windows-Ereignisprotokolle
| Aufgabe | Befehl |
|---|---|
| Systemprotokoll | [RO] Get-WinEvent -LogName "System" -MaxEvents 100 |
| Anwendungsprotokoll | [RO] Get-WinEvent -LogName "Application" -MaxEvents 100 |
| Warnungen und Fehler | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; Level=2,3; StartTime=(Get-Date).AddHours(-1)} |
| Kritische Fehler und Fehler | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; Level=1,2; StartTime=(Get-Date).AddHours(-1)} |
| Zeitfenster | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; StartTime=[datetime]"2026-07-30 14:00:00"; EndTime=[datetime]"2026-07-30 15:00:00"} |
| Ereignis-ID | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; Id=<Ereignis-ID>; StartTime=(Get-Date).AddHours(-1)} |
| Anbieter | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; ProviderName="<Anbieter>"; StartTime=(Get-Date).AddHours(-1)} |
| Übersicht | [RO] Get-WinEvent -LogName "System" -MaxEvents 100 | Select-Object TimeCreated,Id,ProviderName,LevelDisplayName,Message |
Windows-Ereignisstufen
| Level | Bedeutung |
|---|---|
| 1 | Kritisch |
| 2 | Fehler |
| 3 | Warnung |
| 4 | Information |
| 5 | Ausführlich |
35. Windows-Dienstereignisse
| Ereignis-ID | Typische Bedeutung |
|---|---|
| 7031 | Dienst wurde unerwartet beendet |
| 7034 | Dienst wurde unerwartet beendet |
| 7036 | Dienstzustand wurde geändert |
| 7040 | Starttyp wurde geändert |
| 7045 | neuer Dienst wurde installiert |
Abfrage
[RO] Get-WinEvent -FilterHashtable @{LogName="System"; ProviderName="Service Control Manager"; Id=7031,7034,7036,7040,7045; StartTime=(Get-Date).AddHours(-1)} | Select-Object TimeCreated,Id,Message
36. Windows-Ereignisprotokolle exportieren
| Protokoll | Befehl |
|---|---|
| System | [FILE][PRIV] wevtutil epl System "<Zielpfad>\System.evtx" |
| Application | [FILE][PRIV] wevtutil epl Application "<Zielpfad>\Application.evtx" |
| Security | [FILE][PRIV][SENSITIV] wevtutil epl Security "<Zielpfad>\Security.evtx" |
| PowerShell Operational | [FILE][PRIV][SENSITIV] wevtutil epl "Microsoft-Windows-PowerShell/Operational" "<Zielpfad>\PowerShell-Operational.evtx" |
Vor dem Export sollte ein neuer Zielordner verwendet werden. Vorhandene Dateien dürfen nicht unkontrolliert überschrieben werden.
37. Linux-Journal
| Aufgabe | Befehl |
|---|---|
| Aktueller Boot | [RO] journalctl -b |
| Vorheriger Boot | [RO] journalctl -b -1 |
| Letzte Stunde | [RO] journalctl --since "1 hour ago" |
| Zeitfenster | [RO] journalctl --since "2026-07-30 14:00:00" --until "2026-07-30 15:00:00" |
| Bestimmter Dienst | [RO] journalctl -u <Dienstname>.service --since "1 hour ago" |
| Kernelmeldungen | [RO] journalctl -k -b |
| Warnungen und schwerer | [RO] journalctl -p warning --since "1 hour ago" |
| Nur Fehler | [RO] journalctl -p err --since "1 hour ago" |
| ISO-Zeitstempel | [RO] journalctl -o short-iso-precise --since "1 hour ago" |
| Ohne Pager | [RO] journalctl --since "1 hour ago" --no-pager |
| Klassische Kernelmeldungen | [RO][PRIV] dmesg --ctime |
38. Linux-Journal exportieren
| Aufgabe | Befehl |
|---|---|
| Aktueller Boot | [FILE] journalctl -b --no-pager --output=short-iso-precise > "<Zielpfad>/journal-current-boot.log" |
| Vorheriger Boot | [FILE] journalctl -b -1 --no-pager --output=short-iso-precise > "<Zielpfad>/journal-previous-boot.log" |
| Zeitfenster | [FILE] journalctl --since "2026-07-30 14:00:00" --until "2026-07-30 15:00:00" --no-pager --output=short-iso-precise > "<Zielpfad>/journal-time-window.log" |
| Dienst | [FILE] journalctl -u <Dienstname>.service --since "1 hour ago" --no-pager --output=short-iso-precise > "<Zielpfad>/<Dienstname>.log" |
| Kernelmeldungen | [FILE][PRIV] dmesg --ctime > "<Zielpfad>/dmesg.log" |
Die Umleitung mit > überschreibt eine vorhandene Datei. Deshalb sollte ein neuer Zielordner verwendet werden.
39. macOS Unified Log
| Aufgabe | Befehl |
|---|---|
| Letzte Stunde | [RO][SENSITIV] log show --last 1h --style compact |
| Zeitfenster | [RO][SENSITIV] log show --start "2026-07-30 14:00:00" --end "2026-07-30 15:00:00" --style compact |
| Fehler und Faults | [RO][SENSITIV] log show --last 1h --predicate 'messageType == error OR messageType == fault' --style compact |
| Bestimmter Prozess | [RO][SENSITIV] log show --last 1h --predicate 'process == "<Prozessname>"' --style compact |
| Prozessfehler | [RO][SENSITIV] log show --last 1h --predicate 'process == "<Prozessname>" AND (messageType == error OR messageType == fault)' --style compact |
| Live-Ansicht | [RO][SENSITIV] log stream --style compact |
Export
[FILE][SENSITIV] log show --last 1h --style compact > "<Zielpfad>/macOS-unified-log.txt"
Grafische Werkzeuge
- Konsole
- Aktivitätsanzeige → Weitere Optionen → Systemdiagnose
40. Windows-Updates und Installationsverlauf
| Aufgabe | Befehl |
|---|---|
| Installierte Hotfixes | [RO] Get-HotFix | Sort-Object InstalledOn -Descending |
| Hotfixdetails | [RO] Get-HotFix | Select-Object InstalledOn,HotFixID,Description,InstalledBy |
| Updateereignisse | [RO] Get-WinEvent -LogName "Microsoft-Windows-WindowsUpdateClient/Operational" -MaxEvents 100 |
| Updateereignisse im Zeitfenster | [RO] Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-WindowsUpdateClient/Operational"; StartTime=[datetime]"2026-07-30 14:00:00"; EndTime=[datetime]"2026-07-30 15:00:00"} |
| Lesbare Updateprotokolldatei | [FILE] Get-WindowsUpdateLog -LogPath "<Zielpfad>\WindowsUpdate.log" |
Get-HotFix zeigt nicht zwingend jede Aktualisierung. Zusätzlich sollten Windows-Updateverlauf und Patchmanagement geprüft werden.
41. Linux-Paketverlauf
| Distribution | Aufgabe | Befehl |
|---|---|---|
| Debian/Ubuntu | APT-Verlauf | [RO] less /var/log/apt/history.log |
| Debian/Ubuntu | DPKG-Verlauf | [RO] less /var/log/dpkg.log |
| Debian/Ubuntu | Paketänderungen | [RO] grep -E " install | upgrade | remove " /var/log/dpkg.log |
| Debian/Ubuntu | rotierte Logs | [RO] zgrep -hE " install | upgrade | remove " /var/log/dpkg.log* |
| RHEL/Rocky/Alma/Fedora | DNF-Verlauf | [RO] dnf history list |
| RHEL/Rocky/Alma/Fedora | Transaktionsdetails | [RO] dnf history info <Transaktions-ID> |
| RHEL/Rocky/Alma/Fedora | letzte Transaktion | [RO] dnf history info last |
| RPM-basiert | Pakete nach Installationszeit | [RO] rpm -qa --last |
| SUSE/openSUSE | Zypper-Verlauf | [RO] less /var/log/zypp/history |
| Arch Linux | Pacman-Verlauf | [RO] less /var/log/pacman.log |
| Arch Linux | Änderungen filtern | [RO] grep -E "\[ALPM\] (installed|upgraded|removed)" /var/log/pacman.log |
42. macOS-Installationsverlauf
| Aufgabe | Befehl |
|---|---|
| Softwareupdateverlauf | [RO] softwareupdate --history |
| Installationsverlauf | [RO] system_profiler SPInstallHistoryDataType |
| Installierte Anwendungen | [RO] system_profiler SPApplicationsDataType |
Grafischer Weg:
Systeminformationen → Software → Installationen
43. Geplante Aufgaben und Automatisierung
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Geplante Aufgaben | [RO] Get-ScheduledTask |
[RO] crontab -l |
[RO] launchctl list |
| Laufzeitinformationen | [RO] Get-ScheduledTask | Get-ScheduledTaskInfo | Sort-Object LastRunTime -Descending |
[RO] systemctl list-timers --all |
[RO] launchctl list |
| Auffällige Ergebnisse | [RO] Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object LastTaskResult -ne 0 |
Cron- und Dienstprotokolle prüfen | Unified Log prüfen |
| Task-Scheduler-Protokoll | [RO] Get-WinEvent -LogName "Microsoft-Windows-TaskScheduler/Operational" -MaxEvents 100 |
Nicht zutreffend | Nicht zutreffend |
| Systemweite Cronjobs | Nicht zutreffend | [RO] ls -la /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly |
Nicht zutreffend |
| Debian/Ubuntu-Cronlog | Nicht zutreffend | [RO] journalctl -u cron --since "1 hour ago" |
Nicht zutreffend |
| RHEL-Cronlog | Nicht zutreffend | [RO] journalctl -u crond --since "1 hour ago" |
Nicht zutreffend |
| LaunchDaemons | Nicht zutreffend | Nicht zutreffend | [RO] ls -la /Library/LaunchDaemons |
| Systemweite LaunchAgents | Nicht zutreffend | Nicht zutreffend | [RO] ls -la /Library/LaunchAgents |
| Benutzer-LaunchAgents | Nicht zutreffend | Nicht zutreffend | [RO] ls -la ~/Library/LaunchAgents |
Ein von 0 abweichendes Task-Ergebnis muss anhand der jeweiligen Aufgabe interpretiert werden.
44. Dateiinformationen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Dateiinformationen | [RO] Get-Item "<Datei>" | Select-Object FullName,Length,CreationTime,LastWriteTime |
[RO] stat "<Datei>" |
[RO] stat -x "<Datei>" |
| Dateityp | Erweiterung und Anwendung prüfen | [RO] file "<Datei>" |
[RO] file "<Datei>" |
| Programmversion | [RO] (Get-Item "<Datei>").VersionInfo |
Paketmanager oder --version |
--version oder Systeminformationen |
| Dateiinhalt | [RO] Get-Content "<Datei>" |
[RO] less "<Datei>" |
[RO] less "<Datei>" |
| Rohinhalt | [RO] Get-Content "<Datei>" -Raw |
[RO] cat "<Datei>" |
[RO] cat "<Datei>" |
Bei großen oder binären Dateien sollte nicht der gesamte Inhalt unkontrolliert ausgegeben werden.
45. Dateien und Konfigurationen vergleichen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Textdateien vergleichen | [RO] Compare-Object (Get-Content "<Datei-A>") (Get-Content "<Datei-B>") |
[RO] diff -u "<Datei-A>" "<Datei-B>" |
[RO] diff -u "<Datei-A>" "<Datei-B>" |
| Binäre Gleichheit | [RO] Get-FileHash "<Datei>" -Algorithm SHA256 |
[RO] sha256sum "<Datei>" |
[RO] shasum -a 256 "<Datei>" |
| Git-Arbeitszustand | [RO] git status |
[RO] git status |
[RO] git status |
| Git-Änderungen | [RO] git diff |
[RO] git diff |
[RO] git diff |
| Letzte Commits | [RO] git log --oneline --decorate -n 20 |
[RO] git log --oneline --decorate -n 20 |
[RO] git log --oneline --decorate -n 20 |
| Verlauf einer Datei | [RO] git log -p -- "<Datei>" |
[RO] git log -p -- "<Datei>" |
[RO] git log -p -- "<Datei>" |
46. Prüfsummen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| SHA-256 einer Datei | [RO] Get-FileHash "<Datei>" -Algorithm SHA256 |
[RO] sha256sum "<Datei>" |
[RO] shasum -a 256 "<Datei>" |
| Prüfsumme prüfen | neu berechnen und vergleichen | [RO] sha256sum -c "<SHA256SUMS-Datei>" |
[RO] shasum -a 256 -c "<SHA256SUMS-Datei>" |
| Ordner-Manifest | [FILE] Get-ChildItem "<Diagnoseordner>" -File -Recurse | Get-FileHash -Algorithm SHA256 | Export-Csv "<Diagnoseordner>-SHA256.csv" -NoTypeInformation -Encoding UTF8 |
[FILE] (cd "<Diagnoseordner>" && find . -type f -print0 | sort -z | xargs -0 -r sha256sum) > "<Diagnoseordner>-SHA256SUMS.txt" |
[FILE] find "<Diagnoseordner>" -type f -exec shasum -a 256 {} \; > "<Diagnoseordner>-SHA256SUMS.txt" |
Eine Prüfsumme dokumentiert die Dateiintegrität ab dem Zeitpunkt ihrer Berechnung, aber nicht automatisch Herkunft oder Authentizität.
47. Dateiberechtigungen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| ACL anzeigen | [RO][SENSITIV] Get-Acl "<Pfad>" | Format-List |
[RO][SENSITIV] getfacl "<Pfad>" |
[RO][SENSITIV] ls -lde "<Pfad>" |
| Klassische Ansicht | [RO][SENSITIV] icacls "<Pfad>" |
[RO] ls -ld "<Pfad>" |
[RO] ls -lde "<Pfad>" |
| Benutzergruppen | [RO][SENSITIV] whoami /all |
[RO] id <Benutzername> |
[RO] id <Benutzername> |
| Vollständigen Pfad prüfen | Pfadabschnitte mit Get-Acl prüfen |
[RO] namei -l "<Pfad>" |
Pfadabschnitte mit ls -lde prüfen |
| Besitzer und Gruppe | [RO] Get-Acl "<Pfad>" | Select-Object Owner |
[RO] stat "<Pfad>" |
[RO] stat -x "<Pfad>" |
48. Active Directory und Gruppenrichtlinien
| Aufgabe | Windows |
|---|---|
| Benutzer- und Gruppeninformationen | [RO][SENSITIV] whoami /all |
| Resultierende Richtlinien kompakt | [RO] gpresult /r |
| HTML-Bericht | [FILE] gpresult /h "<Zielpfad>\gpresult.html" |
| Gruppenrichtlinienprotokoll | [RO] Get-WinEvent -LogName "Microsoft-Windows-GroupPolicy/Operational" -MaxEvents 100 |
| Sicheren Domänenkanal prüfen | [TEST] Test-ComputerSecureChannel -Verbose |
| Bestimmten Domänencontroller prüfen | [TEST] Test-ComputerSecureChannel -Server "<Domänencontroller>" -Verbose |
| Sicherheitsereignisse | [RO][PRIV][SENSITIV] Get-WinEvent -LogName "Security" -MaxEvents 100 |
Test-ComputerSecureChannel ist für Domänenmitgliedscomputer vorgesehen. Der Parameter -Repair wäre eine Änderung und ist kein reiner Test.
49. Konfigurationssyntax prüfen
| Format oder Dienst | Windows | Linux | macOS |
|---|---|---|---|
| JSON mit PowerShell | [TEST] Get-Content "<Datei.json>" -Raw | ConvertFrom-Json | Out-Null |
PowerShell nur wenn installiert | PowerShell nur wenn installiert |
| JSON mit Python | [TEST] python3 -m json.tool "<Datei.json>" > NUL |
[TEST] python3 -m json.tool "<Datei.json>" > /dev/null |
[TEST] python3 -m json.tool "<Datei.json>" > /dev/null |
| JSON mit jq | [TEST] jq empty "<Datei.json>" |
[TEST] jq empty "<Datei.json>" |
[TEST] jq empty "<Datei.json>" |
| Property List | Nicht zutreffend | Nicht zutreffend | [TEST] plutil -lint "<Datei.plist>" |
| systemd-Unit | Nicht zutreffend | [TEST] systemd-analyze verify "<Datei.service>" |
Nicht zutreffend |
| NGINX | [TEST][PRIV] nginx -t sofern installiert |
[TEST][PRIV] nginx -t |
[TEST][PRIV] nginx -t sofern installiert |
| Apache | installationsabhängig | [TEST][PRIV] apachectl configtest |
[TEST][PRIV] apachectl configtest |
| OpenSSH-Server | [TEST][PRIV] sshd -t sofern installiert |
[TEST][PRIV] sshd -t |
[TEST][PRIV] sshd -t |
Ein erfolgreicher Syntax-Test bestätigt nicht, dass Netzwerkziele, Zertifikate, Berechtigungen und Abhängigkeiten funktionieren.
50. Terminal- und Diagnosesitzung protokollieren
| Aufgabe | Windows PowerShell | Linux | macOS |
|---|---|---|---|
| Aufzeichnung starten | [FILE][SENSITIV] Start-Transcript -Path "<Zielpfad>\Testprotokoll.txt" -IncludeInvocationHeader -NoClobber |
[FILE][SENSITIV] script "<Zielpfad>/Testprotokoll.txt" |
[FILE][SENSITIV] script "<Zielpfad>/Testprotokoll.txt" |
| Aufzeichnung beenden | [FILE] Stop-Transcript |
exit oder Strg + D |
exit oder Strg + D |
| Anzeigen und speichern | [FILE] <Befehl> | Tee-Object -FilePath "<Zielpfad>\Ausgabe.txt" |
[FILE] <Befehl> 2>&1 | tee "<Zielpfad>/Ausgabe.txt" |
[FILE] <Befehl> 2>&1 | tee "<Zielpfad>/Ausgabe.txt" |
| Ausgabe und Fehler speichern | [FILE] <Befehl> *> "<Zielpfad>\Ausgabe.txt" |
[FILE] <Befehl> > "<Zielpfad>/Ausgabe.txt" 2>&1 |
[FILE] <Befehl> > "<Zielpfad>/Ausgabe.txt" 2>&1 |
Transkripte können Benutzernamen, Pfade und andere sensible Informationen enthalten.
51. Rückgabewerte prüfen
| Plattform | Befehl | Bedeutung |
|---|---|---|
| PowerShell-Cmdlet | [RO] $? |
Erfolg der vorherigen PowerShell-Operation |
| PowerShell mit externem Programm | [RO] $LASTEXITCODE |
Exit-Code des letzten nativen Programms |
| Windows CMD | [RO] echo %ERRORLEVEL% |
Exit-Code des letzten Programms |
| Linux | [RO] echo $? |
Exit-Code des letzten Befehls |
| macOS | [RO] echo $? |
Exit-Code des letzten Befehls |
Der Wert muss unmittelbar nach dem betreffenden Befehl gesichert werden.
Ein Exit-Code 0 bedeutet nur, dass das Werkzeug Erfolg meldet. Die Benutzer- oder Anwendungsfunktion kann trotzdem fehlschlagen.
52. Werkzeugversionen
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| PowerShell-Version | [RO] $PSVersionTable |
[RO] pwsh -Version sofern installiert |
[RO] pwsh -Version sofern installiert |
| curl-Version | [RO] curl.exe --version |
[RO] curl --version |
[RO] curl --version |
| OpenSSL-Version | [RO] openssl version -a |
[RO] openssl version -a |
[RO] openssl version -a |
| Git-Version | [RO] git --version |
[RO] git --version |
[RO] git --version |
| Python-Version | [RO] python --version oder python3 --version |
[RO] python3 --version |
[RO] python3 --version |
Unterschiedliche Versionen können verschiedene Optionen, Protokolle oder Standardwerte verwenden.
53. Paketaufzeichnung
Paketaufzeichnungen können vertrauliche Nutzdaten, Hostnamen, IP-Adressen und Sitzungsinformationen enthalten. Berechtigung, Speicherort, Zeitraum und Datenschutz müssen vorher geklärt sein.
Windows mit pktmon
| Aufgabe | Befehl |
|---|---|
| Aufzeichnung starten | [FILE][TEST][PRIV][SENSITIV] pktmon start --capture --pkt-size 0 --file-name "<Zielpfad>\capture.etl" |
| Aufzeichnung beenden | [TEST][PRIV] pktmon stop |
| In PCAPNG umwandeln | [FILE][SENSITIV] pktmon etl2pcap "<Zielpfad>\capture.etl" --out "<Zielpfad>\capture.pcapng" |
Linux mit tcpdump
[FILE][TEST][PRIV][SENSITIV] sudo tcpdump -i any -nn -s 0 -w "<Zielpfad>/capture.pcap"
macOS mit tcpdump
[FILE][TEST][PRIV][SENSITIV] sudo tcpdump -i <Interface> -nn -s 0 -w "<Zielpfad>/capture.pcap"
Beenden mit Strg + C.
54. Dienständerungen – nur nach Sicherung und Freigabe
Die folgenden Befehle verändern den Betriebszustand und gehören nicht an den Anfang der Diagnose.
| Aufgabe | Windows | Linux | macOS |
|---|---|---|---|
| Neustart nur anzeigen | [TEST] Restart-Service -Name <Dienstname> -WhatIf |
keine vollständige systemctl-Simulation | keine vollständige launchctl-Simulation |
| Dienst starten | [CHANGE][PRIV] Start-Service -Name <Dienstname> -Confirm |
[CHANGE][PRIV] sudo systemctl start <Dienstname>.service |
[CHANGE][PRIV] sudo launchctl kickstart system/<Dienstlabel> |
| Konfiguration neu laden | anwendungsspezifisch | [CHANGE][PRIV] sudo systemctl reload <Dienstname>.service |
anwendungsspezifisch |
| Dienst neu starten | [CHANGE][DISRUPTIV][PRIV] Restart-Service -Name <Dienstname> -Confirm |
[CHANGE][DISRUPTIV][PRIV] sudo systemctl restart <Dienstname>.service |
[CHANGE][DISRUPTIV][PRIV] sudo launchctl kickstart -k system/<Dienstlabel> |
| Nur laufenden Dienst neu starten | Status vorher prüfen | [CHANGE][DISRUPTIV][PRIV] sudo systemctl try-restart <Dienstname>.service |
Status vorher prüfen |
| Zustand danach | [RO] Get-Service -Name <Dienstname> |
[RO] systemctl status <Dienstname>.service --no-pager |
[RO][PRIV] launchctl print system/<Dienstlabel> |
Ein Reload funktioniert nur, wenn der jeweilige Dienst diese Funktion unterstützt.
55. Konfigurationsdatei sichern
Windows
$backupFile = Join-Path "<Zielpfad>" "config-$(Get-Date -Format 'yyyyMMdd-HHmmss').bak"
Copy-Item "<Konfigurationsdatei>" $backupFile
Get-FileHash -Path "<Konfigurationsdatei>", $backupFile -Algorithm SHA256
Linux
backup_file="<Zielpfad>/config-$(date +%Y%m%d-%H%M%S).bak"
cp --preserve=all -- "<Konfigurationsdatei>" "$backup_file"
sha256sum "<Konfigurationsdatei>" "$backup_file"
macOS
backup_file="<Zielpfad>/config-$(date +%Y%m%d-%H%M%S).bak"
cp -p "<Konfigurationsdatei>" "$backup_file"
shasum -a 256 "<Konfigurationsdatei>" "$backup_file"
Für komplexe Anwendungen, Datenbanken, Verzeichnisdienste und Cluster muss die vorgesehene Backup- oder Exportfunktion verwendet werden.
56. Einfache Konfigurationsdatei zurückspielen
Nur verwenden, wenn Sicherung, Dateirechte, Besitzer, Metadaten und Anwendungsvorgaben geprüft wurden.
| Windows | Linux | macOS |
|---|---|---|
[CHANGE][PRIV] Copy-Item "<Sicherungsdatei>" "<Konfigurationsdatei>" -Force |
[CHANGE][PRIV] sudo cp --preserve=all -- "<Sicherungsdatei>" "<Konfigurationsdatei>" |
[CHANGE][PRIV] sudo cp -p "<Sicherungsdatei>" "<Konfigurationsdatei>" |
Danach prüfen:
- Inhalt,
- Prüfsumme,
- Besitzer,
- Gruppe,
- Berechtigungen,
- ACL,
- Syntax,
- Dienststatus,
- Benutzerfunktion.
57. Häufige Ergebniskombinationen
| Beobachtung | Wahrscheinlicher Prüfbereich |
|---|---|
| Zugriff per IP funktioniert, per Name nicht | DNS, Hosts-Datei oder Suchdomäne |
| DNS liefert unterschiedliche IPs | Split-DNS, Load Balancing oder Cache |
| Ping scheitert, TCP funktioniert | ICMP wahrscheinlich blockiert |
| Ping funktioniert, TCP scheitert | Port, Listener oder Firewall |
| TCP erfolgreich, TLS scheitert | Zertifikat, TLS-Version, Cipher oder SNI |
| TLS erfolgreich, HTTP 500 | Anwendung oder Backend |
| HTTP 401 | Authentifizierung |
| HTTP 403 | Autorisierung oder Sicherheitsrichtlinie |
| HTTP 502 oder 504 | Proxy, Load Balancer oder Backend |
| localhost funktioniert, Remotezugriff nicht | Listener-Bindung, Firewall oder Netzwerkpfad |
| localhost funktioniert nicht | Dienst oder Anwendung |
| nur ein Benutzer betroffen | Konto, Rolle, Berechtigung oder Profil |
| nur ein Client betroffen | Clientkonfiguration, lokaler Dienst oder Sicherheitssoftware |
| nur ein VLAN betroffen | VLAN, ACL, Routing, DHCP oder Gateway |
| alle Clients betroffen | Server, Dienst oder gemeinsame Abhängigkeit |
| Dienststatus „Running“, aber Port fehlt | Bindungs-, Konfigurations- oder Prozessproblem |
| Port vorhanden, Anwendung antwortet nicht | Anwendung hängt oder Abhängigkeit fehlt |
| Neustart behebt Fehler vorübergehend | Cache, Speicherleck, Prozesszustand oder Verbindung |
| Datenträger frei, Schreiben scheitert | Inodes, Quota, Berechtigung oder Read-only-Mount |
58. Häufige Fehlermeldungen bei Netzwerkverbindungen
| Meldung | Mögliche Bedeutung |
|---|---|
| Connection refused | Ziel erreichbar, aber kein Listener oder aktive Ablehnung |
| Connection timed out | Paketverlust, Filterung, Routing oder nicht antwortendes Ziel |
| No route to host | Route, Gateway, Interface oder Netz nicht erreichbar |
| Network is unreachable | keine geeignete Route oder Schnittstelle |
| Name or service not known | Namensauflösung fehlgeschlagen |
| Temporary failure in name resolution | DNS-Server oder Resolver vorübergehend nicht verfügbar |
| Hostname mismatch | Zertifikat passt nicht zum aufgerufenen Hostnamen |
| Certificate expired | Zertifikat ist abgelaufen |
| Permission denied | Dateirechte, ACL, Rolle oder Sicherheitsrichtlinie |
| Address already in use | Port oder Socket bereits gebunden |
| No space left on device | Speicherplatz oder Inodes erschöpft |
| Too many open files | Datei- oder Prozesslimit erreicht |
59. Was vor einem Neustart gesichert werden sollte
| Priorität | Information |
|---|---|
| 1 | Fehlermeldung und Screenshot |
| 2 | Uhrzeit und Zeitzone |
| 3 | laufende Prozesse |
| 4 | Dienstzustand |
| 5 | aktive Netzwerkverbindungen |
| 6 | Listener |
| 7 | IP-Konfiguration und Routing |
| 8 | ARP-, Neighbor- und DNS-Cache |
| 9 | angemeldete Benutzer |
| 10 | CPU-, RAM- und Datenträgerzustand |
| 11 | aktuelle Protokolle |
| 12 | letzte Änderungen |
| 13 | Konfiguration und Prüfsummen |
60. Was nicht unüberlegt ausgeführt werden sollte
| Maßnahme | Grund |
|---|---|
| Computer neu starten | flüchtige Informationen gehen verloren |
| Dienst sofort neu starten | ursprünglicher Prozesszustand geht verloren |
| Prozess beenden | Verbindungen, Speicher und offene Dateien verschwinden |
| DNS-Cache leeren | diagnostisch relevante Cacheeinträge gehen verloren |
| ARP-Tabelle leeren | Zuordnungen zwischen IP und MAC gehen verloren |
| Protokolle löschen | Belege gehen verloren |
| Firewall vollständig deaktivieren | Sicherheitsrisiko und unklarer Test |
| Update installieren | Ausgangszustand wird verändert |
| Konfiguration zurücksetzen | Fehlerursache ist schwerer nachvollziehbar |
| Snapshot unkontrolliert zurückspielen | Daten- und Konsistenzrisiko |
| mehrere Änderungen gleichzeitig | Wirkung kann nicht zugeordnet werden |
61. Minimaler Erstsnapshot – Windows
| Aufgabe | Befehl |
|---|---|
| Zeit | [RO] Get-Date -Format o |
| Betriebssystem | [RO] Get-CimInstance Win32_OperatingSystem |
| letzter Start | [RO] Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime |
| Benutzer | [RO][SENSITIV] whoami /all |
| Prozesse | [RO][SENSITIV] Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine |
| Dienste | [RO] Get-Service |
| IP-Konfiguration | [RO] ipconfig /all |
| Routing | [RO] route print |
| ARP | [RO] arp -a |
| DNS-Cache | [RO][SENSITIV] ipconfig /displaydns |
| TCP-Verbindungen | [RO][PRIV] netstat -ano |
| Volumes | [RO] Get-Volume |
| Fehlerprotokoll | [RO] Get-WinEvent -FilterHashtable @{LogName="System"; Level=1,2; StartTime=(Get-Date).AddHours(-1)} |
62. Minimaler Erstsnapshot – Linux
| Aufgabe | Befehl |
|---|---|
| Zeit | [RO] date --iso-8601=seconds |
| Betriebssystem | [RO] cat /etc/os-release |
| Kernel | [RO] uname -a |
| Betriebsdauer | [RO] uptime |
| Benutzer | [RO] who -a |
| Prozesse | [RO][SENSITIV] ps auxww |
| Dienste | [RO] systemctl --failed |
| IP-Konfiguration | [RO] ip -details address show |
| Routing | [RO] ip route show table all |
| Neighbor | [RO] ip neigh show |
| DNS | [RO] resolvectl status |
| Sockets | [RO][PRIV] ss -tulpn |
| Speicher | [RO] free -h |
| Dateisysteme | [RO] df -hT |
| Journal | [RO] journalctl -b -p warning --no-pager |
| Kernelmeldungen | [RO][PRIV] dmesg --ctime |
63. Minimaler Erstsnapshot – macOS
| Aufgabe | Befehl |
|---|---|
| Zeit | [RO] date "+%Y-%m-%dT%H:%M:%S%z" |
| Betriebssystem | [RO] sw_vers |
| Kernel | [RO] uname -a |
| Betriebsdauer | [RO] uptime |
| Benutzer | [RO] who |
| Prozesse | [RO][SENSITIV] ps auxww |
| Dienste | [RO] launchctl list |
| IP-Konfiguration | [RO] ifconfig -a |
| Routing | [RO] netstat -rn |
| ARP | [RO] arp -an |
| DNS | [RO][SENSITIV] scutil --dns |
| TCP-Verbindungen | [RO] netstat -anv -p tcp |
| Speicher | [RO] vm_stat |
| Dateisysteme | [RO] df -h |
| Protokollfehler | [RO][SENSITIV] log show --last 1h --predicate 'messageType == error OR messageType == fault' --style compact |
64. Abschlussprüfung nach einer Lösung
| Ebene | Windows | Linux | macOS |
|---|---|---|---|
| Zeitpunkt | Get-Date -Format o |
date --iso-8601=seconds |
date "+%Y-%m-%dT%H:%M:%S%z" |
| Dienststatus | Get-Service -Name <Dienstname> |
systemctl status <Dienstname>.service |
launchctl print system/<Dienstlabel> |
| Listener | Get-NetTCPConnection -State Listen -LocalPort <Port> |
ss -lntp | grep ":<Port>" |
lsof -nP -iTCP:<Port> -sTCP:LISTEN |
| TCP-Test | Test-NetConnection <Servername> -Port <Port> |
nc -vz -w 3 <Servername> <Port> |
nc -vz -w 3 <Servername> <Port> |
| HTTP-Test | curl.exe https://<Servername>/ |
curl https://<Servername>/ |
curl https://<Servername>/ |
| neue Fehler | Get-WinEvent |
journalctl |
log show |
| Benutzerfunktion | ursprünglichen Ablauf wiederholen | ursprünglichen Ablauf wiederholen | ursprünglichen Ablauf wiederholen |
| Sicherheit | unerlaubten Zugriff negativ testen | unerlaubten Zugriff negativ testen | unerlaubten Zugriff negativ testen |
| Monitoring | zentrale Überwachung prüfen | zentrale Überwachung prüfen | zentrale Überwachung prüfen |
65. Wichtigste Regeln
- Erst beobachten, dann verändern.
- Fehlermeldung vollständig dokumentieren.
- Uhrzeit und Zeitzone prüfen.
- Betroffene und funktionierende Systeme vergleichen.
- Ping nicht mit Dienstverfügbarkeit verwechseln.
- TCP-Porttest nicht mit funktionierender Anwendung verwechseln.
- Dienststatus
Runningnicht mit Dienstgesundheit verwechseln. - Zeitliche Korrelation nicht automatisch als Ursache behandeln.
- Pro Test möglichst nur eine Variable verändern.
- Erwartetes Ergebnis vor dem Test definieren.
- Widersprechende Belege aktiv suchen.
- Vor Neustart flüchtige Informationen sichern.
- Vor Änderungen Konfiguration und Rückfallweg sichern.
- Nach der Lösung denselben Test erneut ausführen.
- Positive, negative und Regressionstests durchführen.
- Workaround und dauerhafte Lösung getrennt dokumentieren.
- Offene Maßnahmen mit Verantwortlichkeit und Termin versehen.
Ergebnis dieser Seite
Diese Seite bildet die Schnellreferenz für Kapitel 1. Sie enthält die wichtigsten Befehle für:
- Windows,
- Linux,
- macOS,
- Systemzustand,
- Prozesse und Dienste,
- Netzwerk und DNS,
- Routing und Verbindungen,
- HTTP und TLS,
- Protokolle,
- Updates,
- geplante Aufgaben,
- Berechtigungen,
- Konfigurationsvergleiche,
- Beweissicherung,
- Änderungen und Abschlussprüfungen.
Damit ist Kapitel 1 – Grundlagen der systematischen Fehleranalyse abgeschlossen.
Offizielle Hersteller-, Standard- und Projektdokumentation
- Microsoft Learn – PowerShell-Dokumentation
- Microsoft Learn – Test-NetConnection
- Microsoft Learn – Resolve-DnsName
- Microsoft Learn – Get-WinEvent
- Microsoft Learn – wevtutil
- Microsoft Learn – Get-Service
- Microsoft Learn – Restart-Service
- Microsoft Learn – Get-FileHash
- Microsoft Learn – Start-Transcript
- Microsoft Learn – Windows-Update-Protokolldateien
- Microsoft Learn – Packet Monitor
- freedesktop.org – systemctl
- freedesktop.org – journalctl
- freedesktop.org – systemd-analyze
- Linux man-pages – ip(8)
- Linux man-pages – ss(8)
- Linux man-pages – script(1)
- Apple Support – Protokollmeldungen in der Konsole
- Apple Support – Systemdiagnose in der Aktivitätsanzeige
- Apple Support – Scriptverwaltung mit launchd
- Apple Support – Installationsverlauf anzeigen
- curl – Offizielle Befehlsreferenz
- OpenSSL – s_client
- RFC Editor – RFC 9110: HTTP Semantics
- RFC Editor – RFC 3227: Evidence Collection and Archiving