如何在Linux上查看端口被哪个进程占用了

本文介绍了在Linux系统中如何使用fuser和lsof命令来查找并管理占用特定端口的进程。通过fuser命令可以查看并可能杀死占用端口的进程,而lsof命令则能提供更详细的进程信息。这两个命令是Linux系统管理员日常工作中排查端口问题的重要工具。

在 Linux 里查看端口被哪个进程占用了有两种方法。

使用 fuser 命令

使用 fuser 命令可以直接在 Linux 上查看端口被哪个进程占用了

fuser 80/tcp

上面的命令查看 80 端口被哪个进程占用了。你可能会看到类似下面的结果:

在这里插入图片描述
如果想看到详情可以加上 -v 开关,运行结果里会包含进程的名字:
在这里插入图片描述

如果要杀掉进程可以使用 -k 开关

fuser -k 80/tcp

使用 lsof

输入下面的命令:

lsof -i:80

运行结果类似下面的截图:
在这里插入图片描述

结论

我们可以使用 fuser 命令或者 lsof 命令在 linux 上查看指定的端口被哪个进程占用了。

Linux 系统中,查看某个端口哪个进程占用是一个常见的系统管理任务。可以通过多种命令行工具来实现,下面详细介绍最常用的方法。 --- ### ✅ 方法一:使用 `netstat`(传统方式) ```bash sudo netstat -tulnp | grep :端口号 ``` #### 示例: ```bash sudo netstat -tulnp | grep :80 ``` #### 参数说明: - `-t`:显示 TCP 连接 - `-u`:显示 UDP 连接 - `-l`:仅显示监听状态的端口(LISTEN) - `-n`:以数字形式显示地址和端口(不解析主机名、服务名) - `-p`:显示占用端口进程 PID 和名称(需要 root 权限才能看到其他用户的进程) #### 输出示例: ``` tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx ``` > 表示 PID 为 `1234` 的 `nginx` 进程正在监听 80 端口。 > ⚠️ 注意:`netstat` 属于 `net-tools` 包,在现代发行版中可能未预装。建议使用 `ss` 替代。 --- ### ✅ 方法二:使用 `ss`(推荐,更高效) `ss` 是 `netstat` 的现代替代品,速度更快,功能更强。 ```bash sudo ss -tulnp | grep :端口号 ``` #### 示例: ```bash sudo ss -tulnp | grep :22 ``` #### 参数说明: - `-t`:TCP - `-u`:UDP - `-l`:监听中的端口 - `-n`:数字格式 - `-p`:显示进程信息 #### 输出示例: ``` tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=567,fd=3)) ``` ✅ 推荐优先使用 `ss`,它是当前主流 Linux 发行版的标准工具。 --- ### ✅ 方法三:使用 `lsof`(功能强大) ```bash sudo lsof -i :端口号 ``` #### 示例: ```bash sudo lsof -i :8080 ``` #### 输出示例: ``` COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 12345 user 20u IPv6 123456 0t0 TCP *:8080 (LISTEN) ``` > 表示 PID 为 `12345` 的 `node` 进程正在监听 8080 端口。 #### 优点: - 可以查 TCP/UDP、IPv4/IPv6 - 显示用户、协议、连接状态等详细信息 - 支持更多过滤条件(如用户、协议类型等) --- ### ✅ 方法四:通过 `/proc` 文件系统直接查找(底层方法) 如果你知道端口号(比如 `8080`),可以手动查找: ```bash # 先转换端口为十六进制(注意是小端序) printf "%04x\n" 8080 # 输出:1f90 # 搜索所有进程中打开的 socket grep -r "00000000:1F90" /proc/*/tcp /proc/*/tcp6 ``` 输出类似: ``` /proc/12345/tcp:0: 00000000:1F90 00000000:0000 0A 00000000:00000000 ... ``` 然后查看进程信息: ```bash ps -p 12345 -o pid,ppid,user,cmd ``` > 虽然繁琐,但适用于极简环境(无 netstat/ss/lsof)。 --- ### 🔍 实用技巧汇总 | 目标 | 命令 | |------|------| | 查看所有监听端口及对应进程 | `sudo ss -tulnp` | | 查看特定端口(如 3306) | `sudo ss -tulnp \| grep :3306` | | 查看哪个进程占用(带名称) | `sudo lsof -i :3306` | | 终止占用端口进程 | `sudo kill $(lsof -t -i:3306)` | | 查看进程打开的所有端口 | `sudo lsof -p 1234` | --- ### ❗注意事项 1. **需要管理员权限** 使用 `sudo` 否则无法看到所有进程的信息。 2. **端口可能属于内核模块** 如 `AF_UNIX` 或某些内核网络功能,不会关联到用户进程。 3. **容器环境需进入对应命名空间** Docker/Kubernetes 中的端口映射需结合 `docker ps` 或 `kubectl` 判断。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

surfirst

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值