☰
x-cmd `x cpu` 模块:跨平台 CPU 信息查询、实时负载统计与字节序检测实战指南
2026/10/14 14:46:13 网站建设 项目流程
  • CLI
  • 开发工具
  • AI Agent
  • 人工智能
  • 包管理器

【免费下载链接】x-cmd

Posix Shell 工具库

项目地址:https://gitcode.com/x-cmd/x-cmd
点击查看免费下载

本文以 mod/cpu/SKILL.md 为骨架,结合 x-cmd 仓库中 模块调度入口、Linux 解析脚本、macOS 采集脚本 等源码实现,系统讲解x cpu的三种核心模式(静态信息、实时负载、二者合一)与字节序检测能力。读完本文,你将掌握如何在 Linux 与 macOS 上通过x cpu一条命令查看 CPU 型号、核心数、频率、缓存、每核实时利用率,并理解其底层数据来源与实现原理,还能在 Apple Silicon 上准确识别 E-core / P-core 的负载归属。


快速上手

x cpu是 x-cmd 的 CPU 扩展模块。安装 x-cmd 之后(安装方式见 README.md,主流 shell 中执行eval "$(curl https://get.x-cmd.com)"即可),直接运行:

# 显示完整 CPU 概览(默认 = 静态信息 + 实时负载) x cpu # 仅显示静态 CPU 硬件信息 x cpu info # 仅显示实时 CPU 负载 x cpu stat # 检测系统字节序(输出 l 或 b) x cpu endianness

该模块由 mod/cpu/latest 注册为___x_cmd_cpu入口,并通过xrc:mod:lib cpu main挂载 mod/cpu/lib/main 作为核心调度逻辑,属于纯 POSIX Shell 实现,无需额外安装运行时依赖。


子命令全景

从 mod/cpu/lib/main 的调度代码可以看到,x cpu支持以下子命令(sum为默认值,不带参数时自动补齐):

命令说明数据来源
x cpu显示完整 CPU 概览(默认,等价于sum)静态信息 + 实时负载
x cpu info仅显示静态 CPU 硬件信息(型号、核心、缓存、频率等)Linux/proc/cpuinfo/ macOSsysctl
x cpu info --simple(或-s)精简模式,只输出最核心字段同上
x cpu stat仅显示实时 CPU 负载(总体 + 每核利用率)Linux/proc/stat/ macOStop+host_processor_info
x cpu endianness(别名endian、endi)检测系统字节序,输出l(小端)或b(大端)macOSsysctl hw.byteorder/ ELF 魔数探测
x cpu -h/x cpu --help查看帮助—

三个主要模式的关系,在调度代码 mod/cpu/lib/main 中一目了然:sum模式下直接依次调用info与stat,实现“静态信息 + 实时负载,一次看全”的效果。

# sum 模式实现(源码节选) ___x_cmd_cpu_sum(){ ___x_cmd_cpu_info "$@" ___x_cmd_cpu_stat "$@" }

模式一:静态硬件信息(x cpu info)

Linux 平台

Linux 下静态信息直接读取/proc/cpuinfo,由 mod/cpu/lib/awk/cpuinfo.awk 完成解析。该脚本以空行分段(RS = "")遍历每个 processor 段落,核心技巧是对多核重复出现的字段做去重合并:同一型号机器上每个核心的model name、vendor_id、cache size等内容完全一致,脚本只保留首次出现的值,避免输出 8 行一模一样的型号信息,同时额外汇总出processor count(逻辑处理器总数)。

输出字段(对应原文档示例):

processor count : 8 processor : 0 model name : Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz cpu cores : 6 cpu MHz : 2600.000 vendor_id : GenuineIntel cache size : 12288 KB

此外,mod/cpu/lib/main 还会读取/proc/meminfo中的MemTotal,以 GB 为单位追加一行memory信息,方便与 CPU 概览一起查看。

macOS 平台

macOS 不使用/proc文件系统,而是通过sysctl读取内核导出的硬件信息。从 mod/cpu/lib/main 可以看出,模块会一次性批量捕获约 50 个sysctl键(hw.logicalcpu、hw.physicalcpu、hw.l1icachesize、hw.perflevel0.*、machdep.cpu.*等),然后交给 mod/cpu/lib/awk/info_macos.awk 格式化输出。

