macos可通过系统原生命令构建全局软件版本清单:用mdls提取/applications下gui应用的kmditemversion,配合awk解析排序;手动或脚本标注各软件来源及更新方式;导出带时间戳的结构化清单便于比对;补充cli工具、jdk、python等开发环境版本信息。

macOS 没有内置的“全局软件版本中心”,但你可以用一套轻量、可靠、可复现的方法,把所有关键软件的版本号收拢成一份清晰列表——不依赖第三方工具,全用系统原生能力。
查全所有 GUI 应用的当前版本
这是最扎实的起点。系统 Spotlight 已为每个 .app 提取并索引了 kMDItemVersion,直接读取即可,速度快、不漏主干应用:
- 运行命令一次性列出
/Applications下全部应用版本:mdls -name kMDItemDisplayName -name kMDItemVersion /Applications/*.app 2>/dev/null | \ awk '/kMDItemDisplayName/ {name=$3; next} /kMDItemVersion/ {gsub(/"/,"",$3); print name ": " $3}' | \ sort -f - 输出类似:
Chrome: 126.0.6478.127VS Code: 1.90.2Docker: 4.33.0
注意:部分老旧或未签名应用(如某些 Parallels 插件)可能无版本字段,输出为空,属正常现象,不是遗漏。
区分来源,标记更新状态
版本号只是快照,是否需更新,取决于安装渠道。同一份列表里建议手动或脚本加一列“来源/更新方式”,例如:
-
App Store→ 去 App Store → 头像 → “更新”页确认 -
Homebrew Cask→ 运行brew outdated --cask筛出待更项 -
官网下载(如 Postman、Figma Desktop)→ 需进各自菜单栏“检查更新” -
命令行工具(如node,python3,git)→ 分别用node -v,python3 --version,git --version查,再用对应管理器判断:-
brew outdated(Homebrew 安装) -
nvm list-remote && nvm current(Node.js) -
pyenv versions && pyenv version(Python)
-
这样,一份列表就同时承载“当前是什么”和“怎么知道它旧不旧”。
导出结构化清单,支持比对与归档
把版本信息存成带时间戳的纯文本或 CSV,方便后续审计:
-
保存当前快照:
echo "# Generated on $(date)" > ~/Backups/app-versions-$(date +%Y%m%d).txt mdls -name kMDItemDisplayName -name kMDItemVersion /Applications/*.app 2>/dev/null | \ awk '/kMDItemDisplayName/ {n=$3} /kMDItemVersion/ {gsub(/"/,"",$3); print n "," $3}' | \ sort -f >> ~/Backups/app-versions-$(date +%Y%m%d).txt 几天后再运行一次,用
diff或 VS Code 的“比较文件”功能看哪些变了——新增、升级、卸载一目了然。
补充 CLI 工具与 SDK 版本,不遗漏开发环境
GUI 应用只是半壁江山。开发常用工具藏在 PATH 里,需单独采集:
- 常见工具版本:
for cmd in git node python3 java ruby; do if command -v "$cmd" >/dev/null; then ver=$($cmd --version 2>/dev/null || $cmd -version 2>/dev/null) echo "$cmd: ${ver##* }" fi done | sort - JDK 列表(含路径与版本):
/usr/libexec/java_home -V 2>/dev/null | sed 's/Java Home: //; s/^[[:space:]]*//'
- Python 多版本(若用 pyenv):
pyenv versions 2>/dev/null | grep -v '\*' | sed 's/^[[:space:]]*//'
把这些结果合并进主清单,或另存为 cli-versions.txt,就能覆盖绝大多数日常使用场景。
不复杂但容易忽略。











