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

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

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

答案1

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

ss -ltunp | column -t 

答案2

至于为什么等等。

ss, 的一部分ip路由2实用程序集合在Linux内核中,使用读写控制()要求获取终端的当前宽度。

然而;整个宽度用于“其他”字段和过程字段被挤到下一行。

例如,您可以通过以下方式查看此内容(当终端上有限制时):

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

答案3

要按顺序获取输出格式,您可以尝试此

sudo ss -tulnp | sort -k7 | awk "{print substr(\$7,1,70),\$1,\$5}" | column -t

这将按程序名称和表格格式对输出进行排序。

相关内容