原文档中的 macOS 输出示例:

brand_string : Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz core_count : 6 thread_count : 12 features : FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ ...

相较原文档,仓库实现实际输出的字段更丰富,包括:processor count、physical cores、packages(非精简模式)、model name、vendor_id、cpu family、model、stepping、分级缓存(L1 instruction cache、L1 data cache、L2 cache、L3 cache)、cpu max frequency、cpu min frequency、bus frequency、page size、memory,以及flags/ext flags/arm features等特性位。

--simple 精简模式

info子命令支持--simple(或-s)参数,用于只输出核心字段。从源码看,精简模式会隐藏packages、分级缓存明细、总线频率、页大小以及 ARM 特性列表等扩展信息,保留型号、核心数、主频、缓存、特性位这类最关键字段,适合在脚本中对输出做快速解析。

x cpu info --simple

模式二:实时负载统计(x cpu stat)

Linux 平台

Linux 下实时负载来自/proc/stat的第一行(CPU 总时间片累计值),由 mod/cpu/lib/awk/stat_linux.awk 解析。该行依次为 user、nice、system、idle、iowait 等计数器,脚本将其换算为百分比输出:

cpu user : 12.3% cpu nice : 0.0% cpu system : 4.5% cpu idle : 82.9% cpu iowait : 0.3%

说明:/proc/stat给出的是自开机以来的累计时间片,x-cmd 直接计算累计占比;若需精确的瞬时负载,可结合监控工具做两次采样求差值。

macOS 平台

macOS 的负载统计由两个 Python 脚本协作完成,入口见 mod/cpu/lib/main:

  1. 总体负载:cpu_stat.py调用top -l 2 -n 0 -s 1采样两次,取第二次的CPU usage行解析出 user / sys / idle 百分比(见 mod/cpu/lib/py/cpu_stat.py)。
  2. 每核负载:通过 ctypes 调用系统库host_processor_info(PROCESSOR_CPU_LOAD_INFO),相隔 1 秒采样两次,用差值计算每个核心的 user 与 sys 占比(见 mod/cpu/lib/py/cpu_stat.py)。

特别值得注意的是,源码注释揭示了 Apple Silicon 的一个已知问题:host_statistics与host_processor_info返回的 idle 计数恒为 0,且 idle 被折叠进了 system 计数中,因此脚本在每核输出中将其标注为sys+idle,并做了明确说明。这正是“从源码结构看”可以确认的实现细节。

core 0 : user= 10.2% sys+idle= 89.8% core 1 : user= 3.1% sys+idle= 96.9% ...
  1. E/P 簇空闲率(尽力而为):cpu_io_idle.py通过私有 APIlibIOReport订阅 CPU Stats 通道,输出ecpu idle/pcpu idle两个簇级指标(见 mod/cpu/lib/py/cpu_io_idle.py)。由于该 API 未公开,脚本对任何失败都静默退出,绝不影响上方 user/sys 的正常输出。

Windows 限制:从 mod/cpu/lib/main 可见,x cpu stat在 Windows 上会明确提示stat not supported on Windows并返回错误码,静态信息info与字节序检测不受影响。


Apple Silicon 专属能力:E-core 与 P-core 识别

这是仓库实现超出原文档描述的亮点之一。在 Apple Silicon(M1/M2/M3 等)上,前 2 个核(cpu0、cpu1)为能效核(E-core),其余 8 个核为性能核(P-core)。

  • 静态侧:info_macos.awk解析hw.perflevel0.*与hw.perflevel1.*,通过关键字(efficiency / performance / super)而非索引位置来判断哪个 perflevel 对应哪种核心,并输出performance cores、efficiency cores及其独立 L2 缓存;cpu cores一栏还会附加(4P + 6E)这样的后缀(见 mod/cpu/lib/awk/info_macos.awk)。
  • 动态侧:cpu_stat.py利用调度器注入的X_CPU_PERFLEVEL0_NAME等环境变量(在 mod/cpu/lib/main 中由一次 sysctl 捕获设置),为每核负载行附加(P)/(E)标签,如core 2 (P)。若脚本脱离调度器单独运行,也会自行回退调用 sysctl 获取 perflevel 数据。
  • 频率侧:由于 Apple Silicon 的hw.cpufrequency_max返回 0,模块改用cpu_freq.py通过 IOKitpmgr服务读取voltage-states5-sram(P 核)与voltage-states1-sram(E 核)电压状态表,解算出cpu max frequency与cpu efficiency max freq(见 mod/cpu/lib/py/cpu_freq.py),算法与 fastfetch 的detectFrequency()一致。
