Linux 查看端口占用的 6 种方法:ss、netstat、lsof 实战

Linux 查看端口占用的 6 种方法:ss、netstat、lsof 实战

Linux 服务器上排查端口问题,最常见的需求就是:这个端口被谁占用了?对应哪个进程?

下面整理 6 种常用方法。实际工作里,ss、lsof 和 fuser 基本已经够用了。

1. 使用 ss 查看端口

推荐优先使用:

复制代码
ss -lntp

参数含义:

diff 复制代码
-l 只看监听端口
-n 不解析服务名称
-t 查看 TCP
-p 显示进程信息

查指定端口,例如 8080:

perl 复制代码
ss -lntp | grep 8080

可能看到:

bash 复制代码
LISTEN 0 511 0.0.0.0:8080 0.0.0.0:* users:(("node",pid=2356,fd=20))

这里可以直接看出进程是 node,PID 是 2356。

2. 使用 netstat

老系统上经常使用:

复制代码
netstat -lntp

查 8080:

perl 复制代码
netstat -lntp | grep 8080

如果提示:

bash 复制代码
netstat: command not found

说明系统没有安装 net-tools。

Debian、Ubuntu 可以安装:

复制代码
apt install net-tools

现在的新系统更推荐使用 ss,因为它速度更快,而且通常默认就有。

3. 使用 lsof

lsof 可以直接根据端口找进程:

css 复制代码
lsof -i :8080

输出可能是:

sql 复制代码
COMMAND  PID USER FD TYPE DEVICE NODE NAME
node    2356 root 20u IPv4  12345 TCP *:8080 (LISTEN)

相比 ss,这种输出更直观。

如果想看所有网络连接:

css 复制代码
lsof -i

4. 使用 fuser

fuser 很适合快速查看某个端口对应的 PID:

bash 复制代码
fuser 8080/tcp

可能返回:

yaml 复制代码
8080/tcp: 2356

想看详细信息:

bash 复制代码
fuser -v 8080/tcp

它还有一个比较直接的用法:

bash 复制代码
fuser -k 8080/tcp

这会直接结束占用 8080 端口的进程。

生产环境不要随便执行,最好先确认进程身份。

5. 使用 ps 配合 PID

如果已经知道 PID,比如:

yaml 复制代码
2356

可以进一步查看这个进程:

yaml 复制代码
ps -fp 2356

或者:

perl 复制代码
ps aux | grep 2356

这样可以确认它到底是 Node.js、Java、Nginx,还是其他程序。

还可以查看完整启动命令:

bash 复制代码
cat /proc/2356/cmdline

这一步在服务器上很有用,因为同一种程序可能同时运行多个实例。

6. 查看 /proc 网络信息

如果系统环境非常精简,也可以直接从 /proc 查看:

bash 复制代码
cat /proc/net/tcp

不过这里面的端口是十六进制格式,可读性比较差。

比如 8080 转换成十六进制是:

复制代码
1F90

所以这种方式更适合底层排查,日常使用没必要优先考虑。

平时用哪个命令最方便?

日常排查我一般直接用:

perl 复制代码
ss -lntp | grep 8080

如果想快速看清进程信息:

css 复制代码
lsof -i :8080

知道 PID 后继续确认:

复制代码
ps -fp PID

如果确定进程可以结束,再执行:

bash 复制代码
kill PID

不要一上来就:

bash 复制代码
kill -9 PID

因为端口后面可能跑的是正式服务。

总体来说,ss 适合快速查询,lsof 适合看进程,fuser 适合直接处理端口。掌握这三个命令,绝大多数 Linux 端口占用问题都能很快定位。

相关推荐
沫璃染墨16 分钟前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
工作10年+,存储芯片行业22 分钟前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
wuminyu35 分钟前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
她说彩礼65万1 小时前
C语言 堆区和栈区
java·linux·c语言
一号弯1 小时前
装完LINUX,请先新建日常用户
linux·运维·服务器
驭渊的小故事2 小时前
linux 基础命令 + git 仓库创建和配置命令
linux·git
ShineWinsu2 小时前
对于Redis:主从复制的解析
linux·数据库·c++·redis·缓存·面试·主从复制
Lsetea2 小时前
OpenSSL verify报unable to get issuer certificate:error 2与partial_chain排查
linux·https·ssl证书·openssl·证书链
许彰午2 小时前
03-Linux环境准备依赖包内核参数与用户组
linux·运维·服务器·数据库
阳光九叶草LXGZXJ2 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习