ss是现代linux查看端口监听的首选工具,核心命令为sudo ss -tuln;查指定端口用grep过滤(如sudo ss -tuln | grep ':80');加-p可显示进程信息,-tlnp组合最常用且精准。

用 ss 查端口,核心就一条命令:sudo ss -tuln。它快、准、系统自带,不依赖额外安装,是现代 Linux 查监听端口的首选方式。
快速确认端口是否在监听
只需加 grep 过滤目标端口,比如查 80 端口:
sudo ss -tuln | grep ':80'- 输出类似
tcp LISTEN 0 128 *:80 *:*,说明正在监听;没输出,基本可判定未占用 - 注意冒号要写在端口号前(
:80),否则可能匹配到 PID 或其他数字
精准定位是谁在监听
带进程信息才能真正解决问题,必须加 -p 参数(需 sudo):
sudo ss -tulnp | grep ':3306'- 输出中会看到
users:(("mysqld",pid=1234,fd=27)),直接给出程序名和 PID - 若只关心 PID,可用
sudo ss -tulnp | grep ':3306' | awk '{print $7}' | cut -d',' -f2 | cut -d'=' -f2提取,但通常直接看更高效
避开干扰,聚焦关键信息
默认输出含 IPv6 和 UDP,有时反而影响判断:
- 只看 IPv4 TCP 监听(最常用场景):
sudo ss -tlnp - 排除 UDP 干扰,避免误读 DNS/Avahi 类服务:
sudo ss -tlnp | grep -v 'udp' - 想跳过 root 权限快速自查(仅限自己启动的服务):
ss -tuln(不加 sudo,但看不到别人或系统服务)
常见误判提醒
有些情况看似“没监听”,其实是工具局限或配置特殊:
- Docker 容器映射的端口(如宿主机 8080 → 容器 80),
ss在宿主机上查不到,因为监听实际发生在容器内部网络命名空间 - 看到
SYN-RECV状态不是监听,那是半连接队列里的握手请求,不能代表端口已开放服务 - 不加
-n时,若 DNS 或/etc/services异常,ss可能卡顿几秒才返回结果











