lsblk 是 linux 中查看磁盘拓扑结构最直接可靠的命令,以树状缩进展示“物理磁盘→分区→加密层→lvm/raid→挂载点”的完整层级关系,支持 -f 显示文件系统与 uuid、-o 自定义字段(必含 pkname 和 type)、-d 聚焦顶层磁盘或指定设备如 /dev/sdb。

lsblk 和 lscpu -e 是 Linux 下查看拓扑映射关系最直接、最可靠的两个命令,分别对应磁盘和 CPU 的物理层级关系。其他“网络拓扑图”类需求在 Linux 命令行中并无原生等价工具——所谓“拓扑图”多是 GUI 工具(如 Windows 网络映射)的视觉抽象,Linux 侧重用结构化数据表达映射逻辑。
查 CPU 物理拓扑:用 lscpu -e 看 socket/core/thread/node 映射
默认 lscpu 输出是汇总统计,看不出每个逻辑 CPU 属于哪个插槽、核心或 NUMA 节点。lscpu -e 才是专为拓扑映射设计的视图,每行代表一个逻辑 CPU(CPU 列),其余列明确标出其物理归属:
-
SOCKET:CPU 插槽编号(从 0 开始),多路服务器中区分物理 CPU -
CORE:该逻辑 CPU 所属物理核心编号(注意:超线程下同一CORE可能对应多个CPU) -
NODE:NUMA 节点编号,决定内存访问延迟和亲和性 -
BOOK和THREAD:较少用,用于更细粒度调度控制
实际使用时建议加列筛选,避免信息过载:
lscpu -e=cpu,socket,core,node
如果输出为空或报错 lscpu: invalid option -- 'e',说明你用的是较老版本(lscpu 2.29+ 才支持 -e),此时只能退回到解析 /proc/cpuinfo,但需手动比对 physical id、core id、processor 字段,容易出错。
查磁盘设备拓扑:用 lsblk 看物理盘→分区→加密→LVM→挂载点的嵌套关系
lsblk 默认以缩进树状结构展示块设备层级,这是唯一无需 root 权限、不依赖分区表完整性就能看清“谁是谁的父设备”的命令:
- 无缩进项(如
sda、nvme0n1)是物理磁盘 - 一级缩进(如
sda1、sda2_crypt)是其直接子设备(分区或加密容器) - 二级缩进(如
ubuntu--vg-root)是 LVM 逻辑卷,挂在sda2_crypt解密后设备之下
关键参数组合:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,PKNAME
其中 PKNAME(父设备名)必须带上——没有它,你无法确认 centos-root 是来自 sda2 还是 nvme0n1p1;TYPE 能区分 disk/part/crypt/lvm,避免把加密层当成真实分区。
查单盘时别用 lsblk | grep sdb,会破坏缩进结构,直接:
lsblk /dev/sdb
查网络接口与路由映射:用 ip addr + ip route 拼出逻辑连接路径
Linux 没有“网络拓扑图”命令,但你可以通过两组命令还原本机在网络中的位置:
-
ip addr告诉你每个接口(ens33、docker0)绑定了哪些 IP、子网、MAC,是否 UP -
ip route告诉你去往不同目标网段时,流量走哪个接口、经由哪个网关
例如执行 ip route get 8.8.8.8,输出类似:
8.8.8.8 via 192.168.1.1 dev ens33 src 192.168.1.100 uid 1000
这说明:访问 8.8.8.8 的包会从 ens33 发出,下一跳是 192.168.1.1(路由器),源地址选 192.168.1.100。这就是你当前网络路径的最小拓扑映射单元。
注意:ifconfig 已被弃用,输出不含路由信息;route -n 是旧接口,ip route 才能正确处理 IPv6 和策略路由。
别指望自动画图:拓扑映射 ≠ 可视化拓扑图
所有 Linux 原生命令输出的都是结构化文本,不是图形。所谓“拓扑映射关系”,本质是设备间的父子隶属(lsblk)、物理归属(lscpu -e)或转发路径(ip route)。试图用 nmap 或 arp-scan 扫描局域网并生成“拓扑图”,结果高度依赖网络环境(防火墙、ARP 表老化、主机响应策略),且无法反映本机内部设备关系。
真正容易被忽略的点是:拓扑映射必须结合上下文才有意义。比如 lscpu -e 中 NODE 0 对应哪块内存插槽?得查 numactl --hardware;lsblk 里 PKNAME 是 sda2,但它是 GPT 还是 MBR 分区?得看 fdisk -l /dev/sda。单一命令永远只给一半答案。











