ss - формат виводу утиліти для статистики сокета Linux


21

При використанні ssз -pопцією, user/pid/fdстовпець переходить під конкретний рядок. Наприклад, це те, що я насправді бачу:

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

Переважне форматування виводу :

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

Щоб підтвердити відсутність розривів рядків, я спробував це:

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

І справді ви можете бачити, що їх не було, але зараз, як не дивно, формат виводу - такий, як я хотів би. Може хтось пояснить, що тут відбувається? Як я можу досягти бажаного форматування?

Це єдине, що заважає мені мігрувати з netstatна ss.

Відповіді:


10

Щодо того, чому і т.д.

ss, Частина iproute2 збору корисної в Linux ядрі, використовує IOCTL () запит , щоб отримати поточну ширину терміналу.

Однак; вся ширина використовується для «інших» полів, а технологічне поле видавлюється на наступний рядок.

Ви можете переглянути це, наприклад (якщо у вас обмежений термінал):

script ss.txt
ss -nlup4
exit

Потім розгорніть вікно вашого терміналу і cat ss.txt.

Причина, чому

ss -nulp4 | cat -A

«Працює» тому, що утиліта розпізнає, записує вона в tty чи ні :

if (isatty(STDOUT_FILENO)) {

}

Як видно з попереднього рядка, у вихідному коді ширина за замовчуванням встановлена ​​на 80. Таким чином, якщо ваш термінал знаходиться на рівні 130 стовпців, і ви зробите:

ss -nulp4 | cat

він розпізнає, що вихід не є tty (а трубі), а інші поля забиті в 80 стовпців, в той час як поле процесу записується після цих 80 стовпців. Але оскільки ваш термінал ширший на 80 стовпців і має місце для входу в процес, він відображається в одному рядку.

Те саме стосується, наприклад:

ss -nulp4 > ss.txt

Щодо того, як «досягти бажаного форматування», один, ймовірно, непридатний спосіб - це зробити щось у напрямку (залежно від терміналу):

stty cols 100
ss -nlup4

Чудове пояснення та приємний трюк із налаштуванням цього стильного колеса. Велике дякую!
monsune

Приємне пояснення, але використання column -tздається найпростішим способом.
pevik

18

Наступний варіант може бути корисним для зміни результатів:

ss -ltunp | column -t 

1
Це має бути коментарем до відповіді. У вас достатньо репутації, щоб додати коментарі, будь ласка, використовуйте їх.
grochmal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.