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

相关推荐
着迷不白1 小时前
二、Linux命令3要素及系统结构+文件的增删改查
linux·运维·服务器
heimeiyingwang1 小时前
【架构实战】搜索系统架构设计:从精准匹配到智能推荐
运维·架构·jenkins
zzzyyy5381 小时前
System V IPC 全链路深度解析 —— 从信号量原子性到内核多态再到物理内存共享
linux·服务器
不吃土豆的马铃薯2 小时前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法
Agent手记2 小时前
医药代表拜访计划能否通过AI自动生成优化?2026Agent自动化实战解析
运维·人工智能·ai·自动化
零号全栈寒江独钓2 小时前
c++跨平台实现日志重定向
linux·c++·windows
ID_180079054732 小时前
(淘宝 / 京东)商品评论 API 接口:技术实战案例与架构分析
服务器·数据库·架构
爱莉希雅&&&2 小时前
Zabbix监控初步搭建
linux·运维·数据库·mysql·zabbix
叠叠乐2 小时前
红米redmi k90 pro max alsc 冠军版刷TWRP
linux