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)
酷番叔酷番叔
上一篇 1小时前
下一篇 1小时前

相关推荐

  • 长期熬夜真的会猝死吗

    在Linux环境中(尤其是内核开发或C语言用户空间编程中),链表逆序是一项基础且重要的操作,下面从原理、实现、应用场景及注意事项进行详细说明,并提供可直接使用的代码示例,链表逆序的核心原理链表逆序的本质是修改节点指针的指向,将当前节点的 next 指针指向前一个节点,核心步骤:保存当前节点的下一个节点(防止断链……

    2025年7月13日
    4200
  • Linux启动应用有哪些常用方法与步骤?

    Linux作为多用户多任务操作系统,启动应用的方式多样,可根据应用类型(命令行工具、图形界面程序、系统服务等)、运行场景(前台交互、后台静默、定时执行等)选择合适的方法,以下从基础到进阶,详细说明Linux启动应用的多种途径及注意事项,命令行直接启动:最基础的交互式启动命令行终端(Terminal)是Linux……

    2025年8月25日
    1800
  • Linux系统中双网卡如何同时配置两个独立的IP地址?

    在Linux系统中配置双网卡实现双IP地址是一项常见需求,通常用于服务器需要同时连接多个网络、实现负载均衡或冗余备份等场景,本文将详细介绍不同Linux发行版(如CentOS/RHEL和Ubuntu/Debian)下双网卡双IP的配置方法,包括静态IP和动态IP(DHCP)的配置步骤,以及配置后的验证和常见问题……

    2025年8月31日
    1700
  • Debian/Ubuntu更新卡住怎么办?

    准备工作(所有方法通用)更新系统终端执行:sudo apt update && sudo apt upgrade -y # Debian/Ubuntusudo dnf update -y # Fedora/RHEL安装依赖sudo apt install -y build-essential l……

    2025年7月25日
    3100
  • Linux脚本失控?安全终止全攻略

    前台运行脚本的停止方法若脚本在终端前台运行(直接通过./script.sh启动):Ctrl + C 组合键立即发送 SIGINT 信号终止脚本,适用于大多数情况,脚本会执行预设的清理操作后退出,注意:若脚本捕获了该信号(如使用 trap 命令),可能无法立即停止,Ctrl + Z 组合键 → 终止挂起任务按 C……

    2025年6月17日
    3900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信