判断端口是否监听应检查listen状态,推荐用ss -tuln精准过滤;netstat适合人工排查需sudo查进程;lsof可定位端口归属;telnet/curl用于验证服务可达性。

直接看端口有没有 LISTEN 状态就行,关键不是“有没有输出”,而是“有没有 LISTEN 行为”。最稳妥的方式是用 ss 或 netstat 查监听套接字,配合精准过滤,避免误判(比如把 :8080 当成 :80)。
用 ss 命令高效确认监听状态
ss 是现代 Linux 默认预装的推荐工具,比 netstat 更快、更可靠。常用组合:
-
ss -tuln:列出所有 TCP/UDP 监听端口(-t TCP,-u UDP,-l 仅监听,-n 数字端口) - 查 80 端口是否监听(IPv4):
ss -tuln | awk '$4 ~ /:80$/ {print}'—— 结尾冒号加端口号,排除:8080等干扰 - 同时兼容 IPv4 和 IPv6:
ss -tuln | awk '$4 ~ /(:80|\[::]:80)$/ {print}' - 脚本中判断(成功匹配退出码为 0):
ss -tuln | awk '$1 ~ /^(tcp|udp)$/ && $4 ~ /:80$/ {exit 0} END{exit 1}'
用 netstat 查看并定位进程
netstat 虽较老,但输出直观,适合快速人工排查(部分新系统需 sudo apt install net-tools):
-
sudo netstat -tuln:查看所有监听端口(不含进程) -
sudo netstat -tulpn | grep ':22':查 22 端口,并显示进程名和 PID - 注意:-p 参数必须加 sudo,否则看不到其他用户的进程信息
用 lsof 精准反查端口归属
当需要明确知道“哪个进程在用这个端口”,lsof 最直接(需安装:sudo apt install lsof 或 sudo yum install lsof):
-
sudo lsof -i :80:列出所有使用 80 端口的进程(含 TCP/UDP、LISTEN 或已连接状态) - 只看监听中的 TCP 端口:
sudo lsof -iTCP -sTCP:LISTEN -P -n - 只输出 PID 和命令名(方便 kill):
sudo lsof -t -i :3306
辅助验证:用 telnet 或 curl 测试可访问性
查到“监听”不等于“能连上”,还需确认服务是否真正响应:
- 本地测试是否通(TCP 层):
telnet 127.0.0.1 8080—— 成功建立连接说明端口开放且服务存活 - HTTP 服务可用性检查:
curl -I http://localhost:3000—— 返回 HTTP 头即表示服务正常响应 - 注意:防火墙(如 ufw/iptables)、服务绑定地址(如只绑 127.0.0.1)会影响外部访问,但不影响
ss的监听判断











