系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

system_profiler

以文本或 JSON 汇总硬件、系统、存储、显示和外设信息。

补充说明

system_profiler 是“系统信息”App 的命令行版本。传入数据类型名只采集对应部分,例如 SPHardwareDataType、SPSoftwareDataType、SPStorageDataType、SPDisplaysDataType、SPUSBDataType;不带参数会扫描全部,速度很慢。-json 输出机器可读结果,-detailLevel mini 降低细节,-timeout 防止个别外设拖住整次采集。

边界:它依赖 IOKit 驱动和系统服务,SSH、Recovery 或外设休眠时部分字段会缺失;某些网络和存储详情还受权限限制。要实时排查硬件报错,ioreg、log show 更直接;system_profiler 更适合资产盘点、写脚本和给支持人员收集信息。

常用示例

# 1. 机型、芯片、内存和序列号
% system_profiler SPHardwareDataType

# 2. 系统版本、内核版本、启动模式和计算机名
% system_profiler SPSoftwareDataType

# 3. 磁盘容量、文件系统和 APFS 容器
% system_profiler SPStorageDataType

# 4. 转成 JSON 再用 jq 取字段,避免解析本地化文本(jq 需另行安装)
% system_profiler -json SPHardwareDataType | jq '.SPHardwareDataType[0]'

# 5. 快速列出 USB 设备,降低细节以加快速度
% system_profiler -detailLevel mini SPUSBDataType

# 6. 查看有哪些数据类型可采,避免无参数全量扫描
% system_profiler -listDataTypes | head -30

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么脚本里不应直接运行不带参数的 system_profiler?
  2. 要稳定解析硬件信息,应该用文本输出还是 JSON?为什么?
  3. Intel Mac 和 Apple Silicon 在硬件字段上有什么差异,脚本如何兼容?
答案
  1. 不带参数会扫描全部数据类型,耗时长且容易受外设影响;应指定 SPHardwareDataType 等类型。
  2. 用 -json;文本输出的字段顺序、本地化文案和空白都可能变化,JSON 结构更稳定。
  3. Intel 常见 processor_name,Apple Silicon 用 chip;脚本按字段是否存在做回退,不要硬编码单一键。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令