ss - formato de salida de la utilidad de estadísticas de socket de Linux

21

Cuando se usa sscon la -popción, la user/pid/fdcolumna salta debajo de la línea particular. Por ejemplo, esto es lo que realmente estoy viendo:

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      
users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      
users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      
users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      
users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

Formato de salida preferido :

# ss -nulp4
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
UNCONN     0      0                                                            *:20000                                                       *:*      users:(("perl",pid=9316,fd=6))
UNCONN     0      0                                                            *:10000                                                       *:*      users:(("perl",pid=9277,fd=6))
UNCONN     0      0                                               192.168.100.10:53                                                          *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))
UNCONN     0      0                                                    127.0.0.1:53                                                          *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))

Para confirmar que no hay saltos de línea, he intentado esto:

# ss -nulp4 | cat -A
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port $
UNCONN     0      0                         *:20000                    *:*      users:(("perl",pid=9316,fd=6))$
UNCONN     0      0                         *:10000                    *:*      users:(("perl",pid=9277,fd=6))$
UNCONN     0      0            192.168.100.10:53                       *:*      users:(("named",pid=95,fd=517),("named",pid=95,fd=516))$
UNCONN     0      0                 127.0.0.1:53                       *:*      users:(("named",pid=95,fd=515),("named",pid=95,fd=514))$

Y, de hecho, puede ver que no había ninguno, pero ahora, curiosamente, el formato de salida es como he querido que sea. ¿Alguien podría explicar lo que está pasando aquí? ¿Cómo puedo lograr mi formato preferido?

Esto es lo único que me impide migrar de netstata ss.

NarūnasK
fuente

Respuestas:

10

En cuanto a por qué, etc.

ss, parte de la colección de utilidades iproute2 en el kernel de Linux, utiliza una solicitud ioctl () para obtener el ancho actual del terminal.

Sin embargo; todo el ancho se usa para los campos «otros» y el campo del proceso se comprime en la siguiente línea.

Puede ver esto por ejemplo (cuando tiene un límite en el terminal):

script ss.txt
ss -nlup4
exit

Luego amplíe su ventana de terminal y cat ss.txt.

La razón por la cual

ss -nulp4 | cat -A

«Funciona» es porque la utilidad reconoce si escribe en un tty o no :

if (isatty(STDOUT_FILENO)) {

}

Como puede ver en la línea anterior en el código fuente, el ancho predeterminado está establecido en 80. Por lo tanto, si su terminal tiene 130 columnas y usted hace:

ss -nulp4 | cat

reconoce que la salida no es a un tty (sino a una tubería) y los otros campos están agrupados en 80 columnas, mientras que el campo de proceso se escribe después de estas 80 columnas. Pero como su terminal es más ancho que 80 columnas y tiene espacio para la entrada del proceso, se muestra en una línea.

Lo mismo ocurre por ejemplo:

ss -nulp4 > ss.txt

En cuanto a cómo «lograr mi formato preferido», una forma probablemente inadecuada es hacer algo en la dirección de (dependiendo del terminal):

stty cols 100
ss -nlup4
Runium
fuente
Maravillosa explicación y buen truco con esa configuración stty cols. ¡Muchas gracias!
monsune el
Buena explicación, pero el uso column -tparece ser la forma más simple.
pevik
18

El siguiente puede ser útil para cambiar la salida:

ss -ltunp | column -t 
tamerlaha
fuente
1
Esto debería ser un comentario sobre la respuesta. Tienes suficiente reputación para agregar comentarios, úsalo.
grochmal