菜鸟科技网

如何查看服务端口命令?

在Linux和Unix-like系统中,查看服务端口是网络管理和系统运维中的常见操作,通过命令行工具可以快速定位服务监听的端口、端口关联的进程以及网络连接状态等信息,以下是常用的查看服务端口的命令及其详细使用方法,涵盖不同场景下的需求。

如何查看服务端口命令?-图1
(图片来源网络,侵删)

使用netstat命令查看端口信息

netstat是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息,尽管在现代系统中逐渐被ss命令替代,但netstat仍广泛使用,尤其在旧版系统中。

基本语法

netstat [选项] [参数]

常用选项及示例

  • 查看所有监听端口

    netstat -tuln
    • -t:显示TCP端口
    • -u:显示UDP端口
    • -l:仅显示监听状态的端口
    • -n:以数字形式显示地址和端口,避免域名解析,提高速度

    示例输出:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     
    udp        0      0 0.0.0.0:68              0.0.0.0:*                          
  • 查看端口关联的进程ID(PID)

    如何查看服务端口命令?-图2
    (图片来源网络,侵删)
    netstat -tulnp
    • -p:显示进程ID和进程名称

    示例输出:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      PID/Program name   
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd          
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5678/mysqld        
  • 查看所有网络连接(包括监听和非监听)

    netstat -an
    • -a:显示所有连接,包括监听和非监听
  • 查看指定端口的连接状态

    netstat -tuln | grep 80

netstat命令的局限性

  • 在高并发系统中,netstat的输出速度较慢,因为需要遍历所有网络堆栈。
  • 在新版本的Linux发行版中(如CentOS 7+、Ubuntu 18.04+),netstat可能被ss替代。

使用ss命令查看端口信息

ssiproute2包的一部分,旨在替代netstat,提供更快速、更详细的网络连接信息。ss命令通过直接读取netlink套接字获取数据,效率远高于netstat

如何查看服务端口命令?-图3
(图片来源网络,侵删)

基本语法

ss [选项] [参数]

常用选项及示例

  • 查看所有监听端口

    ss -tuln
    • -t:TCP端口
    • -u:UDP端口
    • -l:仅显示监听端口
    • -n:数字形式显示

    示例输出:

    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    LISTEN     0      128          0.0.0.0:22                     0.0.0.0:*                  
    LISTEN     0      128             [::]:22                    [::]:*                  
    LISTEN     0      80         127.0.0.1:3306                    0.0.0.0:*                  
  • 查看端口关联的进程信息

    ss -tulnp
    • -p:显示进程ID和名称

    示例输出:

    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port    Process    
    LISTEN     0      128          0.0.0.0:22                     0.0.0.0:*        users:(("sshd",pid=1234,fd=3))  
    LISTEN     0      80         127.0.0.1:3306                    0.0.0.0:*        users:(("mysqld",pid=5678,fd=31))  
  • 查看所有TCP连接

    ss -t
  • 查看所有UDP连接

    ss -u
  • 查看指定端口的连接

    ss -tuln | grep 8080

ss命令的优势

  • 速度快,尤其在高并发场景下。
  • 支持更多过滤条件,如按状态、协议、端口范围等。
  • 输出格式更清晰,便于解析。

使用lsof命令查看端口信息

lsof(List Open Files)是一个列出系统打开文件的工具,在Linux中,一切皆文件,因此网络端口也被视为文件,通过lsof可以查看端口被哪个进程占用。

基本语法

lsof [选项] [参数]

常用选项及示例

  • 查看指定端口占用的进程

    lsof -i :80
    • -i:显示指定协议的端口,80表示TCP/UDP的80端口

    示例输出:

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx     1234  root    6u  IPv4   12345      0t0  TCP *:http (LISTEN)
    nginx     1235  www-data 7u  IPv4   12346      0t0  TCP *:http (LISTEN)
  • 查看所有监听端口

    lsof -i -P -n | grep LISTEN
    • -P:不解析端口号为服务名
    • -n:不解析IP地址为域名
  • 查看指定进程的端口占用

    lsof -p 1234

lsof的适用场景

  • 适用于需要查看端口与进程详细对应关系的场景。
  • 支持按文件描述符、用户、进程等条件过滤。

使用grep结合其他命令过滤端口信息

在实际操作中,经常需要结合grep命令过滤端口信息,

netstat -tuln | grep 3306
ss -tuln | grep 8080
lsof -i :22 | grep LISTEN

不同命令的对比

以下表格总结了三个常用查看端口命令的特点:

命令 优点 缺点 适用场景
netstat 兼容性好,支持旧版系统 速度慢,功能相对有限 旧版Linux系统或简单查询
ss 速度快,功能丰富,推荐使用 部分旧系统可能未安装 新版Linux系统(CentOS 7+等)
lsof 支持按进程、文件描述符过滤 输出信息较多,需要结合grep 需要详细端口-进程映射关系

相关问答FAQs

Q1: 如何查看某个端口是否被占用?
A1: 可以使用以下命令组合检查端口占用情况:

  • 使用ss命令:ss -tuln | grep 端口号,若输出结果中包含该端口,则表示已被占用。
  • 使用netstat命令:netstat -tuln | grep 端口号
  • 使用lsof命令:lsof -i :端口号,若显示进程信息则表示端口被占用。

Q2: 如何查看所有TCP连接状态及对应的数量?
A2: 可以通过以下命令统计TCP连接状态:

ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c

该命令会输出各TCP状态(如ESTABLISTENTIME_WAIT等)及其对应的连接数量。

10  ESTAB
5   LISTEN
20  TIME_WAIT

ESTAB表示已建立的连接,LISTEN表示监听状态,TIME_WAIT表示等待关闭的连接。

分享:
扫描分享到社交APP
上一篇
下一篇