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

相关推荐

  • Debian还是Ubuntu选哪个?

    在Linux服务器上使用Telnet进行网络连接或端口测试是一项基础且实用的技能,虽然Telnet本身不加密数据传输(不安全),已逐渐被SSH取代,但它仍是诊断网络服务连通性的有效工具,以下是详细操作指南:Telnet的核心用途测试端口连通性:检查目标服务器端口是否开放(如Web服务80端口、数据库3306端口……

    2025年7月1日
    10500
  • Linux中如何设置或调整屏幕分辨率?

    在Linux系统中调整屏幕分辨率是日常使用中常见的操作,无论是为了适配外接显示器、优化显示效果,还是解决分辨率异常问题,掌握正确的方法都非常重要,Linux下调整分辨率的方式主要分为图形界面操作和命令行操作两种,不同桌面环境和发行版可能存在差异,但核心逻辑相通,本文将详细介绍这些方法,并涵盖驱动配置、多显示器设……

    2025年9月23日
    3.1K00
  • Win7电脑如何安全装Ubuntu双系统?

    在已运行 Windows 7 的电脑上,通过分区备份后安装 Ubuntu,实现双系统启动,启动时可选进入不同操作系统。

    2025年7月24日
    10900
  • 更新软件源有什么用?

    在Linux系统中安装SSH(Secure Shell)是远程管理服务器的关键步骤,以下为详细操作指南,涵盖主流发行版安装、配置优化及安全加固,所有命令均需root权限(使用sudo -i或sudo前缀),安装SSH服务Debian/Ubuntu 系# 安装OpenSSH服务端apt install opens……

    2025年7月26日
    10900
  • Linux系统如何正确高效地打补丁?详细步骤与操作方法指南

    在Linux系统中,打补丁是维护软件安全性、修复漏洞或更新功能的重要操作,补丁本质上是包含源代码修改差异的文本文件,通过特定工具将差异应用到原始代码中,实现软件的更新,本文将详细讲解Linux环境下打补丁的完整流程,包括补丁的获取、验证、应用及冲突处理等内容,帮助用户掌握这一核心技能,补丁的基础概念与类型补丁……

    2025年8月29日
    10700

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信