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

21

Ao usar sscom a -popção, a user/pid/fdcoluna 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 o seguinte:

# 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, 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 obter minha formatação preferida?

Essa é a única coisa que me impede de migrar de netstatpara ss.

NarūnasK
fonte

Respostas:

10

Quanto ao porquê etc.

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

Contudo; toda a largura é usada para os campos «other» e o campo do processo é espremido na próxima linha.

Você pode ver isso por exemplo (ao ter um limitado no terminal):

script ss.txt
ss -nlup4
exit

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

A razão pela qual

ss -nulp4 | cat -A

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

if (isatty(STDOUT_FILENO)) {

}

Como você pode ver na linha anterior, a largura padrão do código-fonte é definida como 80. Portanto, se o seu terminal estiver em 130 colunas, faça:

ss -nulp4 | cat

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

O mesmo vale, 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
Runium
fonte
Explicação maravilhosa e truque agradável com essa configuração stty cols. Muito Obrigado!
monsune
Boa explicação, mas o uso column -tparece ser a maneira mais simples.
pevik 6/01/17
18

A seguir, pode ser útil alterar a saída:

ss -ltunp | column -t 
tamerlaha
fonte
1
Este deve ser um comentário sobre a resposta. Você tem reputação suficiente para adicionar comentários, use-o.
grochmal