Linux下如何详细查看端口占用状态、开放情况及步骤?

在Linux系统中,查看端口状态是网络管理、服务调试和安全排查的核心操作,端口是应用程序与网络通信的入口,了解端口是否开放、监听状态及占用进程,能帮助快速定位服务异常、网络连接问题或潜在安全风险,本文将详细介绍Linux下查看端口的多种方法,涵盖命令行工具、系统文件及防火墙规则检查,适用于不同场景需求。

如何查看linux的port

使用netstat命令查看端口状态

netstat是传统的网络状态查看工具,功能全面,兼容性好,适用于几乎所有Linux发行版,它可显示TCP、UDP、UNIX域套接字等连接状态,以及端口监听、进程占用等信息。

常用参数及说明

参数 含义 示例
-t 显示TCP端口 netstat -t
-u 显示UDP端口 netstat -u
-l 只显示监听端口 netstat -l
-n 以数字形式显示地址和端口(不解析域名/服务名) netstat -n
-p 显示进程ID(PID)和进程名(需root权限) netstat -p
-a 显示所有连接(包括监听和未监听) netstat -a
-s 显示协议统计信息(如TCP、UDP包数量) netstat -s

示例命令

  • 查看所有监听的TCP和UDP端口(数字形式,显示进程):
    sudo netstat -tulpn  

    输出包含Proto(协议)、Local Address(本地地址:端口)、Foreign Address(远程地址:端口)、State(状态,如LISTEN)、PID/Program name(进程ID及名称)。

    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       
  • 查看TCP连接统计信息:
    netstat -s | grep TCP  

使用ss命令查看端口状态(推荐)

ssnetstat的替代工具,基于Netlink内核接口,查询速度更快,尤其在处理大量连接时性能优势明显,现代Linux发行版(如Ubuntu 18.04+、CentOS 7+)默认已安装ss

常用参数及说明

参数 含义 示例
-t 显示TCP端口 ss -t
-u 显示UDP端口 ss -u
-l 只显示监听端口 ss -l
-n 数字形式显示地址和端口 ss -n
-p 显示进程信息(需root权限) ss -p
-a 显示所有连接 ss -a
-s 显示协议统计摘要 ss -s
-4/-6 只显示IPv4/IPv6端口 ss -4

示例命令

  • 查看所有监听端口(含进程信息):
    sudo ss -tulpn  

    输出格式与netstat类似,但字段更简洁,

    State      Recv-Q Send-Q Local Address:Port   Peer Address:Port   Process    
    LISTEN     0      511       0.0.0.0:22          0.0.0.0:*        users:(("sshd",pid=1234,fd=3))  
    LISTEN     0      511          :::80             :::*        users:(("nginx",pid=5678,fd=4))  
  • 查看指定端口的监听状态:
    ss -tlnp | grep :8080  

使用lsof命令查看端口占用进程

lsof(list open files)可列出系统打开的文件、目录、网络连接等,通过-i参数可直接筛选网络端口信息,适合快速定位端口对应的进程。

常用参数及说明

参数 含义 示例
-i 显示网络连接相关文件 lsof -i
-i :端口号 显示指定端口的占用情况 lsof -i :80
-i [协议] 显示指定协议的连接(如TCP、UDP) lsof -i TCP
-P 不解析端口号为服务名(显示数字端口) lsof -P
-n 不解析主机名(显示IP地址) lsof -n

示例命令

  • 查看80端口被哪个进程占用:
    sudo lsof -i :80  

    输出包含COMMAND(进程名)、PID(进程ID)、USER(用户)、FD(文件描述符)、TYPE(类型,如IPv4)、DEVICE(设备)、SIZE/OFF(大小)、NODE(节点)、NAME(端口信息,如*:http168.1.1:80)。

    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
    nginx    5678 root    3u  IPv4   12345      0t0  TCP *:http (LISTEN)  
  • 查看所有TCP连接及对应进程:
    sudo lsof -i TCP  

使用nmap工具扫描端口

nmap(Network Mapper)是强大的网络扫描工具,可检测本地或远程主机的端口开放状态、服务类型及版本,适合安全审计和网络探测。

安装nmap

  • Ubuntu/Debian:sudo apt install nmap
  • CentOS/RHEL:sudo yum install nmap

常用参数及说明

参数 含义 示例
-sT TCP connect扫描(无需root,完整连接) nmap -sT localhost
-sU UDP扫描 nmap -sU -p 53,161 localhost
-p 指定端口范围(如1-100022,80,443 nmap -p 22,80,443 localhost
-O 启用系统检测 nmap -O localhost
-sV 检测服务版本 nmap -sV localhost
-open 只显示开放端口 nmap --open localhost

示例命令

  • 扫描本地主机的开放TCP端口(1-1024):
    nmap -sT -p 1-1024 localhost  

    输出显示端口状态(openclosedfiltered)及对应服务,

    如何查看linux的port

    PORT     STATE SERVICE  
    22/tcp   open  ssh  
    80/tcp   open  http  
    443/tcp  open  https  

查看/proc文件系统中的端口信息

/proc是Linux内核提供的虚拟文件系统,包含实时系统信息,通过读取/proc/net/tcp/proc/net/udp,可直接查看内核中的TCP/UDP端口状态,适用于无netstat/ss工具的 minimalist 环境。

示例操作

  • 查看TCP端口状态:

    cat /proc/net/tcp  

    输出字段说明:

    • local_address:本地地址和端口(十六进制,格式为IP:Port,IP为十六进制,端口为后两位十六进制,需转换为十进制)。
    • rem_address:远程地址和端口(格式同上)。
    • st:状态(01ESTABLISHED0ALISTEN等)。
      sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode   
      0: 0100007F:A001 00000000:0000 0A 00000000:00000000 00:00000000 00000000   1000        0 12345  

      其中0100007F是127.0.0.1(十六转十),A001是40961(0xA001=256×160+1),表示本地监听127.0.0.1:40961,状态为LISTEN0A)。

  • 查看UDP端口状态:

    cat /proc/net/udp  

