linux - resultados - sintaxis de netstat
¿Cómo analizar el comando netstat para obtener el nombre del proceso y el PID? (7)
Estoy tratando de determinar qué aplicación está usando cierto puerto y obtener netstat -tlnp | grep <port> for Linux
netstat -tlnp | grep <port> for Linux
.
Este comando devuelve la siguiente salida:
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:<port> 0.0.0.0:* LISTEN 3591/java
Necesito obtener en el resultado solo el nombre del proceso y el PID, es decir, java 3591.
¿Cuál es la mejor manera de hacerlo?
Gracias.
(Detractando ligeramente de su pregunta original), para averiguar qué proceso escucha un determinado número de puerto, generalmente uso el comando lsof
. Por ejemplo:
lsof -i tcp:80
Para mostrar solo el nombre del proceso y el PID, analice la salida utilizando:
lsof | tail -n +2 | awk ''{print $1 " " $2}''
El comando tail
omite el encabezado de salida, mientras que awk
imprime las columnas requeridas.
Por que lsof
Tratar de grep
la salida de netstat
puede ser complicado ya que tendrás que asegurarte de que coincida con la columna correcta. Una solución robusta puede ser bastante larga y difícil (para mí de todos modos) producir bajo demanda.
lsof
ahorra la molestia de hacer coincidir los puertos correctos y también tiene muchos otros usos, por ejemplo, lo inverso de lo que estamos haciendo ahora (descubra qué puertos está utilizando un proceso), o determinar qué proceso está usando un archivo / punto de montaje (o el inverso). Vea la página de manual de lsof para más ejemplos.
Prueba netstat -p
-p, --programa Muestra el PID y el nombre del programa al que pertenece cada socket.
También puedes deshacerte de ese mensaje "tienes que ser root" redirigiendo stderr a / dev / null
netstat -tlnp 2>/dev/null | grep ...
Tratar
ps -p $(lsof -ti tcp:80) o comm=,pid=
o
netstat -tlnp | awk ''/:80 */ {split($NF,a,"/"); print a[2],a[1]}''
awk + sed:
awk ''{print $7}'' | sed "s//// /g"
... | awk ''{print $7;}''| sed ''s//// /g''
netstat -tlnp 2>/dev/null | awk ''//.[0-9]:X/ {print $7}'' | sed ''s/////s/g''
donde X en el bit awk es el puerto que estás mirando.