Linux查看端口占用命令:从定位到释放的完整操作

搜索这个命令的人,通常卡在哪一步

Linux 查看端口占用,最直接的命令是 ss -tulnp,它能列出当前正在监听的 TCP/UDP 端口以及对应进程;
如果系统较老或习惯旧工具,可以用 netstat -tulnp;
只想查某个端口被哪个进程占用,用 lsof -i:端口号 或 fuser 端口号/tcp 更快。

下面按“先确认环境、再选命令、最后定位和释放”的顺序展开,每一步都给出可复制的命令和预期结果。

先确认你当前的环境和权限

执行查看端口命令时,能否看到进程名和 PID,取决于权限。
普通用户执行 ss -tulnp 可能只看到端口,看不到进程信息;
使用 sudo 或切换到 root 后才会显示 PID/Program name。

先确认系统里有哪些工具可用:

which ss
which netstat
which lsof
which fuser

如果 netstat 提示 command not found,说明 net-tools 没有安装。
Debian/Ubuntu 可以执行 sudo apt install net-tools,CentOS/RHEL 可以执行 sudo yum install net-tools。ss 一般由 iproute2 提供,现代发行版基本自带。

用 ss 查看端口占用的标准做法

ss 是现在推荐优先使用的工具,速度比 netstat 快,输出也更清晰。

查看所有监听端口:

sudo ss -tulnp

参数含义:

  • -t 只看 TCP
  • -u 只看 UDP
  • -l 只看监听状态
  • -n 不解析服务名,直接显示端口号
  • -p 显示占用端口的进程

输出里重点看三列:Local Address:Port 是监听地址和端口,Process 是进程名、PID 和用户。
例如看到 users:(("nginx",pid=1234,fd=6)),说明 nginx 的 PID 是 1234。

只想查 80 端口:

sudo ss -tulnp | grep ':80 '

注意端口后面加一个空格,能减少把 8080 误匹配成 80 的情况。

lsof 和 netstat 怎么选

lsof -i:端口号 适合“我已经知道端口,只想揪出进程”的场景:

sudo lsof -i:3306

输出会给出 COMMAND、PID、USER、NAME,其中 NAME 部分能看到 TCP *:3306 (LISTEN) 这类信息。
如果没有任何输出,通常说明该端口当前没有被占用。

netstat 的用法和 ss 接近:

sudo netstat -tulnp | grep ':443 '

它的优点是老系统兼容好,缺点是连接数多时执行较慢。
新系统上不必刻意依赖它,但排查旧服务器时仍然常见。

fuser 适合快速确认并配合释放:

sudo fuser -v 8080/tcp

-v 会显示详细进程信息。
如果只想拿到 PID,可以不加 -v。

定位到进程后,怎么安全释放端口

拿到 PID 后,先确认它是什么服务,不要直接 kill。

ps -fp 1234

如果确认是残留进程或异常进程,可以按顺序处理:

  1. 优先用服务管理方式停止,例如 sudo systemctl stop nginx
  2. 如果服务管理不可用,再发送正常终止信号:sudo kill 1234
  3. 等待几秒后复查:sudo ss -tulnp | grep ':80 '
  4. 进程无响应时再考虑 sudo kill -9 1234,但强杀可能导致数据未落盘

如果端口被 Docker 容器占用,ss 可能只显示 docker-proxy 或容器相关进程。
此时应通过 docker ps 找到容器,再用 docker stop 容器名 停止,而不是直接杀宿主机进程。

几个容易踩的坑

端口没被占用,
但服务还是起不来
:
不一定是端口问题,
可能是权限不足(1024 以下端口需要 root 或 capability)、
SELinux 限制、
防火墙规则,
或配置文件里绑定的是 127.0.0.1 而不是 0.0.0.0。

看到 TIME_WAIT 就以为端口被占用:TIME_WAIT 是正常的 TCP 状态,不代表进程还在监听。
用 -l 参数只看 LISTEN 状态更准确。

grep 匹配不准:grep 80 会同时匹配 80、8080、8000。
查具体端口时用 grep ':80 ' 或 grep -w 80 更稳妥。

没有输出就以为命令没生效:lsof 和 ss 在端口空闲时本来就没有结果,这属于正常现象。

操作完成后的验证方式

释放或启动服务后,用同一条命令复查,确认结果符合预期:

sudo ss -tulnp | grep ':端口号 '

如果目的是启动新服务,复查时应该看到新进程占用该端口;
如果目的是释放端口,复查时应该没有输出。
再配合 curl -I http://127.0.0.1:端口号 或 systemctl status 服务名 确认服务本身可访问,比只看端口状态更可靠。

常见疑问

为什么 ss 看不到进程名?

通常是权限不够。
加上 sudo 再执行;
如果仍然不显示,检查内核是否限制了非特权用户查看 socket 信息。

一个端口能被两个进程同时监听吗?

默认情况下同一个 IP 和端口只能被一个进程监听。
但绑定不同 IP、使用 SO_REUSEPORT,或 IPv4/IPv6 分别监听时,可能出现多个条目,需要结合 Local Address 具体判断。

查端口占用会影响正在运行的服务吗?

ss、lsof、netstat 都是只读查询,不会影响服务。
真正有影响的是后续的 kill 操作,所以释放端口前先确认进程用途。

Windows 或 macOS 上能用这些命令吗?

不能直接通用。
Windows 用 netstat -ano 配合 tasklist,macOS 可以用 lsof -i:端口号。
本文命令针对 Linux 环境。

分享到:
上一篇
Linux服务器性能调优:从负载排查到内核参数调整的实操流程
下一篇
Linux内存泄漏定位:从现象到进程的排查步骤
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意