ss - formato di output dell'utilità delle statistiche del socket linux


21

Quando si utilizza sscon l' -popzione, la user/pid/fdcolonna salta sotto la riga particolare. Ad esempio questo è quello che sto effettivamente vedendo:

# 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))

Formattazione di output preferita :

# 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))

Per confermare che non ci sono interruzioni di linea, ho provato questo:

# 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))$

E in effetti puoi vedere che non ce n'erano, ma ora, stranamente, il formato di output è il modo in cui volevo che fosse. Qualcuno potrebbe spiegare cosa sta succedendo qui? Come posso ottenere la mia formattazione preferita?

Questa è l'unica cosa che mi impedisce di migrare da netstata ss.

Risposte:


10

Per quanto riguarda il perché ecc.

ss, parte della raccolta di utility iproute2 nel kernel Linux, utilizza una richiesta ioctl () per ottenere la larghezza corrente del terminale.

Tuttavia; l'intera larghezza viene utilizzata per gli altri campi e il campo del processo viene compresso sulla riga successiva.

È possibile visualizzare questo ad esempio (quando si ha un limite con il terminale):

script ss.txt
ss -nlup4
exit

Quindi allargare la finestra del terminale e cat ss.txt.

Il motivo per cui

ss -nulp4 | cat -A

«Funziona» è perché l'utilità riconosce se scrive su un tty o meno :

if (isatty(STDOUT_FILENO)) {

}

Come puoi vedere dalla riga precedente nella larghezza predefinita del codice sorgente è impostata su 80. Quindi se il tuo terminale è a dire 130 colonne e lo fai:

ss -nulp4 | cat

riconosce che l'output non è in un tty (ma in una pipe) e gli altri campi sono stipati in 80 colonne, mentre il campo del processo viene scritto dopo queste 80 colonne. Ma poiché il tuo terminale è più largo di 80 colonne e ha spazio per l'ingresso del processo, viene visualizzato in una riga.

Lo stesso vale per esempio:

ss -nulp4 > ss.txt

Per quanto riguarda come «ottenere la mia formattazione preferita», un modo probabilmente inadatto è fare qualcosa nella direzione di (a seconda del terminale):

stty cols 100
ss -nlup4

Spiegazione meravigliosa e bel trucco con quell'ambientazione sts cols. Grazie molto!
mons.

Bella spiegazione, ma l'uso column -tsembra essere il modo più semplice.
pevik,

18

Di seguito uno potrebbe essere utile per modificare l'output:

ss -ltunp | column -t 

1
Questo dovrebbe essere un commento sulla risposta. Hai abbastanza reputazione per aggiungere commenti, ti preghiamo di usarlo.
grochmal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.