Linux如何查看当前系统中所有监听的端口号及其对应进程信息?

Linux系统中,端口号是网络通信中的重要标识,每个监听端口号都对应一个等待客户端连接的服务或进程,了解如何查看和管理监听端口号,对于系统运维、服务调试和安全排查都至关重要,本文将详细介绍Linux系统中监听端口的查看方法、相关工具的使用、进程关联分析以及防火墙对端口监听的影响,并辅以实例说明和工具对比,帮助读者全面掌握Linux端口监听的管理技巧。

linux如何监听的端口号

端口与监听状态的基础概念

在TCP/IP协议中,端口号是一个16位的无符号整数,取值范围0-65535,用于区分同一台主机上的不同网络服务,0-1023为知名端口(Well-Known Ports),通常被系统服务占用(如HTTP服务的80端口、HTTPS的443端口),需要root权限才能监听;1024-49151为注册端口(Registered Ports),用户程序可自由使用;49152-65535为动态或私有端口(Dynamic/Private Ports),通常用于临时连接。

当某个进程在特定端口上“监听”(Listen)时,意味着该端口处于打开状态,等待客户端发起连接请求,在Linux中,监听状态的端口通常显示为LISTEN,可通过工具查看其对应的协议(TCP/UDP)、IP地址、进程ID(PID)及进程名称等信息。

查看监听端口的常用命令

Linux提供了多种命令用于查看监听端口,不同工具在功能、效率和输出格式上各有特点,以下是常用工具的详细说明:

netstat:传统网络状态工具

netstat是Linux中经典的网络工具,用于显示网络连接、路由表、接口统计等信息,查看监听端口时,常用参数组合为-tulnp

  • -t:显示TCP端口;
  • -u:显示UDP端口;
  • -l:仅显示监听状态的端口;
  • -n:以数字形式显示地址和端口,不解析域名和服务名(提高速度);
  • -p:显示进程ID(PID)和进程名称(需root权限才能显示其他用户的进程)。

示例

netstat -tulnp

输出结果类似如下:

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
tcp6       0      0 :::80                   :::*                    LISTEN      5678/nginx
udp        0      0 0.0.0.0:68              0.0.0.0:*                           9012/dhclient
  • Proto:协议(TCP/UDP);
  • Local Address:本地IP地址和端口,0.0.0表示监听所有IPv4地址,表示监听所有IPv6地址;
  • State:端口状态,LISTEN表示监听中;
  • PID/Program name:进程ID和进程名。

ss:高效替代工具

ssiproute2包中的工具,旨在替代netstat,其查询效率更高(直接从内核获取网络信息),输出格式更简洁,常用参数与netstat类似:

  • -t:TCP端口;
  • -u:UDP端口;
  • -l:监听端口;
  • -n:数字形式;
  • -p:显示进程信息。

示例

ss -tulnp

输出示例:

State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN     0      511          0.0.0.0:22                    0.0.0.0:*
LISTEN     0      128               [::]:80                   [::]:*
LISTEN     0      0         127.0.0.1:631                     [::]:*

相比netstatss在处理大量连接时速度更快,且支持更多过滤条件(如-4仅显示IPv4,-6仅显示IPv6)。

lsof:列出打开文件的工具

lsof(List Open Files)用于列出系统中被进程打开的文件,包括网络端口(在Linux中,端口被视为一种“文件”),查看监听端口时,使用-i参数指定网络地址:

linux如何监听的端口号

  • -i:显示网络文件(端口);
  • -P:不解析端口号为服务名;
  • -n:不解析IP地址为域名;
  • -s:显示端口状态(如TCP:LISTEN)。

示例
查看80端口监听情况:

lsof -i:80 -P -n

输出示例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx     5678  root    6u  IPv6   12345      0t0  TCP *:http (LISTEN)
nginx     5679 www-data 6u  IPv6   12345      0t0  TCP *:http (LISTEN)

lsof的优势在于可精准定位特定端口的进程,尤其适合排查端口冲突问题。

监听端口的进程关联与管理

通过上述工具获取PID后,可进一步分析进程信息,或对监听端口进行管理操作。

查看进程详情

使用ps/proc文件系统查看进程详细信息:

# 通过PID查看进程
ps -ef | grep 5678
# 或查看/proc目录下的进程信息
cat /proc/5678/cmdline  # 查看进程启动命令
cat /proc/5679/environ  # 查看进程环境变量

终止或管理进程

若需终止占用端口的进程(如服务异常),可使用killpkill

# 正常终止进程(推荐)
kill 5678
# 强制终止进程(谨慎使用)
kill -9 5678
# 根据进程名终止
pkill nginx

修改服务监听端口

若需调整服务的监听端口(如避免冲突),需修改对应服务的配置文件,

  • Nginx:修改/etc/nginx/nginx.conf中的listen指令,如listen 8080;,然后执行nginx -s reload重载配置;
  • Apache:修改/etc/httpd/conf/httpd.conf中的Listen指令,如Listen 8080,然后执行systemctl restart httpd重启服务;
  • MySQL:修改/etc/my.cnf中的port = 3306,如改为port = 3307,然后重启MySQL服务。

