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

Linux系统端口占用怎么查

在 Linux 中 查看端口占用:,1. ** netstat -tulpn | grep **:查看监听端口及对应进程。,2. ** ss -tulpn | grep **:更快速替代 netstat。,3. ** lsof -i :**:查找占用指定端口的进程。

方法1:使用 netstat 命令(经典工具)

netstat 是网络统计工具,可查看所有网络连接和监听端口。

操作步骤:

netstat -tuln | grep <端口号>

  • 参数解析

    -t:TCP端口

    -u:UDP端口

    -l:仅显示监听中的端口

    -n:以数字形式显示(不解析域名)

    -p:显示进程信息(需sudo权限)

示例:

$ netstat -tulnp | grep :22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd

输出解读

端口 22 被进程 sshd(PID 1234)占用,协议为TCP。

Linux系统端口占用怎么查 第1张

方法2:使用 ss 命令(netstat 的替代品)

ss(Socket Statistics)更快速高效,语法与 netstat 类似。

操作步骤:

ss -tuln | grep <端口号>

示例:

$ ss -tuln sport = :80 tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

输出解读

端口 80 处于监听状态(未显示进程时需结合 -p 参数)。

Linux系统端口占用怎么查 第2张

方法3:使用 lsof 命令(查看文件与进程关联)

lsof(List Open Files)可精确查看占用端口的进程。

操作步骤:

sudo lsof -i :<端口号>

示例:

$ sudo lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 5678 mysql 33u IPv6 123456 0t0 TCP *:mysql (LISTEN)

输出解读

端口 3306 被 mysqld 进程(PID 5678)占用。

Linux系统端口占用怎么查 第3张


方法4:使用 /proc 文件系统(底层排查)

Linux 通过 /proc 目录暴露进程信息,可直接读取网络状态。

操作步骤:

grep -l <端口号> /proc/net/tcp* # 查找TCP端口 cat /proc/<PID>/net/tcp # 根据PID检查

适用场景

当系统未安装 netstat/ss 时使用(如精简版Docker容器)。


端口占用后的处理建议

  1. 终止占用进程: sudo kill <PID> # 正常终止 sudo kill -9 <PID> # 强制终止(慎用)
  2. 修改服务配置

    若需保留原进程,修改应用配置文件更换端口(如Nginx的 listen 指令)。

  3. 预防冲突
    • 使用 systemctl status <服务名> 检查服务状态。
    • 通过 crontab 设置定期端口检查脚本。


方法对比与选择指南

方法 优势 适用场景
netstat 兼容性广(旧系统支持) 基础检查
ss 执行速度快,输出简洁 高效批量检查
lsof 进程信息详细,支持过滤 精准定位占用源
/proc 不依赖外部工具 极简环境故障排查

安全提示

  • 操作需 sudo 权限的命令时,确保理解其风险。
  • 生产环境中,终止进程前请确认其作用(如 sshd 占用22端口属正常现象)。


引用说明: 参考 Linux 官方文档(man7.org)及以下工具手册:

  1. netstat(8), ss(8), lsof(8) 的 man page 文档。
  2. Linux 内核文档 /proc/net/ 部分(kernel.org)。
  3. 操作实践基于 Ubuntu 22.04/CentOS 7 测试验证。

0