在 Linux 下查看 80 端口占用,最稳妥的方式是使用 ss 或 lsof 命令配合 sudo 权限,既能看到进程 ID 也能看到程序名称,适合快速排查服务启动冲突。
先说结论:优先使用 ss -tulnp | grep :80 或 sudo lsof -i :80 定位进程,确认无误后再终止占用。
- 先确认:用命令查看端口对应的 PID 和进程名,避免误杀系统服务。
- 先处理:根据业务需求停止服务或杀死进程,生产环境慎用强制杀。
- 再验证:重新执行查询命令确认端口已释放,再启动目标服务。
命令速用版
如果你赶时间,可以直接复制以下命令到终端执行:
# 方法 1:使用 ss 命令(推荐,速度快,现代 Linux 默认自带)
sudo ss -tulnp | grep :80
# 方法 2:使用 lsof 命令(信息详细,需安装)
sudo lsof -i :80
# 方法 3:使用 fuser 命令(直接看 PID,需安装)
sudo fuser -v 80/tcp
工具缺失怎么办
部分最小化安装的系统可能缺少 lsof 或 net-tools(含 netstat/fuser),可通过包管理器安装:
# Ubuntu/Debian 系列
sudo apt update
sudo apt install lsof net-tools
# CentOS/RHEL 系列
sudo yum install lsof net-tools
# 或
sudo dnf install lsof net-tools
分步处理
第一步:定位占用进程
执行 sudo ss -tulnp | grep :80。输出结果中最后一列通常显示 pid/程序名,例如 1234/nginx,这里的 1234 就是进程 ID。
第二步:判断进程性质
拿到 PID 后,不要急着杀。先执行 ps -p 1234 -o pid,ppid,cmd 看看这个进程到底是什么。如果是你自己运行的测试服务,可以直接停;如果是系统关键服务(如系统自带的 Apache),需要评估影响。
第三步:终止占用进程
确认可以终止后,优先尝试优雅停止(发送 SIGTERM 信号):
sudo kill -15 1234
如果服务是通过 systemd 管理的,建议使用服务管理命令:
sudo systemctl stop nginx
如果无效,再考虑强制终止(发送 SIGKILL 信号,可能导致数据丢失):
sudo kill -9 1234
也可以使用 fuser 一键释放(高危操作,会杀死所有监听该端口的进程):
sudo fuser -k 80/tcp
怎么验证是否生效
处理完后,再次运行查询命令:
sudo ss -tulnp | grep :80
如果没有输出内容,说明端口已释放。此时再尝试启动你的服务,观察是否报错。如果服务启动了,可以用 curl -I http://localhost 看看能否正常响应。
常见坑
1. 权限不足:不加 sudo 可能看不到其他用户的进程信息,导致查不到 PID。
2. 容器环境:如果是 Docker 容器占用,需要在宿主机查容器进程,或进入容器内部排查。
3. TIME_WAIT 状态:有时进程已杀但端口仍处于等待状态,稍等几十秒再试,不要频繁强制杀进程。
4. 命令缺失:部分最小化安装的系统可能没有 lsof 或 netstat,需用包管理器安装或改用 ss。
参考建议
遇到不确定的命令参数,可使用 man <命令> 查看官方手册,例如 man ss 或 man lsof。

2万+

被折叠的 条评论
为什么被折叠?



