使用ss
with-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
这将按程序名称和表格格式对输出进行排序。