# 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 |

---

<details>
<summary><strong>3. Plattformhinweise</strong></summary>

| 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>` |

</details>

<details>
<summary><strong>4. Schneller Diagnoseablauf</strong></summary>

| 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 |

</details>

<details>
<summary><strong>5. Datum, Uhrzeit und Zeitzone</strong></summary>

| 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 |

</details>

<details>
<summary><strong>6. Hostname, Betriebssystem und Hardware</strong></summary>

| 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.

</details>

<details>
<summary><strong>7. Systemstart und Betriebsdauer</strong></summary>

| 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` |

</details>

<details>
<summary><strong>8. Benutzeridentität und Sitzungen</strong></summary>

| 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.

</details>

<details>
<summary><strong>9. Prozesse</strong></summary>

| 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>` |

</details>

<details>
<summary><strong>10. Dienste</strong></summary>

| 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>"` |

</details>

<details>
<summary><strong>11. Dienstabhängigkeiten</strong></summary>

| 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>"` |

</details>

<details>
<summary><strong>12. Arbeitsspeicher</strong></summary>

| 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.

</details>

<details>
<summary><strong>13. Datenträger und Dateisysteme</strong></summary>

| 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`.

</details>

<details>
<summary><strong>14. IP-Konfiguration</strong></summary>

| 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` |

</details>

<details>
<summary><strong>15. DHCP-Informationen am Client</strong></summary>

| 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.

</details>

<details>
<summary><strong>16. DNS-Konfiguration</strong></summary>

| 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 |

</details>

<details>
<summary><strong>17. DNS-Auflösung</strong></summary>

| 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 |

</details>

<details>
<summary><strong>18. Hosts-Datei anzeigen</strong></summary>

| 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.

</details>

<details>
<summary><strong>19. Routing</strong></summary>

| 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` |

</details>

<details>
<summary><strong>20. ARP- und Neighbor-Tabelle</strong></summary>

| 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 |

</details>

<details>
<summary><strong>21. Proxykonfiguration</strong></summary>

| 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.

</details>

<details>
<summary><strong>22. Aktive TCP-Verbindungen</strong></summary>

| 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` |

</details>

<details>
<summary><strong>23. UDP-Endpunkte</strong></summary>

| 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.

</details>

<details>
<summary><strong>24. TCP-Listener</strong></summary>

| 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.

</details>

<details>
<summary><strong>25. ICMP-Erreichbarkeit</strong></summary>

| 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.

</details>

<details>
<summary><strong>26. TCP-Port testen</strong></summary>

| 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 |

</details>

<details>
<summary><strong>27. Netzwerkpfad verfolgen</strong></summary>

| 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.

</details>

<details>
<summary><strong>28. Lokalen und entfernten Dienst vergleichen</strong></summary>

| 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 |

</details>

<details>
<summary><strong>29. HTTP- und HTTPS-Test</strong></summary>

| 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.

</details>

<details>
<summary><strong>30. HTTP-Zeiten messen</strong></summary>

**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 |

</details>

<details>
<summary><strong>31. Bestimmtes HTTPS-Ziel ohne DNS-Änderung testen</strong></summary>

| 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.

</details>

<details>
<summary><strong>32. TLS prüfen</strong></summary>

| 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.

</details>

<details>
<summary><strong>33. HTTP-Status schnell interpretieren</strong></summary>

| 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.

</details>

<details>
<summary><strong>34. Windows-Ereignisprotokolle</strong></summary>

| 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 |

</details>

<details>
<summary><strong>35. Windows-Dienstereignisse</strong></summary>

| 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`

</details>

<details>
<summary><strong>36. Windows-Ereignisprotokolle exportieren</strong></summary>

| 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.

</details>

<details>
<summary><strong>37. Linux-Journal</strong></summary>

| 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` |

</details>

<details>
<summary><strong>38. Linux-Journal exportieren</strong></summary>

| 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.

</details>

<details>
<summary><strong>39. macOS Unified Log</strong></summary>

| 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

</details>

<details>
<summary><strong>40. Windows-Updates und Installationsverlauf</strong></summary>

| 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.

</details>

<details>
<summary><strong>41. Linux-Paketverlauf</strong></summary>

| 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` |

</details>

<details>
<summary><strong>42. macOS-Installationsverlauf</strong></summary>

| Aufgabe | Befehl |
|---|---|
| Softwareupdateverlauf | `[RO] softwareupdate --history` |
| Installationsverlauf | `[RO] system_profiler SPInstallHistoryDataType` |
| Installierte Anwendungen | `[RO] system_profiler SPApplicationsDataType` |

Grafischer Weg:

`Systeminformationen → Software → Installationen`

</details>

<details>
<summary><strong>43. Geplante Aufgaben und Automatisierung</strong></summary>

| 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.

</details>

<details>
<summary><strong>44. Dateiinformationen</strong></summary>

| 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.

</details>

<details>
<summary><strong>45. Dateien und Konfigurationen vergleichen</strong></summary>

| 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>"` |

</details>

<details>
<summary><strong>46. Prüfsummen</strong></summary>

