上一篇
在 Linux 中查看端口占用程序:,1. **
netstat -tulpn | grep **:查看监听端口的进程名和 PID。,2. **
lsof -i :**:直接列出占用指定端口的进程信息。,3. **
ss -tulpn | grep **:更现代的替代命令,功能类似 netstat。,通常需要 root 权限才能查看所有进程信息。
方法一:使用 ss 命令(推荐)
ss(Socket Statistics)是替代 netstat 的现代工具,执行速度快且默认预装:
sudo ss -tulnp | grep :端口号
示例(查看80端口):
sudo ss -tulnp | grep :80
输出解析:
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=18))
nginx:进程名称pid=1234:进程IDfd=18:文件描述符
️ 方法二:使用 lsof 命令
lsof(List Open Files)可查看文件与端口的关联:
sudo lsof -i :端口号
示例(查看3306端口):

sudo lsof -i :3306
输出解析:
mysqld 5678 mysql 34u IPv6 0xabcd1234 0t0 TCP *:mysql (LISTEN)
mysqld:进程名5678:进程PIDmysql:运行用户
若未安装:
sudo apt install lsof(Debian/Ubuntu)或sudo yum install lsof(RHEL/CentOS)
方法三:使用 netstat 命令(传统方案)
netstat 兼容性广,但部分新系统需手动安装:

sudo netstat -tulnp | grep :端口号
常用参数:
-t:TCP端口-u:UDP端口-l:仅监听端口-n:禁用域名解析(加速)-p:显示进程信息
️ 方法四:使用 fuser 命令
直接通过端口号查询进程:
sudo fuser 端口号/tcp
示例(终止占用8080的进程):

sudo fuser -k 8080/tcp # -k 选项终止进程
️ 方法对比与选择建议
| 工具 | 速度 | 预装情况 | 功能亮点 |
|---|---|---|---|
ss |
️ 极快 | 多数系统 | 信息简洁,性能最优 |
lsof |
️ 快 | 需手动安装 | 支持查看文件关联细节 |
netstat |
较慢 | 部分预装 | 兼容性强,语法易记 |
fuser |
️ 快 | 通常预装 | 快速终止进程 |
实战案例:解决端口冲突
场景:启动Nginx时报错 80端口被占用
- 查找进程:
sudo ss -tulnp | grep :80
- 发现占用进程PID为
1234(假设为旧Apache进程) - 终止进程:
sudo kill 1234 # 正常终止 sudo kill -9 1234 # 强制终止(慎用)
- 重新启动Nginx:
sudo systemctl start nginx
️ 注意事项
- 权限要求:查询系统级端口需
sudo权限 - 谨慎终止进程:避免误杀关键服务(如数据库)
- 临时端口:
TIME_WAIT状态端口属正常释放过程,无需处理 - 服务自启:若重启后端口仍被占,检查系统服务(如
systemctl list-unit-files)
掌握 ss、lsof、netstat 和 fuser 四类工具,可覆盖所有端口排查场景,推荐优先使用 ss 或 lsof 获取详细信息,结合 kill 或 fuser -k 安全释放端口,定期检查端口占用能有效预防服务异常,提升系统稳定性。
引用说明:
- 工具文档:
man ss,man lsof,man netstat,man fuser- 协议标准:IEEE 802.3, TCP/IP RFC 793
- 系统支持:适用于Linux kernel 2.6+及主流发行版(Ubuntu, CentOS, RHEL等)
