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

sw_vers

输出 macOS 的产品名称、版本号和构建号,供脚本判断系统版本。

补充说明

sw_vers 不带参数输出三行:ProductName、ProductVersion、BuildVersion;-productVersion、-buildVersion、-productName 只取对应字段,-productVersionExtra 取快速安全响应(RSR)的后缀(macOS 13.3 起)。它读的是 /System/Library/CoreServices/SystemVersion.plist,与“关于本机”显示的产品版本一致。

边界:sw_vers 给的是 macOS 产品版本,uname -r 给的是 Darwin 内核版本(例如 macOS 14 对应 Darwin 23),两者不能互相推断。脚本比较版本不要用 sort -V,macOS 的 BSD sort 没有这个选项;也不要用构建号反推版本号。

常用示例

# 1. 查看完整信息:产品名、版本、构建号
% sw_vers

# 2. 脚本只取版本号
% sw_vers -productVersion
% sw_vers -buildVersion

# 3. 拼成一行日志头,方便排障记录
% printf '%s (%s)\n' "$(sw_vers -productVersion)" "$(sw_vers -buildVersion)"

# 4. 查看快速安全响应后缀;没有 RSR 时通常为空,旧系统可能不支持该选项
% sw_vers -productVersionExtra

# 5. 直接读系统版本 plist,验证 sw_vers 的数据来源
% defaults read /System/Library/CoreServices/SystemVersion.plist ProductVersion

# 6. 同时对比产品版本与 Darwin 内核版本
% sysctl -n kern.osproductversion kern.osversion
% uname -r

易错点与排错

相关命令

参考链接

读完自测

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

  1. sw_vers -productVersion 和 uname -r 分别返回什么?能互相换算吗?
  2. 为什么脚本里不要用 sort -V 比较 macOS 版本?给出一个替代方案。
  3. -productVersionExtra 有什么用途?没有 RSR 时脚本要注意什么?
答案
  1. 前者是 macOS 产品版本(如 14.6.1),后者是 Darwin 内核版本(如 23.6.0);可以按发布对应关系理解,但不能用命令直接换算。
  2. macOS 的 BSD sort 不支持 -V;可用 awk -F. 逐段数值比较,或 sort -t. -k1,1n -k2,2n -k3,3n。
  3. 返回快速安全响应的后缀(如 (a));没有 RSR 或系统较旧时可能报错,脚本要先判断退出码并准备回退逻辑。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令