ss是首选工具,速度快、预装、输出简洁;加sudo可查进程名和pid;lsof信息最全但需root;netstat已逐步弃用,仅用于旧系统。

ss 是最可靠的选择,普通用户能快速查出端口是否被监听,加 sudo 还能直接看到进程名和 PID;lsof 信息最全但默认需 root 权限;netstat 已逐步弃用,仅在旧系统或容器里必要时才用。
用 ss 查端口监听状态(推荐首选)ss 启动快、输出干净、多数发行版预装,适合日常快速判断。它不依赖 DNS 解析,也不需要额外安装包。
- 检查端口是否被监听(不关心是谁占的):
ss -tuln | grep :8080
有输出即表示监听中,例如 LISTEN 0 128 <em>:8080 </em>:*
- 查进程名和 PID(需 root 权限):
sudo ss -tulnp | grep :8080
输出类似 users:(( "node", pid=1234, fd=20 )),其中 pid=1234 就是目标进程 ID
- 注意 IPv6 干扰:如果只关心 IPv4,加
grep -v "[::]" 过滤掉 IPv6 行,避免误判
用 lsof 精准定位占用进程(信息最细)lsof -i 把端口当“网络文件”处理,能直接关联到用户、命令、FD 号,适合排查多实例、权限异常或绑定地址模糊的情况。
- 查指定端口的全部监听者:
sudo lsof -i :3306
输出中 COMMAND 和 PID 字段一目了然,NAME 列还能看出是 *:3306 还是 127.0.0.1:3306
- 只看 TCP LISTEN 状态(排除 ESTABLISHED 连接干扰):
sudo lsof -iTCP -sTCP:LISTEN -P -n
- 常见坑:没加
sudo 时,非 root 进程可能不显示,尤其像 mysqld 或 nginx 这类服务
用 netstat 兼容老旧环境(慎用)netstat 在 Ubuntu 22.04+、CentOS 8+ 默认不预装,且执行慢、解析开销大。仅当 ss 和 lsof 都不可用时才考虑。
- 安装(Ubuntu/Debian):
sudo apt install net-tools
- 基本用法与
ss 高度相似:sudo netstat -tulnp | grep :22
- 参数含义完全对应:
-t(TCP)、-u(UDP)、-l(LISTEN)、-n(数字端口)、-p(进程)
- 注意:部分精简镜像(如 Alpine)连
netstat 都没有,得换容器或改用 ss
快速终止占用进程(谨慎操作)
查到 PID 后别急着 kill -9,先确认是不是关键服务。
- 安全终止(发 SIGTERM):
kill 1234
- 强制终止(仅当僵死):
kill -9 1234
- 一键杀端口所有占用者(
fuser):sudo fuser -k 8080/tcp
这个命令会杀掉所有使用 8080/tcp 的进程,适合开发环境快速清理,但生产环境慎用
ss -tuln | grep :8080有输出即表示监听中,例如
LISTEN 0 128 <em>:8080 </em>:* sudo ss -tulnp | grep :8080输出类似
users:(( "node", pid=1234, fd=20 )),其中 pid=1234 就是目标进程 ID grep -v "[::]" 过滤掉 IPv6 行,避免误判 lsof -i 把端口当“网络文件”处理,能直接关联到用户、命令、FD 号,适合排查多实例、权限异常或绑定地址模糊的情况。
- 查指定端口的全部监听者:
sudo lsof -i :3306
输出中COMMAND和PID字段一目了然,NAME列还能看出是*:3306还是127.0.0.1:3306 - 只看 TCP LISTEN 状态(排除 ESTABLISHED 连接干扰):
sudo lsof -iTCP -sTCP:LISTEN -P -n - 常见坑:没加
sudo时,非 root 进程可能不显示,尤其像mysqld或nginx这类服务
用 netstat 兼容老旧环境(慎用)netstat 在 Ubuntu 22.04+、CentOS 8+ 默认不预装,且执行慢、解析开销大。仅当 ss 和 lsof 都不可用时才考虑。
- 安装(Ubuntu/Debian):
sudo apt install net-tools
- 基本用法与
ss 高度相似:sudo netstat -tulnp | grep :22
- 参数含义完全对应:
-t(TCP)、-u(UDP)、-l(LISTEN)、-n(数字端口)、-p(进程)
- 注意:部分精简镜像(如 Alpine)连
netstat 都没有,得换容器或改用 ss
快速终止占用进程(谨慎操作)
查到 PID 后别急着 kill -9,先确认是不是关键服务。
- 安全终止(发 SIGTERM):
kill 1234
- 强制终止(仅当僵死):
kill -9 1234
- 一键杀端口所有占用者(
fuser):sudo fuser -k 8080/tcp
这个命令会杀掉所有使用 8080/tcp 的进程,适合开发环境快速清理,但生产环境慎用
sudo apt install net-tools ss 高度相似:sudo netstat -tulnp | grep :22 -t(TCP)、-u(UDP)、-l(LISTEN)、-n(数字端口)、-p(进程) netstat 都没有,得换容器或改用 ss kill -9,先确认是不是关键服务。
- 安全终止(发 SIGTERM):
kill 1234 - 强制终止(仅当僵死):
kill -9 1234 - 一键杀端口所有占用者(
fuser):sudo fuser -k 8080/tcp
这个命令会杀掉所有使用8080/tcp的进程,适合开发环境快速清理,但生产环境慎用
真正容易被忽略的是绑定地址细节:一个进程监听 127.0.0.1:8080 和另一个监听 0.0.0.0:8080 不冲突,但都监听 0.0.0.0:8080 就会报 Address already in use;查的时候务必注意 Local Address 或 NAME 列的具体值。











