目的:把 Mac 上"终端里能用的工具从哪来、优先级如何、怎么自查"整理成一份备忘。


1. Git

  • 当前 Gitgit version 2.50.1 (Apple Git-155)
  • 可执行位置/usr/bin/git
  • 来源:Apple / Xcode Command Line Tools(CLT)
  • CLT 路径/Library/Developer/CommandLineTools

结论:

  • 这是命令行工具,不是 GUI 应用,所以不会出现在「启动台」。
  • 更新方式:随 macOS / Xcode / Command Line Tools 更新而更新(不是像 brew 那样单独升级)。

自查命令:

1
2
3
git --version
which git
xcode-select -p

2. Python / Conda

终端提示符有 (base),conda 环境只有一个:

  • Conda 发行版:Miniforge(以 Cask 安装)
  • base 环境路径/opt/homebrew/Caskroom/miniforge/base
  • 当前默认 python/pip(因 PATH 优先级):
    • python/opt/homebrew/Caskroom/miniforge/base/bin/python
    • python3/opt/homebrew/Caskroom/miniforge/base/bin/python3
    • pip/opt/homebrew/Caskroom/miniforge/base/bin/pip
    • pip3/opt/homebrew/Caskroom/miniforge/base/bin/pip3
  • 系统也有
    • python3/usr/bin/python3
    • pip3/usr/bin/pip3
    • 但由于 conda 路径在 PATH 更前面,日常默认使用 conda 的 python/pip。

conda 的状态:

  • conda 在 shell 中既是一个函数(来自 ~/.zshrc),也有多个可执行文件路径。
  • 这是 conda 初始化脚本的常见表现。

自查命令:

1
2
3
conda env list
conda list
type -a python python3 pip pip3 conda

3. Homebrew(命令行包管理器)

3.1 手动安装的顶层包

brew leaves 输出只有:

  • node
  • tree

这通常意味着:

  • 真正"自己装来用"的命令行主工具基本就是 Node.js 和 tree
  • brew list 里看到的一大堆(cairo/pango/libpng/... 等)多为依赖库/被间接安装的组件

自查命令:

1
2
3
4
brew leaves
brew list
brew list --cask
brew uses --installed <包名>

3.2 Homebrew 是否"只在 base 环境里可用"?

不是。Homebrew 是系统级安装在 /opt/homebrew(Apple Silicon 常见路径)。在 base 环境也能用 brew/tree 的原因是:PATH 里包含 /opt/homebrew/bin

验证命令:

1
2
3
4
5
type -a brew tree
which brew
which tree
conda deactivate
type -a brew tree

4. OrbStack(Docker / Kubernetes 命令来源)

PATH 里有 /Users/xiang/.orbstack/bin,该目录中包含:

  • docker
  • docker-compose
  • docker-credential-osxkeychain
  • kubectl
  • orborbctl

结论:当前的 docker / kubectl 很可能优先来自 OrbStack(取决于 PATH 排序)。

自查命令:

1
2
3
4
which docker
which docker-compose
which kubectl
type -a docker kubectl

5. PATH 优先级

当前 PATH(按优先级从高到低):

  1. /opt/homebrew/Caskroom/miniforge/base/bin ← conda base 的命令(python/pip 等)
  2. /opt/homebrew/Caskroom/miniforge/base/condabin
  3. /opt/homebrew/bin ← Homebrew 命令(brew、tree、node 等)
  4. /opt/homebrew/sbin
  5. /usr/local/bin
  6. /System/Cryptexes/App/usr/bin
  7. /usr/bin
  8. /bin
  9. /usr/sbin
  10. /sbin
  11. /opt/pmk/env/global/bin ← 非典型来源,可能是某个环境/工具链的全局 bin
  12. /Library/TeX/texbin ← TeX/LaTeX 工具链(装了 mactex-no-gui
  13. /Users/xiang/.orbstack/bin ← OrbStack 的 docker/kubectl 等

重点记住:

  • 谁在 PATH 前面,谁就"覆盖/优先"
  • 目前:conda base 覆盖系统 python,brew 在其后;OrbStack 在较后但仍可用

快速查看某个命令到底来自哪里:

1
2
type -a <命令>
which <命令>

6. 与命令行相关的 GUI 应用(Homebrew Cask)

  • miniforge(决定 conda / base)
  • orbstack(提供 docker/kubectl 等)
  • mactex-no-gui(带来 /Library/TeX/texbin
  • visual-studio-code(开发编辑器)

查看完整列表:

1
brew list --cask

7. “忘了装了啥"时的推荐排查顺序

  1. 先看 Homebrew 的"顶层包”:
1
brew leaves
  1. 再看 conda base 里装了什么(通常 python 相关在这里):
1
2
conda list
python -m pip list
  1. 再看关键目录里有哪些可执行文件:
1
2
3
ls -1 /opt/homebrew/bin | head -n 80
ls -1 /opt/pmk/env/global/bin 2>/dev/null | head -n 80
ls -1 ~/.orbstack/bin 2>/dev/null | head -n 80
  1. 定位具体某个命令:
1
type -a <命令>

8. 关键结论一句话版

  • Git:Apple Git(CLT 提供,随系统/CLT 更新)
  • Python:主要来自 Miniforge conda base(覆盖系统 python3)
  • Brew 顶层工具:只剩 nodetree(其余多为依赖)
  • Docker/kubectl:很可能来自 OrbStack