ss 退出代码始终为 0

ss 退出代码始终为 0

我正在尝试在脚本中进行检查以验证是否有进程正在侦听端口。

我尝试使用,ss但它似乎总是生成 0 作为退出代码,即使表达式也不匹配。

在此主机上,我有一个服务正在侦听端口 53 ,它匹配并具有退出代码 0

$ ss -ntl   sport = :53 ; echo $? 
State       Recv-Q Send-Q                                                            Local Address:Port                                                                           Peer Address:Port              
LISTEN      0      5                                                                     127.0.1.1:53                                                                                        *:*                  
LISTEN      0      5                                                                     127.0.0.1:53                                                                                        *:*                  
LISTEN      0      5                                                                           ::1:53                                                                                       :::*                  
0

如果我将端口更改为 54(没有任何监听),则退出代码始终保持为 0

$ss -ntl   sport = :54 ; echo $? 
State       Recv-Q Send-Q                                                            Local Address:Port                                                                           Peer Address:Port              
0

我查了手册,没有关于退出代码的内容。

我做错了什么还是这种行为正确?

在 ubuntu 16.04 和 centos 7 上测试

答案1

此行为是正常的,ss不会更改其退出代码来指示过滤器是否匹配任何内容。

如果你想测试ss结果,你需要用其他工具对它们进行后处理,例如 grep(它会根据是否匹配更改其退出代码):

ss -ntl sport = :53 | grep -q :53; echo $?

相关内容