# 在 Apple Silicon Mac 上 x cpu # 可看到每核实时负载与 (P)/(E) 归属 x cpu stat # 同上,仅负载部分

字节序检测(x cpu endianness)

字节序(endianness)决定多字节数据在内存中的排列方式,是底层开发、二进制解析、跨平台兼容调试中的常见需求。x cpu endianness输出单一字符:

输出值含义典型架构
l小端序(Little-endian)x86、x86_64、ARM(绝大多数现代系统)
b大端序(Big-endian)部分 MIPS、PowerPC、SPARC

实现原理

从 mod/cpu/lib/main 可以看到两条平台路径:

  • macOS:直接读取sysctl -n hw.byteorder,内核返回的1234映射为l,4321映射为b,其余值视为失败。
  • Linux:采用 ELF 魔数探测法。读取/proc/self/exe(当前进程可执行文件)前 6 字节中的最后一个字节——ELF 头第 5 字节(e_ident[EI_DATA])标记数据编码,1为小端、2为大端;若/proc/self/exe不可用,则回退探测/bin/sh或/bin/bash的 ELF 头。由于用户态程序本身必须与系统字节序一致,该字节序即代表系统字节序。

典型用途

  • 交叉编译与二进制比对时确认目标机字节序;
  • 调试网络字节序与主机字节序转换逻辑;
  • 写跨平台解析脚本时按需选择struct的</>前缀。
x cpu endianness # 输出: l(x86_64 / ARM 等绝大多数环境)或 b(大端环境)

平台差异对照与输出格式

能力LinuxmacOSWindows
静态信息info/proc/cpuinfo+/proc/meminfosysctl(含 perflevel、ARM 特性)未实现stat,info走非 darwin 分支
实时负载stat/proc/stat第一行换算百分比top两次采样 +host_processor_info每核差值明确报错不支持
字节序endiannessELF 头 e_ident[EI_DATA] 探测sysctl hw.byteorder(1234/4321)—
Apple Silicon 专属不适用E/P 核识别、电压状态表频率、libIOReport 簇空闲率不适用

输出格式与终端着色:所有输出统一为标签: 值的%-25s: %s格式,便于脚本按行解析。各 awk / Python 脚本通过tty变量检测标准输出是否为终端(调度器用___x_cmd_is_stdout2tty判断),在终端中会按字段类别着色(如型号/厂商为青色、缓存为黄色、频率为品红、核心数为蓝色),重定向到文件或管道时自动降级为纯文本,不影响管道处理。


模块源码地图

若想深入阅读实现细节,可按以下路径在仓库中继续探索:

  • 模块说明文档:能力描述、命令表、平台说明与字节序对照表
  • 模块入口注册:通过xrc:mod:lib cpu main挂载主逻辑
  • 子命令调度器:sum / info / stat / endianness 的分发与参数解析
  • Linux 静态信息解析:/proc/cpuinfo多核字段去重合并
  • macOS 静态信息解析:sysctl 键映射、E/P 核识别、字节格式化
  • Linux 实时负载解析:/proc/stat五项占比换算
  • macOS 实时负载采集:top 采样与host_processor_info每核差值
  • Apple Silicon 频率检测:IOKit pmgr 电压状态表解析
  • E/P 簇空闲率统计:libIOReport 私有 API 尽力而为采集

整体而言,x cpu在 SKILL.md 定义的“CPU 信息展示 + 字节序检测”基础上,进一步扩展出stat实时负载、--simple精简模式与 Apple Silicon 异构核心深度支持,以纯 Shell + awk + 少量 Python 的组合实现了跨平台、可管道化的统一输出,适合在巡检脚本、系统诊断与硬件信息采集场景中直接使用。

  • CLI
  • 开发工具
  • AI Agent
  • 人工智能
  • 包管理器

【免费下载链接】x-cmd

Posix Shell 工具库

项目地址:https://gitcode.com/x-cmd/x-cmd
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询