ss-Linux套接字统计实用程序输出格式


21

使用sswith -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

Answers:


10

至于为什么等等

ss是Linux内核中iproute2实用程序集合的一部分,它使用ioctl()请求获取终端的当前宽度。

然而; 整个宽度用于«other»字段,过程字段被压缩到下一行。

您可以通过以下方式查看此信息(例如,在on终端上有限制时):

script ss.txt
ss -nlup4
exit

然后扩大您的终端窗口和cat ss.txt

原因为何

ss -nulp4 | cat -A

«works»是因为实用程序可以识别是否写入tty

if (isatty(STDOUT_FILENO)) {

}

从源代码的前一行可以看到,默认宽度设置为80。因此,如果您的终端位于130列,则可以执行以下操作:

ss -nulp4 | cat

它识别出输出不是到tty(而是到管道),并且其他字段填充为80列,而处理字段则写在这80列之后。但是随着您的终端更宽,则有80列,并且有空间存储过程条目,因此它将显示在一行中。

例如:

ss -nulp4 > ss.txt

至于如何“实现我的首选格式”,一种可能不合适的方法是朝(取决于终端)方向做一些事情:

stty cols 100
ss -nlup4

那种stty cols设置的精彩解释和妙招。非常感谢!
星期一

很好的解释,但使用column -t似乎是最简单的方法。
pevik'1

18

以下一项可能会有助于更改输出:

ss -ltunp | column -t 

1
这应该是对答案的评论。您确实有足够的声誉来添加评论,请使用它。
grochmal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.