macOS开荒

环境配置

登陆

  • ~/.zprofile:打开GU应用或Terminal时,自动从该文件中加载一次系统环境变量,直至本次进程结束
    • .zprofile修改,GUI需重新登陆生效、CLI需重启或source ~/.zprofile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
############################################
# ~/.zprofile
# Login shell: GUI & CLI 通用的系统环境变量
# GUI: Graphical User Interface 图形用户界面
# CLI: Command Line Interface 命令行界面 = Terminal 终端
############################################

### Homebrew 环境
if [ -x /opt/homebrew/bin/brew ]; then # 若文件存在且可执行
eval "$(/opt/homebrew/bin/brew shellenv)"
fi

### Python 路径
PYTHON_BIN="/opt/homebrew/opt/python@3.14/libexec/bin"
if [ -d "$PYTHON_BIN" ]; then # 若文件目录存在
export PATH="$PYTHON_BIN:$PATH"
fi

### Java (OpenJDK)
JAVA_HOME_DIR="/opt/homebrew/opt/openjdk"
if [ -d "$JAVA_HOME_DIR" ]; then
export JAVA_HOME="$JAVA_HOME_DIR"
export PATH="$JAVA_HOME/bin:$PATH"
fi

交互

  • ~/.zshrc:每打开一个Terminal的新标签页都会执行,适合设置命令行工具、提示符、自动激活工具
    • .zshrc修改,CLI需重启或source ~/.zprofile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
############################################
# ~/.zshrc
# Interactive shell: Terminal 配置
############################################

########## CLI 专用变量 ##########
# 代理
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

# 自定义变量
export GH="$HOME/workspace/github"
export HS="$HOME/workspace/hexo-site"


########## PATH 管理 ##########
# 将指定 path 提前
# prepend_path "$PROJECT_ROOT/bin"
# prepend_path /custom/bin /another/path /opt/tools/bin
prepend_path() {
[ "$#" -lt 1 ] && {
echo "Usage: prepend_path path1 [path2 ...]"
return 1
}

local new_paths=""
for dir in "$@"; do
if [ -d "$dir" ]; then
new_paths="$new_paths$dir:"
else
echo "Warning: $dir does not exist."
fi
done

PATH="${new_paths}${PATH}"
export PATH
}

# CLI 自动去重
export PATH=$(
echo "$PATH" | tr ':' '\n' | awk '!seen[$0]++' | paste -sd ':' -
)


########## 插件 / Hook ##########
# direnv 自动加载项目虚拟环境 (.envrc)
eval "$(direnv hook zsh)"


########## alias & command ##########
# 彩色 ls
alias ls='ls -G'

# 带日志的 rm
rm() {
command rm -i "$@"
echo "[$(date)] Deleted: $@" >> ~/.rm_log
}

# 进入目录自动列出内容
cd() {
builtin cd "$@" && ls
}

# 快速跳转
gh() { cd "$GH/$1"; }
hs() { cd "$HS/$1"; }

包管理

Homebrew

Install

  • Homebrew是macOS上的包管理器,是用于安装、更新、卸载各种开发工具的和软件的命令行工具
  • 使用官方安装脚本:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    • /bin/bash -c:指定使用Bash shell,从字符串$(...)中读取命令并执行
    • curl -fsSL:从GitHub下载官方安装脚本install.sh
      • -f (--fail):入请求失败,直接返回非零退出码
      • -s (--silent):静默模式,不显示进度条、连接信息等冗余输出
      • -S (--show-error):与-s结合使用,当发生错误时显示冗余错误信息
      • -L (--location):若目标URL有跳转,自动跟进最终地址
  • ~/.zprofile中设置环境变量:eval "$(/opt/homebrew/bin/brew shellenv)"
    • eval会自动执行$(...)内的字符串输出:自动将/opt/homebrew/bin中的可执行文件或软链接加入全局变量
    • source ~/.zrofile后,输入brew -v (--version)检查环境变量设置是否成功

