上一篇                     
               
			  Linux端口被哪个程序占用?
- Linux
- 2025-06-11
- 3527
 在 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:进程ID
- fd=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:进程PID
- mysql:运行用户
若未安装:
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等)
 
  
			 
			 
			 
			 
			 
			