lsof -i :端口号是查占用进程的最快方法,直接输出端口、协议、pid、用户和命令;需加-i参数且注意tcp/udp区别,sudo权限决定能否查看其他用户进程。

用 lsof -i :端口号 查进程最直接
想立刻知道哪个程序占着 8080 或 3306,lsof 是最快路径。它能直接把端口、协议、PID、用户、命令全列出来,不用先找 PID 再查进程。
常见错误是漏掉 -i 参数或写错格式:lsof :8080 会没输出,必须写成 lsof -i :8080;如果端口被 UDP 占用,-iTCP 就查不到,得去掉协议限定或加 -iUDP。
-
sudo lsof -i :22—— 查 SSH 端口(需sudo才能看到其他用户的进程) -
lsof -iTCP:3306 -sTCP:LISTEN—— 只看 MySQL 的监听状态,过滤掉 ESTABLISHED 连接 - 输出中
COMMAND列是程序名,PID是进程号,USER告诉你谁启动的——别直接killroot 用户的服务
netstat -tulnp 兼容老系统但权限要求高
netstat 在 CentOS 6、Debian 9 以前的系统里更常见,但默认不带 -p(显示 PID/程序名)选项,必须用 sudo 启动才能看到完整信息,否则只显示 -。
参数含义要记牢:-t(TCP)、-u(UDP)、-l(只显示监听态)、-n(不解析域名和端口名,快且准)、-p(需要权限)。少一个就可能漏掉关键字段。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
sudo netstat -tulnp | grep ':80'—— 快速过滤 Web 端口 - 注意
netstat在较新发行版(如 Ubuntu 22.04+、CentOS 8+)中已被废弃,ss是替代方案 - 如果提示
command not found,可能是net-tools包没装:sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(RHEL/CentOS 7)
ss -tulnp 是现代 Linux 的推荐命令
ss(socket statistics)比 netstat 更快、更轻量,输出结构也更清晰,是 iproute2 套件的一部分,几乎所有新系统都预装。
它和 netstat 参数高度兼容,但行为更严格:比如 ss -tuln 默认不显示 PID,必须加 -p 并用 sudo,否则报 Permission denied 错误,这点容易忽略。
-
sudo ss -tulnp | grep ':443'—— 查 HTTPS 监听进程 -
ss -tuln state listening—— 不加-p也能列出所有监听端口,适合快速扫一遍 - 输出中
Process字段格式是nginx,12345,5,表示命令名、PID、文件描述符号,比lsof多一层解析成本
遇到 Address already in use 怎么快速杀进程
启动服务时报这个错,说明端口被占,但未必是你要找的“正主”——可能是僵尸进程、测试残留或容器内进程泄漏。
别急着 kill -9,先确认是否真该杀:看 USER 和 COMMAND 是否合理,比如 root 下的 docker-proxy 就别乱动;另外注意 Docker 容器映射的端口在宿主机上也会显示为 dockerd 或 containerd 进程。
- 安全做法:
sudo lsof -ti:端口号 | xargs kill—— 先发 SIGTERM,等几秒再判断 - 强制清理:
sudo lsof -ti:端口号 | xargs kill -9,但对数据库类服务慎用 - 如果是 systemd 服务占的端口,优先用
sudo systemctl stop 服务名,避免破坏服务管理状态
lsof 和 ss 配合用最稳:先用 ss -tuln 快速过一遍监听端口范围,再针对具体端口用 lsof -i :端口号 定位到进程细节。权限问题和协议类型(TCP/UDP)是最常卡住的地方。










