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分区如何轻松挂载?

    挂载前的准备工作识别分区使用 lsblk 或 fdisk 命令查看磁盘分区:lsblk -f # 显示分区文件系统类型(如 ext4、NTFS)sudo fdisk -l # 列出所有磁盘及分区(需 root 权限)记录目标分区的设备名(如 /dev/sda1)和文件系统类型,创建挂载点挂载点是一个空目录,用于……

    2025年7月17日
    8900
  • Linux如何安装yum命令?

    Linux系统中,yum(Yellow dog Updater, Modified)是一款广泛使用的包管理工具,主要用于自动下载、安装、更新RPM包以及管理依赖关系,尤其在Red Hat系列发行版(如CentOS、RHEL、Fedora)中扮演核心角色,在某些情况下(如系统最小化安装、yum组件损坏或跨发行版使……

    2025年8月30日
    7200
  • 光盘/USB启动安装Linux教程

    准备Linux安装介质(光盘或USB),重启电脑,开机时按特定键(如F12、F2、ESC)进入启动菜单或BIOS/UEFI设置,选择该介质为第一启动项,保存退出后电脑将从介质启动,运行Linux安装程序,按提示完成安装。

    2025年7月21日
    8800
  • 远程控制Linux有哪些实用方法?

    远程控制Linux系统是日常运维和开发中的常见需求,通过远程工具可以高效管理服务器、执行命令、传输文件等,本文将详细介绍几种主流的Linux远程控制方法,包括SSH、VNC、Web界面管理等,并涵盖安全配置和最佳实践,帮助用户选择适合的方案实现稳定、安全的远程连接,基于SSH的远程控制(命令行核心方案)SSH……

    2025年9月8日
    8200
  • Linux如何高效安全移动多个文件夹?

    核心命令:mvmv(move)是Linux移动文件/目录的基础命令,语法为:mv [选项] 源目录1 源目录2 … 目标路径高效移动多个文件夹的方法方法1:通配符匹配通过通配符批量选择名称匹配的文件夹:mv dir_* /target/path/ # 移动所有以"dir_"开头的文件夹m……

    2025年8月8日
    9100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信