Linux如何查看映射关系?

在Linux系统中,“映射”是一个广义概念,涵盖网络端口映射、进程与文件的映射、内存映射、网络连接映射等多个场景,不同场景下查看映射的方法各有侧重,本文将详细介绍常见映射类型的查看方式,包括命令工具、输出解析及实际示例。

linux如何查看映射

网络端口映射查看

网络端口映射通常指通过NAT(网络地址转换)将内网服务端口映射到公网IP或本地端口,常见于服务器端口转发、容器端口暴露等场景,查看端口映射主要依赖iptablesfirewalldss等工具。

使用iptables查看NAT规则

iptables是Linux内核的防火墙工具,其nat表记录了端口转发规则,通过以下命令查看:

sudo iptables -t nat -L -n -v  
  • -t nat:指定操作nat表;
  • -L:列出所有规则链;
  • -n:以数字形式显示IP和端口(避免域名解析延迟);
  • -v:显示详细信息(如数据包数量、字节大小)。

输出示例中,DNAT(目标地址转换)和SNAT(源地址转换)规则即为端口映射的核心,

DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:192.168.1.100:80  

表示将本机的8080端口映射到内网IP 168.1.100 的80端口。

使用firewalld查看端口转发

若系统使用firewalld(如CentOS/RHEL 7+),可通过以下命令查看已配置的端口转发:

sudo firewall-cmd --list-forward-ports --permanent  
  • --permanent:查看永久配置(临时配置需去掉该参数);
  • 输出示例:port=8080:proto=toc:toport=80:toaddr=192.168.1.100,含义同iptables的DNAT规则。

使用ssnetstat查看监听端口

映射生效后,目标端口需处于监听状态,通过ss(推荐,比netstat更高效)查看:

ss -tuln | grep 8080  
  • -t:TCP端口,-u:UDP端口,-l:仅显示监听端口,-n:数字形式;
  • 输出示例:LISTEN 0 128 *:8080 *:*,表示8080端口正在监听所有IP地址。

进程与文件映射查看

进程与文件的映射指进程打开的文件、网络连接、设备文件等资源,可通过/proc文件系统或lsof工具查看。

通过/proc文件系统查看进程文件描述符

Linux中,/proc/PID/fd目录存储了进程ID为PID的文件描述符(每个描述符是一个符号链接,指向实际文件):

linux如何查看映射

ls -l /proc/$(pgrep nginx)/fd  
  • pgrep nginx:获取nginx进程的PID;
  • 输出示例:lrwx------ 1 root root 64 Dec 1 10:00 0 -> /dev/null(标准输入)、lrwx------ 1 root root 64 Dec 1 10:01 1 -> /var/log/nginx/access.log(标准输出),分别对应进程的输入输出文件。

使用lsof查看进程打开的文件

lsof(list open files)可查看进程打开的文件、网络连接等:

lsof -p $(pgrep nginx)  # 查看nginx进程打开的文件  
lsof -i :80             # 查看占用80端口的进程  
  • -p:指定进程ID;-i:显示网络连接;
  • 输出示例:nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN),表示进程1234(nginx)正在监听80端口(http)。

内存映射查看

内存映射指进程将文件或设备映射到虚拟内存空间,可通过/proc/PID/mapspmap工具查看。

通过/proc/PID/maps查看内存映射

/proc/PID/maps记录了进程的虚拟内存地址映射关系,包括权限、偏移量、文件路径等:

cat /proc/$(pgrep nginx)/maps  

输出格式为:虚拟地址范围 权限 偏移量 设备 inode 文件路径

7f8a5a1b2000-7f8a5a1b3000 r-xp 00000000 08:02 123456 /usr/sbin/nginx  

表示进程将/usr/sbin/nginx文件的0x7f8a5a1b2000-0x7f8a5a1b3000地址范围映射为可执行(r-x)。

使用pmap查看详细内存映射

pmap(process memory map)提供更易读的内存映射信息:

pmap -d $(pgrep nginx)  
  • -d:显示设备映射信息;
  • 输出包含进程的代码段、数据段、堆、栈、共享库等映射详情,
    7f8a5a1b2000     64K r-x-- nginx  
    7f8a5a1b3000     16K r---- nginx  
    7f8a5a1b4000      8K rw--- nginx  

网络连接映射查看

网络连接映射指本地IP与端口、远程IP与端口的对应关系,可通过ssnetstatlsof查看。

使用ss查看TCP/UDP连接

ssnetstat的替代工具,性能更优,常用参数:

linux如何查看映射

