ss - format de sortie de l'utilitaire de statistiques de socket linux

21

Lors de l' utilisation ssavec l' -poption, la user/pid/fdcolonne saute sous la ligne particulière. Par exemple, c'est ce que je vois réellement:

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

Formatage de sortie préféré :

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

Pour confirmer qu'il n'y a pas de sauts de ligne, j'ai essayé ceci:

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

Et en effet, vous pouvez voir qu'il n'y en avait pas, mais maintenant, assez étrangement, le format de sortie est comme je le voulais. Quelqu'un pourrait-il expliquer ce qui se passe ici? Comment puis-je obtenir ma mise en forme préférée?

C'est la seule chose qui m'empêche de migrer de netstatvers ss.

NarūnasK
la source

Réponses:

10

Quant à savoir pourquoi etc.

ss, qui fait partie de la collection d'utilitaires iproute2 dans le noyau Linux, utilise une requête ioctl () pour obtenir la largeur actuelle du terminal.

Pourtant; la largeur entière est utilisée pour les «autres» champs et le champ de processus est pressé sur la ligne suivante.

Vous pouvez le voir par exemple (lorsque vous avez une limite avec le terminal):

script ss.txt
ss -nlup4
exit

Ensuite, élargissez la fenêtre de votre terminal et cat ss.txt.

La raison pour laquelle

ss -nulp4 | cat -A

«Fonctionne» parce que l'utilitaire reconnaît s'il écrit ou non sur un tty :

if (isatty(STDOUT_FILENO)) {

}

Comme vous pouvez le voir sur la ligne précédente dans le code source, la largeur par défaut est fixée à 80. Ainsi, si votre terminal est à 130 colonnes par exemple et que vous le faites:

ss -nulp4 | cat

il reconnaît que la sortie n'est pas vers un tty (mais vers un tube) et les autres champs sont entassés dans 80 colonnes, tandis que le champ de processus est écrit après ces 80 colonnes. Mais comme votre terminal est plus large que 80 colonnes et a de la place pour l'entrée de processus, il est affiché sur une seule ligne.

Il en va de même par exemple:

ss -nulp4 > ss.txt

Quant à savoir comment «obtenir ma mise en forme préférée», un moyen probablement inapproprié est de faire quelque chose dans le sens (selon le terminal):

stty cols 100
ss -nlup4
Runium
la source
Magnifique explication et belle astuce avec ce réglage de cols stty. Merci beaucoup!
monsune
Belle explication, mais l'utilisation column -tsemble être la manière la plus simple.
pevik
18

Le suivant peut être utile pour modifier la sortie:

ss -ltunp | column -t 
tamerlaha
la source
1
Cela devrait être un commentaire sur la réponse. Vous avez suffisamment de réputation pour ajouter des commentaires, veuillez l'utiliser.
grochmal