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

文章目录

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

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

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

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

相关推荐
程序员-Benothing4 小时前
Linux安全加固指南:账号、权限、服务、审计基线
linux·运维·安全
Mininglamp_27184 小时前
接口调用 vs 屏幕理解:两种 GUI 自动化架构的技术取舍
运维·架构·自动化
Cry丶5 小时前
ubuntu安装vsftpd
服务器·网络·ubuntu
爱喝水的鱼丶6 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
木子欢儿7 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..7 小时前
【Linux】文件系统(一)
linux·运维·服务器
天空属于哈夫克37 小时前
企业微信API二次开发 赋能私域运营自动化
运维·自动化·企业微信
天远API8 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
九零HTTP8 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
SHENGWEI胜为8 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程