witr – Freshes, in Go gekochtes Open-Source Diagnosewerkzeug (Apache 2.0), das die eine Frage beantwortet, die sich ausgefuchste Terminal-Krieger täglich stellen: „Warum läuft das?“
Wer regelmäßig per Terminal auf Servern oder der eigenen Kiste unterwegs ist, kennt das Szenario: Ein unbekannter Prozess rasiert Ressourcen, ein Port ist so hart blockiert wie deine Telefonnummer auf dem Handy der Ex, oder eine Datei ist aus noch unerklärlichen Gründen gesperrt. Standardwerkzeuge wie ps, lsof, ss, netstat, systemctl oder docker ps zeigen zwar zuverlässig, was gerade läuft, aber nicht zwingend, warum oder wer den Prozess gestartet hat. Die Kausalität darf man sich selbst zusammenpuzzeln.
Und genau hier zieht das Gewitr auf und witr wittert seine große Chance. Er macht dabei eiskalt den 31er und verrät frei nach Matthäus 26,75 den Prozess und dessen Herkunft (im Gegensatz zu den Medien), noch bevor der Hahn am Morgen kräht. Dabei verfolgt er Prozesse, Ports, Container und offene Dateien so hartnäckig wie der Staat Leute, die unliebsame Meme-Posts raushauen, zurück bis zur kompletten Entstehungskette und liefert das Ergebnis als lesbaren Baum, als JSON oder im interaktiven TUI-Dashboard.
Stabile Features:
- JSON-Ausgabe für Skripte und Automation.
- Online-Browser-Playground Sandkasten zum Ausprobieren ohne Installation
- Prozess-, Port-, Datei- und Container-Lookup in einem Abwasch
- Läuft als flottes Single Static Binary auf Linux, macOS, FreeBSD und Windows
- Vollständige Ancestry-Kette (wer hat wen gestartet – inklusive der üblichen Verdächtigen)
- Port- & Datei-Analyse: Ermittelt direkt, Welcher Dienst oder Prozess einen bestimmten Port blockiert oder eine Datei sperrt
- Container-Erkennung: Identifiziert Abhängigkeiten über gängige Runtimes wie Docker, Podman oder Kubernetes hinweg
- Kompakte Ausgabe & TUI: Neben einer übersichtlichen Baumansicht im Terminal steht auch ein schickes interaktives TUI-Dashboard zur Verfügung
Ansicht Firefox-Process und die zu dem Prozess dazugehörenden Prozess-Infos:
Nützliche witr-beständige Beispiele:
# Knowledge Base: witr (Process, Port & Container Diagnostics) # Repository: https://github.com/pranshuparmar/witr # Playground: https://pranshuparmar.github.io/witr/ #=========================================================== # 01. Installation (Ubuntu) #=========================================================== # Offizielle direkte Methode (Vorher inspizieren!!!) # curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash # Offizielle Methode aber vorsichtiger curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh -o witr-install.sh cat/bat oder less witr-install.sh bash witr-install.sh # Manuelle Methode (statisches Binary, Distro-unabhängig): curl -LO https://github.com/pranshuparmar/witr/releases/latest/download/witr-linux-amd64 chmod +x witr-linux-amd64 sudo mv witr-linux-amd64 /usr/local/bin/witr # Alternative über Paketmanager (Version hinkt hinterher) sudo apt install witr # Check witr --version #=========================================================== # 02. Port- & Netzwerk-Diagnose #=========================================================== # Mehrere Ports gleichzeitig checken sudo witr --port 443 --port 3000 # Welcher Prozess belegt den DB- oder Web-Port? sudo witr --port 5432 # PostgreSQL sudo witr --port 3306 # MariaDB / MySQL sudo witr --port 80 --port 443 # Nginx/Caddy # Kubernetes-Ports sudo witr --port 10250 # kubelet (Node-Agent) sudo witr --port 2379 --port 2380 # etcd (Control-Plane) sudo witr --port 6443 --port 10257 # API-Server / Controller-Manager # Sicherheitsrelevante Ports (öffentliches Binding erkennen) sudo witr --port 2375 --warnings # Docker API (sollte NICHT öffentlich sein) sudo witr --port 5432 --warnings # PostgreSQL öffentlich erreichbar? sudo witr --port 3306 --warnings # MariaDB öffentlich erreichbar? #=========================================================== # 03. DB-Diagnose (PostgreSQL & MariaDB) #=========================================================== # Defaultcheck sudo witr postgres # Prozessbäume & Worker-Hierarchien analysieren sudo witr postgres --tree # nur Hierarchie sudo witr mariadbd --verbose # volle Details + erweiterte Infos # Lock-Dateien nach Crash/Restart checken (welcher Prozess blockiert den Start?) sudo witr --file /var/run/mysqld/mysqld.pid # MariaDB Lock sudo witr --file /var/lib/postgresql/*/main/postmaster.pid # PostgreSQL # Verwaiste Prozesse & Auffälligkeiten anzeigen sudo witr postgres --warnings #=========================================================== # 04. Container & Kubernetes Troubleshooting #=========================================================== # Zeigt, welcher Prozess den Docker-/Containerd-Socket aktuell hält sudo witr --file /var/run/docker.sock sudo witr --file /run/containerd/containerd.sock # Container-Prozesse auf dem Host zurückverfolgen sudo witr --container sudo witr --container --verbose # inkl. Mounts, Netzwerke, Compose-Metadaten sudo witr containerd-shim # Paketmanager-Locks (hängende Updates identifizieren) sudo witr --file /var/lib/dpkg/lock-frontend #=========================================================== # 05. Erweiterte Prozessanalyse & Automation #=========================================================== # Interaktiver TUI (schnellste Art, ein System zu erkunden) sudo witr # Prozessdetails mit Umgebungsvariablen & File-Deskriptoren sudo witr node --env --verbose sudo witr nginx --warnings # JSON-Ausgabe für Scripts & Monitoring (Bsp. PID ermitteln) sudo witr --port 5432 --json | jq '.[0].pid' # Stramm formatierte Ausgabe für Logfiles / CI (ohne Farbcodes) sudo witr sshd --short --no-color # Exit-Code-basierte Health-Checks (für Cron/Monitoring) sudo witr --port 5432 --short case $? in 0) echo "Postgres läuft, keine Warnungen" ;; 1) echo "Postgres läuft, aber mit Warnungen" ;; 2) echo "Postgres NICHT erreichbar" ;; esac #=========================================================== # Misc #=========================================================== # Wichtigste Flags (Kurzform | Langform | Beschreibung): # -o, --port Port(s) abfragen, die ein Prozess hält (wiederholbar) # -p, --pid PID(s) direkt abfragen (wiederholbar) # -f, --file Datei(en) abfragen, die ein Prozess offen hält (wiederholbar) # -c, --container Container abfragen nach Name/Image/Command/Compose-Labels # -t, --tree Nur die Ahnenkette als Baum (inkl. Kindprozesse, Target hervorgehoben. Reduzierte Ausgabe) # -s, --short Nur die Ahnenkette ausgeben (kompakt, eine Zeile) # -x, --exact Exakte Namenssuche statt Substring-/Fuzzy-Match # --env Umgebungsvariablen des Prozesses mit ausgeben # --verbose Erweiterte Prozessinfos (Mounts, Netzwerke, Compose-Metadaten bei Containern) # --warnings Nur Warnungen ausgeben (z.B. root, public bind, CAP_SYS_ADMIN, LD_PRELOAD) # --json Ausgabe als JSON (für Scripts/Monitoring/CI) # --no-color Farbcodes deaktivieren (stabil für Logfiles/CI usw.) # -i, --interactive Interaktiver sexy TUI-Modus (Tabs: Prozesse, Ports, Container, Locks) # -h, --help Hilfe inkl. Beispiele anzeigen # -v, --version Version ausgeben # Hinweise: # - Alle Zielflags (--pid, --port, --file, --container) sind wiederholbar & lassen sich mischen (z.B. witr nginx --port 5432 --pid 1234). # - Exit-Codes: 0 = OK | 1 = Warnungen | 2 = nicht gefunden | 3 = Permission denied | 4 = ungültige Eingabe | 5 = interner Fehler


