ss - formato de saída do utilitário de estatísticas de soquete linux

16

Ao usar a opção ss with -p , a coluna user/pid/fd salta abaixo da linha específica. Por exemplo, é isso que estou vendo:

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

Formatação de saída preferida :

# 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 não há quebras de linha, tentei isso:

# 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, de fato, você pode ver que não havia nenhum, mas agora, estranhamente, o formato de saída é o que eu queria que fosse. Alguém poderia explicar o que está acontecendo aqui? Como posso conseguir minha formatação preferida?

Esta é a única coisa que me impede de migrar de netstat para ss .

    
por NarūnasK 01.01.2016 / 21:26

2 respostas

9

Quanto ao porquê, etc.

ss , parte da coleção de iproute2 no kernel do Linux, usa uma solicitação ioctl () para obter a largura atual do terminal.

No entanto; a largura inteira é usada para os campos «outros» e o campo do processo é espremido na próxima linha.

Você pode ver isso, por exemplo, (quando tiver um limite com terminal on):

script ss.txt
ss -nlup4
exit

Então amplia sua janela de terminal e cat ss.txt .

O motivo por que

ss -nulp4 | cat -A

«funciona» é porque o utilitário reconhece se escreve para um tty ou não :

if (isatty(STDOUT_FILENO)) {

}

Como você pode ver a partir da linha anterior no código-fonte, a largura padrão é definida como 80. Assim, se o seu terminal estiver em, digamos, 130 colunas, você faz:

ss -nulp4 | cat

ele reconhece que a saída não é para um tty (mas para um pipe) e os campos outros são amontoados em 80 colunas, enquanto o campo de processo é gravado após estes 80 colunas. Mas como o seu terminal é maior então 80 colunas e tem espaço para a entrada do processo, ele é exibido em uma linha.

O mesmo vale para por exemplo:

ss -nulp4 > ss.txt

Quanto a como «alcançar minha formatação preferida» uma maneira provavelmente inadequada é fazer algo na direção de (dependendo do terminal):

stty cols 100
ss -nlup4
    
por 01.01.2016 / 23:34
12

Seguir um pode ser útil para alterar a saída:

ss -ltunp | column -t 
    
por 11.08.2016 / 18:15