最快最准查端口占用的命令是lsof -i :端口号,可直接获取pid、进程名、用户及监听状态;备选ss性能好,netstat需手动安装且字段易截断,fuser仅输出pid适合脚本清理。

直接用 lsof -i :端口号 最快最准。它把端口当作“打开的文件”处理,一次命令就能拿到 PID、进程名、用户、监听状态等全部关键信息,不需要拼接管道或反复过滤。
推荐首选:lsof(信息全、语义清晰)
命令格式固定,不易出错:
-
查 TCP 端口(如 8080):
sudo lsof -i :8080 -
查 UDP 端口(如 53):
sudo lsof -iUDP:53(注意大小写和冒号位置) -
避免 DNS 和服务名解析(提速+防干扰):
sudo lsof -i :8080 -Pn
输出中 PID 列就是你要的进程 ID,COMMAND 是进程名,USER 是运行用户,NAME 显示监听地址和协议状态(如 *:8080 (LISTEN))。
高效备选:ss(性能好、新系统默认)
现代 Linux 发行版普遍预装 ss,速度快、资源占用低:
-
sudo ss -tulnp | grep ':8080\>'(\>锚定端口数字结尾,避免匹配到 80801 或 18080) - 输出中 users: 字段直接给出进程名和 PID,例如
users:(("java",pid=1234,fd=42))
兼容旧环境:netstat(需手动安装,注意字段截断)
在较老系统或容器调试时仍可见,但 Ubuntu 22.04+/Fedora 35+ 默认不带:
- 先安装:
sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(RHEL/CentOS) - 使用:
sudo netstat -tulnp | grep ':8080\>'(加\>防止列对齐导致误匹配) - 注意:PID/Program name 列可能截断进程名(如只显示
java而非完整路径),需结合ps进一步确认
快速获取 PID 列表(适合一键清理)
fuser 不展示进程名,只输出 PID,适合脚本化终止:
-
sudo fuser 8080/tcp→ 输出类似8080/tcp: 1234 - 直接杀掉:
sudo fuser -k 8080/tcp
注意:它不区分父子进程,也不提示是否为容器进程(如 docker-proxy),用前建议先用 lsof 或 ss 确认上下文。











