Linux 查看进程端口占用命令整理

文章目录

  • [🚀 1. ss 命令(现代系统首选)](#🚀 1. ss 命令(现代系统首选))
  • [🔍 2. lsof 命令(定位进程最直观)](#🔍 2. lsof 命令(定位进程最直观))
  • [📜 3. netstat 命令(传统兼容方案)](#📜 3. netstat 命令(传统兼容方案))
  • [💡 总结与建议](#💡 总结与建议)

在 Linux 系统中,查看进程端口占用情况是日常运维和开发调试中非常高频的操作。最常用且高效的命令主要有三个: sslsofnetstat

下面为你详细拆解这三个命令的用法、返回结果以及每个字段的含义。

🚀 1. ss 命令(现代系统首选)

ss (Socket Statistics) 是目前 Linux 系统中最推荐的工具,它比传统的 netstat 速度更快、性能更高,能直接显示内核级的套接字信息。

  • 常用命令

    • 查看所有正在监听的 TCP/UDP 端口:sudo ss -tuln
    • 精准查找特定端口(如 8080)并显示占用进程sudo ss -tulnp | grep :8080
  • 参数含义

    • -t:仅显示 TCP 协议的端口。
    • -u:仅显示 UDP 协议的端口。
    • -l:仅显示处于监听(LISTEN)状态的端口。
    • -n:以数字形式显示端口号(不进行域名或服务名解析,速度更快)。
    • -p:显示占用端口的进程 PID 和名称(注意: 此参数通常需要 sudo 权限才能看到完整信息)。
  • 返回结果示例与解读

    text 复制代码
    Netid  State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
    tcp    LISTEN  0       128            *:8080              *:*        users:(("java",pid=12345,fd=52))
    • Netid:协议类型(如 tcp, udp)。
    • State :连接状态,LISTEN 表示该端口正在被监听等待连接。
    • Local Address:Port :本地监听的地址和端口。*:8080 表示在所有网卡上监听 8080 端口。
    • Process :占用该端口的具体进程信息。users:(("java",pid=12345,fd=52)) 代表是名为 java 的程序占用了该端口,其进程 ID (PID) 为 12345

🔍 2. lsof 命令(定位进程最直观)

lsof (List Open Files) 的核心逻辑是"在 Linux 中万物皆文件",网络端口也被视为一种文件。它的输出非常直观,特别适合用来反查是哪个程序占用了端口。

  • 常用命令

    • 查看指定端口(如 8080)被谁占用sudo lsof -i :8080
    • 查看所有正在监听的端口:sudo lsof -i -P -n | grep LISTEN
  • 参数含义

    • -i:列出符合条件的网络连接。
    • -P:禁止将端口号转换为服务名称(比如不把 80 显示为 http)。
    • -n:禁止将 IP 地址转换为主机名(避免 DNS 解析卡顿)。
  • 返回结果示例与解读

    text 复制代码
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx    1234 root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)
    • COMMAND :占用端口的进程/程序名称(如 nginx)。
    • PID :进程 ID(如果想强制结束该进程,可以直接使用 kill -9 1234)。
    • USER:运行该进程的系统用户。
    • NAME :显示协议、IP 和端口状态,(LISTEN) 同样代表正在监听。

📜 3. netstat 命令(传统兼容方案)

netstat 是最经典的网络统计工具。不过在很多较新的 Linux 发行版(如 Ubuntu 20.04+、CentOS 8+)中已被标记为过时或默认未安装。如果你的系统没有这个命令,可以通过 sudo apt install net-toolssudo yum install net-tools 来安装。

  • 常用命令

    • 查看所有监听端口及进程:sudo netstat -tulnp
    • 过滤特定端口(如 3306)sudo netstat -tulnp | grep 3306
  • 参数含义

    • -t / -u / -l / -n / -p 的含义与 ss 命令完全一致。
  • 返回结果示例与解读

    text 复制代码
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      5678/mysqld
    • Proto:使用的协议(TCP 或 UDP)。
    • Local Address :本地 IP 和端口。0.0.0.0:3306 表示监听本机所有 IPv4 地址的 3306 端口。
    • State :端口状态,LISTEN 为监听中。
    • PID/Program name :直接展示了进程 ID 和程序名(例如 5678/mysqld 表示 PID 为 5678 的 MySQL 数据库服务)。

💡 总结与建议

在日常排查中,建议优先使用 ss 命令,因为它响应最快且是现代系统的标配;如果你需要非常清晰地看到是哪个用户、哪个具体程序文件占用了端口,lsof 的输出格式会更加友好。

相关推荐
土星云SaturnCloud9 小时前
抽水蓄能设备智慧运营:基于土星云边缘计算实现机组全生命周期预测性维护
服务器·人工智能·ai·边缘计算
fengyehongWorld9 小时前
Linux 终端快捷键
linux·运维
hyf32663310 小时前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
哎呦喂我去去去10 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
为自己_带盐10 小时前
安敢越雷池一步?浅尝雷池WAF社区版
运维·web安全
NiceCloud喜云11 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder11 小时前
Linux LVM 知识文档
linux·运维
小小的木头人12 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
布鲁飞丝13 小时前
彩笔运维勇闯机器学习--cpu与qps的线性关系
运维·人工智能·机器学习
kaoa00013 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器