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如何退出top命令

    Linux系统中,top命令是常用的动态进程监控工具,能够实时显示系统中运行的进程信息,包括CPU占用率、内存使用、进程ID、优先级等参数,用户在使用top查看系统资源占用情况时,往往需要掌握正确的退出方法,以避免操作不当导致终端异常或进程残留,本文将详细介绍Linux退出top命令的多种方式、适用场景及注意事……

    2025年9月23日
    1900
  • 副业月入过万可能吗

    人工智能是模拟人类智能的技术系统;应用于医疗、交通、制造等领域;正深刻改变人类生活和工作方式。

    2025年7月5日
    5000
  • Linux ISO为何必备?

    Linux ISO 是 Linux 操作系统的镜像文件(通常以 .iso 为后缀),包含完整的系统安装程序,用户需将其写入 U 盘、光盘或虚拟机才能启动安装流程,准备工作(关键步骤)下载官方 ISO推荐官网:Ubuntu(ubuntu.com)、CentOS(centos.org)、Debian(debian……

    2025年7月21日
    4500
  • 如何远程安全连接Linux官网服务器?详细操作步骤有哪些?

    连接Linux官网服务器通常指访问Linux内核官网(如kernel.org)、各发行版官网(如Ubuntu、CentOS、Debian等)提供的资源服务器,或通过SSH连接官方提供的开发/测试服务器(如有),以下是具体连接方法及注意事项,涵盖HTTP/HTTPS资源下载、SSH代码访问及FTP镜像获取等常见场……

    2025年10月2日
    900
  • Linux如何查询WebSocket连接状态?

    在Linux环境下查看WebSocket相关状态、连接或流量,通常需要结合系统工具、网络监控工具和特定协议分析手段,WebSocket作为一种基于TCP的全双工通信协议,其排查涉及进程状态、端口监听、网络连接、数据流量等多个维度,以下是具体方法和工具的使用详解,查看WebSocket服务进程与端口监听状态Web……

    2025年10月8日
    500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信