Linux中确认端口占用或监听状态有五种方法:一、netstat命令查看监听端口及进程;二、ss命令高效替代netstat;三、lsof精准定位端口所属进程;四、systemctl检查systemd服务端口配置;五、curl/telnet验证端口连通性。

如果您在Linux系统中需要确认某个端口是否被占用或查看当前有哪些端口正在监听,则可能是由于服务启动失败、端口冲突或安全审计需求。以下是多种直接有效的排查方法:
一、使用netstat命令查看端口监听状态
netstat是一个传统网络统计工具,可显示所有活动的TCP/UDP连接及监听端口,需配合权限参数获取完整信息。
1、执行命令查看所有监听中的TCP和UDP端口:
sudo netstat -tuln
2、过滤特定端口号(例如80端口):
sudo netstat -tuln | grep ':80'
3、显示对应进程名称和PID(需root权限):
sudo netstat -tulpn | grep ':80'
二、使用ss命令替代netstat查看端口占用
ss是现代Linux发行版推荐的netstat替代工具,性能更高且输出更简洁,功能覆盖全面。
1、列出所有监听的TCP端口:
sudo ss -tln
2、同时显示UDP监听端口:
sudo ss -tuln
3、查找占用特定端口的进程:
sudo ss -tulnp | grep ':3306'
三、使用lsof命令定位端口所属进程
lsof可用于列出打开文件(含网络套接字),适合精准定位哪个进程占用了指定端口。
1、查看所有监听端口及其进程信息:
sudo lsof -i -P -n -s TCP:LISTEN
2、精确匹配某端口(如22端口):
sudo lsof -i :22
3、仅显示PID和进程名(便于终止进程):
sudo lsof -t -i :8080
四、使用systemctl检查由systemd管理的服务端口
对于通过systemd启动的服务,其端口绑定行为通常由服务单元文件定义,可通过服务状态反查监听端口。
1、查询某服务(如nginx)是否运行:
sudo systemctl is-active nginx
2、查看该服务的监听配置(检查ExecStart中是否含bind地址):
sudo systemctl cat nginx.service | grep Listen
3、结合journal日志确认启动时绑定的端口:
sudo journalctl -u nginx.service | grep 'listening on'
五、使用curl或telnet验证端口连通性
当怀疑端口“看似空闲”但实际无法访问时,可通过外部探测确认端口是否真正响应请求。
1、本地测试本机端口是否可连接(如测试本地8080端口):
curl -I http://127.0.0.1:8080
2、使用telnet检查TCP连接是否建立成功:
telnet 127.0.0.1 8080
3、若返回Connected to 127.0.0.1则说明端口开放并接受连接;若提示Connection refused则表示无进程监听该端口。










