CLI AI

netstat: command not found — nehmen Sie ss

2026-07-16

ss -tulpn ist der direkte Ersatz für netstat -tulpn und ist bereits installiert. netstat kam aus net-tools, einem Paket, das moderne Minimalsysteme und Container-Images bewusst weglassen — es nachzuinstallieren kuriert nur das Symptom. Auch das Routing ist umgezogen: netstat -r heißt jetzt ip route.

1. Warum der Befehl verschwunden ist

clai
$ clai zeige lauschende ports→ netstat -tulpnbash: line 1: netstat: command not found

net-tools wird seit Jahren nicht gepflegt, deshalb fliegt es aus schlanken Images. Im Container antwortet apt-get install net-tools oft E: Unable to locate package net-tools — es gibt nichts zu installieren und nichts zu vermissen: ss kommt aus iproute2, das da ist.

2. Der direkte Ersatz für netstat -tulpn

clai
$ clai zeige was auf port 8099 lauscht→ ss -tulpn 'sport = :8099'Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess                              tcp   LISTEN 0      5          127.0.0.1:8099      0.0.0.0:*    users:(("python3",pid=1034062,fd=3))

Die Flags sind dieselben wie früher: -t tcp, -u udp, -l lauschend, -p Prozess, -n ohne Namensauflösung. Neu ist 'sport = :8099' — ein Filter, den ss selbst auswertet, statt eines grep über die Ausgabe.

3. Sehen, wer wirklich verbunden ist

clai
$ clai zeige verbindungen auf port 8099→ ss -tan 'dport = :8099 or sport = :8099'State     Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN    0      5          127.0.0.1:8099      0.0.0.0:*    TIME-WAIT 0      0          127.0.0.1:8099    127.0.0.1:51350

netstat hatte gar keine Filtersprache, also endete alles in einer Pipe zu grep. Hier lassen sich state established, state time-wait, dport und sport mit and und or verbinden.

4. Eine Übersicht statt netstat -s

clai
$ clai zeige eine übersicht der sockets→ ss -sTotal: 2161TCP:   190 (estab 58, closed 108, orphaned 0, timewait 29)

Die erste Zeile zählt alle Sockets der Maschine, die zweite schlüsselt TCP nach Zustand auf. Viele timewait sind normal, viele orphaned sind ein Grund, sich die Anwendung anzusehen.

5. netstat -r ersetzt ip, nicht ss

clai
$ clai zeige die routing-tabelle→ ip routedefault via 172.17.0.1 dev eth0 172.17.0.0/16 dev eth0 scope link  src 172.17.0.2

Routen, Schnittstellen und Adressen sind zu ip gewandert: netstat -r ist ip route, netstat -i ist ip -s link, ifconfig ist ip addr. Bei ss blieben nur die Sockets.

6. Die ganze Übersetzungstabelle

clai
$ clai liste die ss-entsprechung für jeden netstat-flag den ich nutze→ ss -tulpn        # netstat -tulpn→ ss -an           # netstat -an→ ss -s            # netstat -s→ ip route         # netstat -r→ ip -s link       # netstat -i→ ip maddr         # netstat -g

Sechs Zeilen decken alles ab, was die meisten je in netstat getippt haben. Wenn ss -s zu grob ist, liefert nstat die langen Protokollzähler.

Gotchas

  • Ohne root bleibt die Spalte Process bei fremden Prozessen leer. Eigene Sockets zeigen immer users:(("name",pid=…)), alles andere braucht sudo. Ein leeres Process an einem belegten Port heißt fast immer "nicht dein Prozess", nicht "kein Prozess".
  • Einen Dauermodus gibt es nicht. netstat hatte -c zum sekündlichen Wiederholen; ss --help kennt nichts dergleichen. Wiederholen Sie außen herum: watch -n1 'ss -tan'.
  • Klammern im Filter müssen in Anführungszeichen. ss -tan 'sport = :8099' klappt sogar ohne, weil die Shell einfach drei Wörter durchreicht. ss -tan ( sport = :8099 ) erreicht ss dagegen nie: die Shell stirbt mit syntax error near unexpected token '('. Den ganzen Ausdruck quoten und nicht weiter nachdenken.

Related questions

Und wenn ich netstat wirklich brauche? sudo apt install net-tools bringt es auf einem vollen System zurück, in schlanken Images existiert das Paket gar nicht. Sechs Zeilen der Tabelle zu lernen ist der kürzere Weg.

Wie sehe ich Bandbreite pro Prozess? ss zeigt Verbindungen, keine Geschwindigkeit. Für Durchsatz braucht es nethogs oder die Zähler in /proc/<pid>/net/dev.

Der kürzeste Weg zum Portbesitzer? ss -tulpn | grep :8099 — gut, wenn man die Filtersyntax gerade nicht erinnern will.

See also

CliAI schreibt den ss-Filter, während die Finger noch netstat tippen, und zeigt den Befehl vor der Ausführung. In einer Zeile installieren.