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 的输出格式会更加友好。

相关推荐
用户0328472220706 小时前
如何搭建本地yum源(上)
运维
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务