Info

  • 使用brew info xxx能够查询到软件包的基础信息、安装状态、依赖项、注意事项和统计信息,以已安装的openjdk为例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
arvin@arvinhwo ~ % brew info openjdk
==> openjdk: stable 25.0.1 (bottled) [keg-only]
Development kit for the Java programming language
https://openjdk.org/
Installed
/opt/homebrew/Cellar/openjdk/25.0.1 (557 files, 389.5MB)
Poured from bottle using the formulae.brew.sh API on 2025-11-26 at 15:29:20
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/o/openjdk.rb
License: GPL-2.0-only WITH Classpath-exception-2.0
==> Dependencies
Build: autoconf ✘, pkgconf ✘
Required: freetype ✔, giflib ✔, harfbuzz ✔, jpeg-turbo ✔, libpng ✔, little-cms2 ✔
==> Requirements
Build: Xcode (on macOS) ✘
==> Caveats
For the system Java wrappers to find this JDK, symlink it with
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS provides similar software and installing this software in
parallel can cause all kinds of trouble.

If you need to have openjdk first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> /Users/arvin/.zshrc

For compilers to find openjdk you may need to set:
export CPPFLAGS="-I/opt/homebrew/opt/openjdk/include"
==> Analytics
install: 79,590 (30 days), 230,715 (90 days), 1,003,295 (365 days)
install-on-request: 34,596 (30 days), 102,135 (90 days), 501,993 (365 days)
build-error: 1,961 (30 days)
  • bottled表示该软件包提供了预编译的二进制包,Homebrew默认优先使用
    • 使用二进制包无需从源码编译安装,需要满足运行依赖项Required
  • keg-only软件包单独存放,安装后不会自动在/opt/homebrew/bin建立全局软链接
    • 这可以避免直接覆盖系统自带同名软件、破坏系统依赖,如openjdk,同时若使用Homebrew安装了多版本的keg-only软件包,也可以手动选择使用哪个版本
  • Analytics是Homebrew的匿名统计数据,反映该软件包的流行程度和稳定性

update

  • 使用brew update拉取最新的软件包列表,会列出可供安装的新软件包和过时的软件包
    • 或使用brew outdated查看可升级的软件包
  • 升级所有可升级的软件包brew upgrade,或升级单个软件包brew upgrade xxx
    • upgrade命令会自动下载新版Bottle、安装新版本、自动执行cleanup,把旧版本移除
    • 若需要保留旧版本,可以在.zprofile中设置export HOMEBREW_NO_INSTALL_CLEANUP=1关闭自动清除

Python3

  • Python3是新一代Python语言和运行环境

    • 使用pip3python3等命令运行
    • pip3是Python3自带的包管理工具(Package Installer for Python)
  • 使用Homebrew安装Python3:brew install python

    • 输入brew info python检查是否成功
  • 从info中得知,Homebrew并未直接将pythonpip等无版本号命令加入全局链接

    • ~/.zprofile中将/opt/homebrew/opt/python@3.14/libexec/bin加入环境变量后,即可使用pippython等命令运行
    • 若同时打开/opt/homebrew/bin/pip3/opt/homebrew/opt/python@3.14/libexec/bin/pip可以发现内容是相同的
1
2
3
4
5
6
7
#!/opt/homebrew/Cellar/python@3.14/3.14.0_1/bin/python3.14
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
if sys.argv[0].endswith('.exe'):
sys.argv[0] = sys.argv[0][:-4]
sys.exit(main())
  • 若项目需要,可在项目根目录创建虚拟环境:python -m venv myenv
    • 虚拟环境能实现在不同项目中使用不同版本的库,避免冲突
    • 手动激活虚拟环境:source myenv/bin/activate;或使用下列dienv工具

