当前位置:首页 > Linux > 正文

Linux端口被哪个程序占用?

在 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端口):

Linux端口被哪个程序占用?  第1张

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端口被占用

  1. 查找进程:
    sudo ss -tulnp | grep :80
  2. 发现占用进程PID为 1234(假设为旧Apache进程)
  3. 终止进程:
    sudo kill 1234          # 正常终止
    sudo kill -9 1234       # 强制终止(慎用)
  4. 重新启动Nginx:
    sudo systemctl start nginx

️ 注意事项

  1. 权限要求:查询系统级端口需 sudo 权限
  2. 谨慎终止进程:避免误杀关键服务(如数据库)
  3. 临时端口TIME_WAIT 状态端口属正常释放过程,无需处理
  4. 服务自启:若重启后端口仍被占,检查系统服务(如 systemctl list-unit-files

掌握 sslsofnetstatfuser 四类工具,可覆盖所有端口排查场景,推荐优先使用 sslsof 获取详细信息,结合 killfuser -k 安全释放端口,定期检查端口占用能有效预防服务异常,提升系统稳定性。

引用说明

  • 工具文档:man ss, man lsof, man netstat, man fuser
  • 协议标准:IEEE 802.3, TCP/IP RFC 793
  • 系统支持:适用于Linux kernel 2.6+及主流发行版(Ubuntu, CentOS, RHEL等)
0