在 Linux 下怎么查看谁在使用 80 端口?

📅 2026/7/7 17:24:12 👁️ 阅读次数 📝 编程学习
在 Linux 下怎么查看谁在使用 80 端口?

在 Linux 下查看 80 端口占用,最稳妥的方式是使用sslsof命令配合 sudo 权限,既能看到进程 ID 也能看到程序名称,适合快速排查服务启动冲突。

先说结论:优先使用ss -tulnp | grep :80sudo 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

工具缺失怎么办

部分最小化安装的系统可能缺少lsofnet-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.命令缺失:部分最小化安装的系统可能没有lsofnetstat,需用包管理器安装或改用ss

参考建议

遇到不确定的命令参数,可使用man <命令>查看官方手册,例如man ssman lsof

来源 https://www.zjcp.cc/ask/10840.html