| 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.

</details>

<details>
<summary><strong>47. Dateiberechtigungen</strong></summary>

| 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>"` |

</details>

<details>
<summary><strong>48. Active Directory und Gruppenrichtlinien</strong></summary>

| 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.

</details>

<details>
<summary><strong>49. Konfigurationssyntax prüfen</strong></summary>

| 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.

</details>

<details>
<summary><strong>50. Terminal- und Diagnosesitzung protokollieren</strong></summary>

| 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.

</details>

<details>
<summary><strong>51. Rückgabewerte prüfen</strong></summary>

| 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.

</details>

<details>
<summary><strong>52. Werkzeugversionen</strong></summary>

| 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.

</details>

<details>
<summary><strong>53. Paketaufzeichnung</strong></summary>

> 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`.

</details>

<details>
<summary><strong>54. Dienständerungen – nur nach Sicherung und Freigabe</strong></summary>

> 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.

</details>

<details>
<summary><strong>55. Konfigurationsdatei sichern</strong></summary>

**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.

</details>

<details>
<summary><strong>56. Einfache Konfigurationsdatei zurückspielen</strong></summary>

> 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.

</details>

<details>
<summary><strong>57. Häufige Ergebniskombinationen</strong></summary>

| 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 |

</details>

<details>
<summary><strong>58. Häufige Fehlermeldungen bei Netzwerkverbindungen</strong></summary>

| 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 |

</details>

<details>
<summary><strong>59. Was vor einem Neustart gesichert werden sollte</strong></summary>

| 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 |

</details>

<details>
<summary><strong>60. Was nicht unüberlegt ausgeführt werden sollte</strong></summary>

| 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 |

</details>

<details>
<summary><strong>61. Minimaler Erstsnapshot – Windows</strong></summary>

| 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)}` |

</details>

<details>
<summary><strong>62. Minimaler Erstsnapshot – Linux</strong></summary>

| 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` |

</details>

<details>
<summary><strong>63. Minimaler Erstsnapshot – macOS</strong></summary>

| 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` |

</details>

<details>
<summary><strong>64. Abschlussprüfung nach einer Lösung</strong></summary>

| 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 |

</details>

<details>
<summary><strong>65. Wichtigste Regeln</strong></summary>

- 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 `Running` nicht 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.

</details>

---

**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.

---

<details>
<summary><strong>Offizielle Hersteller-, Standard- und Projektdokumentation</strong></summary>

- [Microsoft Learn – PowerShell-Dokumentation](https://learn.microsoft.com/en-us/powershell/)
- [Microsoft Learn – Test-NetConnection](https://learn.microsoft.com/en-us/powershell/module/nettcpip/test-netconnection)
- [Microsoft Learn – Resolve-DnsName](https://learn.microsoft.com/en-us/powershell/module/dnsclient/resolve-dnsname)
- [Microsoft Learn – Get-WinEvent](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.diagnostics/get-winevent)
- [Microsoft Learn – wevtutil](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/wevtutil)
- [Microsoft Learn – Get-Service](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-service)
- [Microsoft Learn – Restart-Service](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/restart-service)
- [Microsoft Learn – Get-FileHash](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-filehash)
- [Microsoft Learn – Start-Transcript](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.host/start-transcript)
- [Microsoft Learn – Windows-Update-Protokolldateien](https://learn.microsoft.com/en-us/windows/deployment/update/windows-update-logs)
- [Microsoft Learn – Packet Monitor](https://learn.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
- [freedesktop.org – systemctl](https://www.freedesktop.org/software/systemd/man/latest/systemctl.html)
- [freedesktop.org – journalctl](https://www.freedesktop.org/software/systemd/man/latest/journalctl.html)
- [freedesktop.org – systemd-analyze](https://www.freedesktop.org/software/systemd/man/latest/systemd-analyze.html)
- [Linux man-pages – ip(8)](https://man7.org/linux/man-pages/man8/ip.8.html)
- [Linux man-pages – ss(8)](https://man7.org/linux/man-pages/man8/ss.8.html)
- [Linux man-pages – script(1)](https://man7.org/linux/man-pages/man1/script.1.html)
- [Apple Support – Protokollmeldungen in der Konsole](https://support.apple.com/guide/console/log-messages-cnsl1012/mac)
- [Apple Support – Systemdiagnose in der Aktivitätsanzeige](https://support.apple.com/guide/activity-monitor/run-system-diagnostics-actmntr2225/mac)
- [Apple Support – Scriptverwaltung mit launchd](https://support.apple.com/guide/terminal/script-management-with-launchd-apdc6c1077b/mac)
- [Apple Support – Installationsverlauf anzeigen](https://support.apple.com/en-us/101591)
- [curl – Offizielle Befehlsreferenz](https://curl.se/docs/manpage.html)
- [OpenSSL – s_client](https://docs.openssl.org/master/man1/openssl-s_client/)
- [RFC Editor – RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html)
- [RFC Editor – RFC 3227: Evidence Collection and Archiving](https://www.rfc-editor.org/rfc/rfc3227.html)

</details>