防火墙与端口监听的关系

Linux防火墙(如iptablesfirewalldnftables)通过规则控制端口的访问权限,即使端口处于监听状态,若防火墙未放行,外部客户端仍无法连接,排查端口访问问题时,需同时检查防火墙规则。

iptables规则检查(传统防火墙)

# 查看INPUT链规则(控制入站流量)
iptables -L INPUT -n --line-numbers
# 放行80端口TCP流量
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

firewalld规则检查(CentOS/RHEL默认防火墙)

# 查看已开放的端口
firewall-cmd --list-ports
# 添加80端口到永久规则
firewall-cmd --permanent --add-port=80/tcp
# 重新加载防火墙使规则生效
firewall-cmd --reload

常用端口查看工具对比

为方便选择工具,以下表格对比netstatsslsof的特点:

工具 优点 缺点 适用场景
netstat 兼容性好,支持系统广泛 查询速度慢,已逐渐被ss替代 旧系统或简单端口查看
ss 查询效率高,输出简洁,支持过滤条件多 iproute2支持,部分旧系统无此工具 现代Linux系统,大规模连接监控
lsof 精准定位端口进程,支持文件类型过滤 输出信息较多,需结合过滤参数使用 端口冲突排查、特定端口进程分析

相关问答FAQs

问题1:为什么使用ssnetstat查看端口更快?

解答
netstat通过读取/proc/net/tcp/proc/net/udp等文件获取网络信息,这些文件需要解析内核数据结构,且在连接数较多时遍历效率较低;而ss直接从内核的netlink套接字获取实时网络状态数据,避免了文件I/O和解析开销,因此在处理大量连接时速度显著快于netstatss支持更精细的过滤条件(如按状态、协议、端口范围过滤),适合复杂场景的端口监控。

问题2:如何确认某个服务是否正确监听指定端口?

解答
可通过以下步骤确认服务是否正确监听指定端口:

linux如何监听的端口号

  1. 检查端口监听状态:使用ss -tulpn | grep 端口号netstat -tulpn | grep 端口号,确认端口处于LISTEN状态,并显示对应的服务进程,检查Nginx是否监听80端口:

    ss -tulpn | grep :80

    若输出中包含nginx进程且StateLISTEN,则说明监听正常。

  2. 检查服务配置文件:查看服务的配置文件(如Nginx的nginx.conf、Apache的httpd.conf),确认listen指令或Listen指令配置的端口号与预期一致。

    grep "listen" /etc/nginx/nginx.conf
  3. 检查防火墙规则:确保防火墙放行了目标端口,以firewalld为例,执行:

    firewall-cmd --list-ports | grep 80/tcp

    若未显示,需添加规则并重载防火墙。

  4. 测试端口连通性:使用telnetnc工具从本地或远程客户端测试端口是否可访问:

    telnet 127.0.0.1 80
    # 或
    nc -zv 127.0.0.1 80

    若显示“Connected to…”,则说明端口监听及防火墙配置正常。

通过以上步骤,可全面确认服务的端口监听状态,排查因配置错误、进程异常或防火墙限制导致的问题。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/34544.html

(0)
酷番叔酷番叔
上一篇 2025年10月2日 16:40
下一篇 2025年10月2日 17:04

相关推荐

  • linux如何退出图形化界面

    Linux 中,可通过快捷键 Ctrl + Alt + F1 等切换至字符界面,

    2025年8月14日
    3500
  • Linux系统如何使用SSH实现远程连接、文件传输与命令管理?

    SSH(Secure Shell)是一种加密的网络传输协议,专为在远程客户端和服务器之间提供安全的登录和其他网络服务而设计,广泛用于Linux系统的远程管理,相比传统的Telnet、FTP等明文传输协议,SSH通过对所有传输数据加密,有效防止了信息泄露和中间人攻击,成为Linux环境下远程运维的首选工具,本文将……

    2025年9月30日
    1400
  • 如何删除Linux系统用户文件夹的权限?

    在Linux系统中,文件夹权限管理是系统安全与稳定运行的关键,正确修改或移除用户对文件夹的访问权限,能有效防止未授权操作,本文将详细介绍如何通过命令行工具实现文件夹权限的调整,涵盖基础权限修改、属主变更及ACL(访问控制列表)等场景,Linux文件夹权限基础Linux文件夹权限通过“读(r)、写(w)、执行(x……

    2025年9月13日
    2300
  • Linux串口通信不稳?速查波特率设置!

    Linux串口波特率设置是硬件通信基础,关系数据传输稳定性,操作涵盖临时调整、永久配置及验证方法,确保设备间正常通信。

    2025年7月20日
    4800
  • Linux中如何去掉不需要的文件或服务?

    在Linux系统中,“去掉”操作的具体含义因对象不同而存在差异,可能涉及删除文件/目录、卸载软件包、移除文本内容、取消权限或删除用户/组等场景,以下针对常见需求分场景说明具体操作方法,涵盖命令使用、选项参数及注意事项,去掉(删除)文件或目录这是最常见的“去掉”操作,主要通过rm命令实现,删除文件:直接使用rm……

    2025年10月5日
    800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信