ss -tulnp  # 查看所有监听端口及进程  
ss -t  # 仅查看TCP连接  
ss -4  # 仅查看IPv4连接  
  • -n:数字形式,-p:显示进程ID和名称;
  • 输出示例:LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)),表示sshd进程监听所有IP的22端口。

使用netstat查看连接状态(传统工具)

若系统未安装ss,可用netstat

netstat -tulnp  

输出格式与ss类似,但netstat已逐渐被废弃。

工具对比与适用场景

映射类型 常用工具 核心命令示例 适用场景
网络端口映射 iptables, firewalld, ss iptables -t nat -L, firewalld --list-forward-ports 查看NAT端口转发规则、容器端口暴露
进程文件映射 /proc, lsof ls /proc/PID/fd, lsof -p PID 查看进程打开的文件、日志、网络连接
内存映射 /proc/PID/maps, pmap cat /proc/PID/maps, pmap -d PID 分析进程内存占用、共享库加载情况
网络连接映射 ss, netstat, lsof ss -tulnp, netstat -tulnp 查看端口占用、网络连接状态

相关问答FAQs

Q1: 如何查看某个进程(如Nginx)打开了哪些文件和网络连接?
A1: 可通过lsof工具结合进程ID查看,具体命令为:

lsof -p $(pgrep nginx)  # 查看nginx进程打开的所有文件  
lsof -i -p $(pgrep nginx)  # 仅查看nginx进程的网络连接  

若需查看特定端口(如80端口)的占用进程,使用:

lsof -i :80  

Q2: 如何查看Linux中端口转发的当前配置(如iptables的NAT规则)?
A2: 使用iptables查看nat表的规则,命令为:

sudo iptables -t nat -L -n -v  

若需查看具体链(如PREROUTING、POSTROUTING)的规则,可添加-t nat -S或指定链名称(如-t nat -L PREROUTING),对于firewalld用户,使用:

sudo firewall-cmd --list-forward-ports --permanent  

临时配置可通过去掉--permanent参数查看。

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

(0)
酷番叔酷番叔
上一篇 2025年10月8日 02:38
下一篇 2025年10月8日 02:56

相关推荐

  • Linux如何给用户分配权限?

    在Linux系统中,用户权限管理是保障系统安全与资源合理分配的核心环节,主要通过用户、用户组及文件权限三级控制实现,要准确分配权限,需先理解Linux权限的基本逻辑:任何文件或目录都关联一个所有者(用户)和一个所属组,同时针对三类对象设置权限——所有者(User,u)、所属组(Group,g)、其他用户(Oth……

    2025年9月27日
    7300
  • Linux下tar包如何安装?

    在Linux系统中,tar包通常指通过tar工具打包的源码压缩包(如.tar.gz、.tar.bz2、.tar.xz等),与二进制包(如.deb、.rpm)不同,tar包需要用户手动编译安装,过程涉及解压、配置、编译、安装等步骤,适合需要自定义功能或适配特定系统的场景,以下是详细安装流程:安装前准备:编译环境依……

    2025年9月15日
    6800
  • 在Linux系统中,如何查看当前用户设置的所有别名及具体命令?

    在Linux系统中,别名(alias)是一种便捷的功能,允许用户为常用命令或复杂命令组合设置简短的名称,从而提高命令行操作效率,要查看Linux系统中已定义的别名,可以通过多种方式实现,本文将详细介绍这些方法,包括基础查看命令、配置文件定位、别名定义解析等,帮助用户全面掌握别名的查看与管理,使用alias命令直……

    2025年8月28日
    10000
  • Linux如何查看系统中所有已连接设备?

    在Linux系统中,设备管理是系统运维和开发中的基础操作,无论是排查硬件故障、识别外接设备,还是优化系统配置,都需要准确掌握设备信息的查看方法,Linux提供了丰富的命令行工具,支持从不同维度(如块设备、PCI设备、USB设备、CPU、内存等)查看系统中的所有设备信息,本文将详细介绍常用命令的功能、用法及输出解……

    2025年10月1日
    6600
  • 如何正确安装Linux内核源码?详细步骤方法有哪些?

    安装Linux内核源码是进行内核开发、驱动编写或系统定制的基础工作,整个过程需确保系统环境兼容、操作步骤规范,以下是详细操作流程,涵盖环境准备、源码下载、解压配置等关键环节,环境准备在安装内核源码前,需确保系统已安装必要的编译工具和依赖库,否则后续编译或配置时可能报错,不同Linux发行版的依赖安装命令存在差异……

    2025年8月30日
    9200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信