Direnv

  • Direnv让目录自己管理环境,进出自动生效/撤销,不污染全局Shell
  • 使用Homebrew安装Direnv:brew install direnv
    • 输入brew info direnv检查是否成功
  • 配置自动识别:echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
    • 放在.zshrc而非.zprofile是为了在新开的tab也能生效
  • 在项目根目录创建.envrcecho 'source ./myenv_path/bin/activate' > .envrc
    • >>追加写入;>覆盖写入
  • 允许.envrcdirnev allow,实现每次进入项目目录,虚拟环境自动激活;离开目录,虚拟环境自动退出

Git

  • Git是一个分布式版本控制系统,用来记录代码历史i、多人协作、管理项目变更

    • 使用git命令运行
  • 使用Homebrew进行安装:brew install git

    • 输入brew info git检查是否成功
  • 其余操作与Windows平台中相同,参见文章Git指南

Node.js

  • Node.js是运行JavaScript的高性能运行环境
    • 使用npm命令安装包,npm是Node.js自带的包管理器(Node Package Manager)
  • 使用Homebrew进行安装:brew install node
    • 输入brew info node检查是否成功

Hexo

  • Hexo是一个快速、轻量的静态博客框架
  • 使用npm命令安装Hexo:npm install -g hexo-cli
  • 操作与Windows平台中相同,参见文章Hexo部署
  • 使用hexo-site % npm list --depth=0查看已安装的插件
  • npm uninstall xxx -save卸载

OpenJDK

  • Open Java Development Kit是Java平台的开源实现,包含Java开发和运行的核心组件
    • 使用java命令运行
  • 使用Homebrew安装:brew install openjdk
    • 也可以使用brew search openjdk搜索可用版本并安装
    • 输入brew info openjdk检查是否成功
  • OpenJDk是keg-only软件,需要在~/.zprofile中设置环境变量
    • source ~/.zrofile后,输入java -version检查环境变量设置是否成功
1
2
export JAVA_HOME="/opt/homebrew/opt/openjdk"
export PATH="$JAVA_HOME/bin:$PATH"

PlantUML

  • PlantUML是一个文字画UML图的工具,内部可以调用Graphviz来排版

    • 使用plantuml运行脚本
    • UML:Unified Modeling Landuage Diagram,统一建模语言图
  • 使用Homebrew安装:brew install plantuml

    • 输入brew info plantuml检查是否成功

Graphviz

  • Graphviz是一个图形布局引擎和绘图库,绘图基础工具
    • 使用dot命令运行脚本
  • 使用Homebrew安装:brew install graphviz
    • 输入brew info graphviz检查是否成功

Tcl/Tk

  • Tlk/Tk是一个跨平台脚本语言和GUI工具包
    • Tcl:Tool Command Language,用于自动化、测试、嵌入式开发,使用tclsh命令运行脚本
    • Tk:Tcl的图形界面库,可快速创建窗口、按钮、文本框等GUI,使用wish命令运行脚本
  • 使用Homebrew安装:brew install tcl-tk
    • 输入brew info tcl-tk检查是否成功

快捷键

系统

  • 锁屏:ctrl+command+q
  • 结束当前应用进程:command+q
  • 卡死时强制退出:command+option+esc
  • 显示或隐藏程序坞command+option+d
  • 切换应用:command +tab
    • 切换上一个应用:command+shift+tab
    • 切换同一个应用的窗口:command+num

窗口

  • 关闭当前窗口:command+w
    • 对应窗口左上角红色圆点,应用转为后台运行,内存不足时自动退出
  • 最小化窗口到程序坞:command+m
    • 对应窗口左上角黄色圆点
  • 进入/退出全屏:ctrl+command+F
    • 对应窗口左上角绿色圆点
  • 隐藏当前应用所有窗口:command+h

截图

  • command+shift+3:截取屏幕到文件
    • command+shift+control+3:截取屏幕到剪切板
  • command+shift+4:截取指定区域到到文件
    • command+shift+control+4:截取指定区域到到剪切板