ss vs netstat — el runbook traducido
netstat se fue, los flags sobrevivieron: la tabla de traducción línea a línea, la caza de puertos en una sola línea con filtro en kernel, y por qué ss gana en toda distro moderna.
■ espacio · carril de prosa
Usa ss — el estándar actual en toda distro Linux moderna; netstat es legado ahí y a menudo ni siquiera está instalado.
Los flags se traducen uno a uno: netstat -tlpn → ss -tlpn, netstat -tulpna → ss -tulpna. Enrutado e interfaces se mudaron a ip route / ip -s link.
Caza de puertos en una línea: sudo ss -ltnp 'sport = :8080' — el nombre del proceso y el PID vuelven directamente.
EL RUNBOOK TRADUCIDO
Cada línea netstat de tu runbook viejo, y en qué se convierte — lee cada fila de izquierda a derecha:
todas las conexiones TCP + UDPss -tulpnaip routeip -s linkss -sss -tnp 'sport = :22'las dos primeras filas son idénticas — por suerte, los flags cortos de ss coinciden con los de netstat en los casos comunes, así que la memoria muscular sobrevive en gran parte a la mudanza
¿ESTÁ NETSTAT OBSOLETO?
En Linux, en la práctica sí. El paquete net-tools — netstat, ifconfig, route — has not tracked modern kernel features for years and is no longer installed by default on any major distribution. It still exists, still runs, and there is nothing to uninstall, but new features land only in iproute2 (the package behind ss and ip — lleva años sin seguir las funciones modernas del kernel y ya no viene instalado por defecto en ninguna distribución grande. Sigue existiendo, sigue corriendo, pero las funciones nuevas solo aterrizan en
- Ausente en instalaciones frescas. Un Ubuntu 24.04 o servidor Fedora por defecto no tiene ningún
netstathasta que instalesnet-toolsa mano — por eso tanta gente busca "el equivalente de netstat": el binario simplemente se fue. - Sin información moderna de sockets. netstat es anterior a TCP fast open, a las estadísticas de sockets por subflujo y a la atribución de sockets por cgroup.
sslas reporta de forma nativa. - La excepción Windows. En Windows,
netstatestá vivo y coleando —netstat -anosigue siendo la forma estándar de mapear un PID a un puerto en escucha. Solo la historia Linux es deprecación.
EL CABALLO DE BATALLLA, FLAG A FLAG
significa "socket statistics": la visión del kernel de cada socket TCP, UDP y Unix — estados, direcciones, puertos, procesos, timers, profundidades de cola. means "socket statistics": the kernel's view of every TCP, UDP and Unix socket — state, addresses, ports, processes, timers, queue depths.
# todo lo que está en escucha, con el proceso dueño
sudo ss -tulpn
Flag a flag: TCP (-t), UDP (-u), solo escucha (-l), mostrar procesos (-p), salida numérica — sin consultas DNS (-n). El sudo importa para -p : sin root ves los puertos pero no obtienes nombres de proceso de sockets que no te pertenecen. Dos one-liners más que cubren la mayor parte del trabajo:
# todas las conexiones establecidas hacia/desde el puerto 443, con procesos
sudo ss -tnp 'sport = :443 or dport = :443'
# tabla resumen: cuántos sockets en cada estado
ss -s
Esa sintaxis de filtro es una mejora genuina frente al grep-y-rezar de netstat — corre dentro del kernel, así que es exacta en vez de por coincidencia de texto.
¿QUIÉN TIENE EL PUERTO 8080?
La razón más común para llegar a cualquiera de las dos herramientas:
sudo ss -ltnp 'sport = :8080'
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 *:8080 *:* users:(("node",pid=214113,fd=18))
El campo users:(...) te da el nombre del proceso y el PID directamente — sin necesidad de un segundo comando. ¿Puerto ocupado pero no aparece proceso? Normalmente estás mirando un socket en manos de otro namespace de red — un contenedor. Desde el host, sudo ss -ltnp shows the port with an empty process column; match it with docker ps or nsenter into the container's namespace. Prefer a dedicated tool? hace el mismo trabajo y funciona igual en macOS y la mayoría de BSD, por eso sobrevive en los runbooks — pero en Linux, does the same job and works identically on macOS and most BSDs, which is why it survives in runbooks — but on Linux, ya está ahí. is already there.
verifica: sudo ss -ltnp 'sport = :8080' → users:(("node",pid=…)) · cambia a cualquier puerto 1–65535
¿POR QUÉ "ss NOT FOUND"?
Porque o estás en una distro muy vieja (era pre-2007, antes de que iproute2 fuera estándar) o — mucho más probable — no estás en Linux en absoluto. ss no es un comando de macOS; macOS trae lsof and netstat pero no ss, igual la mayoría de los BSD. En Windows: netstat -ano or PowerShell's de PowerShell. Si de verdad estás en Linux y falta, instala iproute2: . If you genuinely are on Linux and it is missing, install iproute2: sudo apt install iproute2 (Debian/Ubuntu) or sudo dnf install iproute2 (Fedora/RHEL).
verifica: ss -V → una cadena de versión en la primera línea
CUANDO NETSTAT AÚN GANA SU FILA
Dos casos honestos. Portabilidad: en una flota mixta de Linux, AIX o BSD viejos, netstat es la única sintaxis presente en todas partes. Continuidad de la memoria muscular en runbooks viejos — si un runbook dice netstat -tlpn y la caja tiene net-tools instalado, sigue funcionando bien. En otro caso, por defecto ss y actualiza el runbook — la tabla de traducción de arriba es la que merece estar pegada en tu monitor. Y cuando el puerto que encuentras pertenece a un servicio que no arranca, esa es una historia de systemd, no de sockets.
ss -ltnp de ejemplo de arriba es una captura real de una caja de desarrollo (un proceso node en :8080), re-tecleada, no inventada.fin del runbook traducido · nada descargado · todo local