检查防火墙规则中的端口

即使端口被进程监听,防火墙也可能阻止外部访问,需检查防火墙规则(如iptablesfirewalldufw),确认端口是否已开放。

iptables(传统防火墙)

# 查看所有规则(-L列出,-n数字显示,-v详细信息)  
sudo iptables -L -n -v  
# 查看INPUT链规则(入站规则)  
sudo iptables -L INPUT -n -v  
# 查看开放端口(ACCEPT规则)  
sudo iptables -L INPUT -n | grep ACCEPT  

firewalld(CentOS/RHEL默认防火墙)

# 查看已开放端口  
sudo firewall-cmd --list-ports  
# 查看所有规则(详细模式)  
sudo firewall-cmd --list-all  

ufw(Ubuntu默认防火墙)

# 查看防火墙状态  
sudo ufw status  
# 查看详细规则  
sudo ufw status verbose  

相关问答FAQs

问题1:如何快速查看某个端口是否被占用,以及占用它的进程ID和名称?

解答:使用ssnetstat命令结合grep筛选指定端口,或直接使用lsof

  • 方法1(推荐):

    如何查看linux的port

    sudo ss -tlnp | grep :端口号  

    例如查看8080端口:

    sudo ss -tlnp | grep :8080  

    输出如:LISTEN 0 511 *:8080 *:* users:(("java",pid=1234,fd=85)),显示进程名为java,PID为1234。

  • 方法2(兼容性好):

    sudo netstat -tlnp | grep :端口号  
  • 方法3(直接查进程):

    sudo lsof -i :端口号  

问题2:为什么端口显示为LISTEN状态,但外部设备无法访问?

解答:可能原因包括防火墙阻止、服务绑定地址错误、网络配置问题或SELinux限制。

  1. 防火墙规则:检查防火墙是否开放该端口,例如iptables中需确保INPUT链有ACCEPT规则允许目标端口;firewalld需执行sudo firewall-cmd --add-port=端口号/tcp --permanent并重载(sudo firewall-cmd --reload)。
  2. 绑定地址错误:服务可能只监听本地地址(如0.0.1),未绑定0.0.0(所有接口),通过ss -tulpn | grep :端口号查看Local Address,若为0.0.1:端口号,需修改服务配置(如Nginx的listen 0.0.0.0:端口号)。
  3. SELinux限制(CentOS/RHEL):若SELinux开启,可能阻止服务监听端口,检查策略:
    getsebool -a | grep httpd_can_network_connect  

    若为off,则启用:

    sudo setsebool -P httpd_can_network_connect on  
  4. 网络配置:检查服务器是否正确绑定公网IP,或安全组(云服务器)是否开放端口。

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

(0)
酷番叔酷番叔
上一篇 2025年9月19日 20:42
下一篇 2025年9月19日 21:00

相关推荐

  • Linux系统如何查询MAC地址?

    在Linux系统中,MAC地址(Media Access Control Address,媒体访问控制地址)是网络接口卡(NIC)的硬件标识符,由48位二进制数组成,通常以十六进制格式表示(如00:1A:2B:3C:4D:5E),查询MAC地址是网络管理、故障排查和安全配置中的常见需求,Linux提供了多种命令……

    2025年9月16日
    4700
  • 月入过万为何仍觉贫穷?

    在Linux环境中,C语言作为系统级编程的核心工具,其应用通常涉及两类需求:安装C语言开发环境或通过C程序获取Linux系统信息将详细解答这两种场景,确保技术准确性和实用性,所有方法均通过主流Linux发行版验证(如Ubuntu、CentOS),在Linux系统上安装C语言编译器若需在Linux中编写/运行C程……

    2025年8月4日
    7000
  • 如何轻松创建Linux系统镜像文件?

    在Linux环境中制作镜像文件是备份系统、迁移数据或创建可部署模板的关键操作,以下是三种主流方法,涵盖不同场景需求:制作整个磁盘/分区的原始镜像(适用于系统克隆)工具:dd命令原理: 逐字节复制原始设备,生成.img或.iso格式的精确副本,包含分区表、引导扇区和所有数据,操作步骤:识别设备路径sudo fdi……

    2025年8月7日
    6300
  • 如何彻底移除MySQL程序及其依赖?

    在Linux系统中彻底卸载MySQL数据库需要谨慎操作,避免残留文件影响后续安装或系统安全,以下是详细步骤,适用于主流发行版(Ubuntu/Debian/CentOS/RHEL),操作前务必备份重要数据:核心准备工作备份所有数据库(关键步骤)防止数据丢失,执行:mysqldump -u root -p –al……

    2025年7月19日
    8100
  • 文件权限设置错误有多危险?

    在Linux系统中,文件权限是安全管理的核心机制,通过命令行(模式)更改权限可精确控制用户对文件/目录的访问,以下是详细操作指南:权限基础概念Linux为每个文件分配三类用户的权限:所有者(Owner):文件创建者所属组(Group):共享权限的用户组其他用户(Others):系统所有其他用户权限类型:读(r……

    2025年7月15日
    6700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信