← 专题目录

第 3 章 终端、Homebrew 与命令行

2026-10-03 约 12 分钟

macOS 底下是个完整的 Unix。终端不是给程序员专用的附加功能,它是系统自带的、跟图形界面平级的入口。 很多在设置面板里翻半天找不到的东西,一条命令就解决了。

这一章从「终端在哪、默认 shell 是什么」讲到 Homebrew 安装、PATH 原理,最后给一张从 Windows 命令行的对照表。

一、终端在哪,默认用什么 shell

终端.app 在 /Applications/Utilities/(实用工具文件夹), 最快是 ⌘Space 输「终端」回车。

从 macOS Catalina 开始,默认 shell 从 bash 换成了 zsh。 查当前用的是哪个:

echo $SHELL
# 一般输出 /bin/zsh

# 查版本
zsh --version

配置文件的读取顺序

这是最容易搞混的地方。zsh 启动时按顺序读这几个文件,后读的会覆盖前面:

  1. /etc/zshrc——系统级,不要改。
  2. ~/.zshenv——每次启动都读,包括非交互场景。环境变量放这里。
  3. ~/.zprofile——登录 shell 时读一次。Homebrew 的 PATH 官方建议写这里。
  4. ~/.zshrc——交互式 shell 每次打开都读。别名、提示符、插件写这里。
  5. ~/.zlogin——登录 shell 最后读。

实际使用中,90% 的情况只需要管 ~/.zshrc 和 ~/.zprofile 两个文件。 改完要生效:

source ~/.zshrc

二、Homebrew:macOS 的包管理器

Homebrew 解决的是「装命令行工具」这件事。没有它,你要自己下源码、编译、处理依赖; 有了它,brew install 一行搞定,卸载也干净。

安装

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

装完必须做的一步:把 brew 加进 PATH

这一步漏掉,后面所有 brew 命令都会报 command not found。 而且 Apple 芯片和 Intel 机器的路径不一样:

机型 安装前缀
Apple 芯片(M 系列) /opt/homebrew
Intel /usr/local
# Apple 芯片
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

# Intel
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"

# 验证
brew --prefix
brew doctor

brew --prefix 输出 /opt/homebrew 就对了。 brew doctor 会检查环境问题,有警告不一定都要处理,但报 Warning: /usr/local/bin is not writable 这类要看一下。

常用命令

brew install wget            # 装命令行工具
brew install --cask firefox  # 装图形界面 App
brew search 关键词           # 搜索
brew list                    # 已装的
brew outdated                # 哪些有新版本
brew upgrade                 # 全部升级
brew upgrade wget            # 只升级某个
brew uninstall wget          # 卸载
brew cleanup                 # 清理旧版本缓存
brew services list           # 后台服务状态
brew services start nginx    # 启动服务并设为开机自启

# 查看 brew 装的东西占了多大
du -sh $(brew --prefix)

brew 一律不要加 sudo。 加了 sudo 会让文件属主变成 root,之后 brew 会因为权限混乱拒绝工作, 修起来要 sudo chown -R 一大串。官方文档里明确写了不要用 sudo。

三、PATH 到底是什么

「command not found」是新手遇到最多的报错,九成跟 PATH 有关。

PATH 是一串用冒号分隔的目录。你在终端输一个命令名,系统就按顺序去这些目录里找同名可执行文件, 找到第一个就用那个。

# 看当前 PATH(冒号分隔,读起来费劲)
echo $PATH

# 展开成一行一个,好读
echo $PATH | tr ':' '\n'

# 查某个命令实际用的是哪个文件
which python3
type -a python3     # 列出所有同名命令

# 临时加一个目录(只在当前窗口有效)
export PATH="/my/tool/bin:$PATH"

注意 $PATH 放在后面还是前面决定了优先级: export PATH="/new:$PATH" 是新目录优先,export PATH="$PATH:/new" 是原有优先。 想覆盖系统自带的同名命令,必须放前面。

zsh 的一个坑:hash 缓存

zsh 会缓存命令路径。如果你刚装了一个新版本的同名工具,可能还在用旧的。

hash -r      # 清掉缓存
rehash       # 等价

四、sudo 和权限

sudo 是「以 root 身份执行这一条命令」。它会要你输自己的密码(不是 root 密码,macOS 默认没有 root 密码)。

  • sudo 只对这一条命令有效,不是进入 root 模式。
  • 连续用 sudo 会有一小段时间免密(默认 5 分钟)。
  • 想开一个 root shell 用 sudo -s,但不建议——忘了自己在 root 里,一条 rm -rf 就能毁掉系统。
  • 输密码时屏幕不显示任何字符(连星号都没有),这是正常的,照打回车。
# 查自己是不是管理员
groups
# 输出里有 admin 就是

# 给某个用户加管理员
sudo dscl . -append /Groups/admin GroupMembership 用户名

五、Windows 命令行对照

要做的事 Windows macOS
列目录 dir ls -la
切换目录 cd /d D:\x cd /Volumes/x
查 IP 配置 ipconfig /all ifconfig
测连通 ping -n 4 h ping -c 4 h
查端口占用 netstat -ano lsof -i :8080
查进程 tasklist ps aux
结束进程 taskkill /PID n kill -9 n
刷 DNS 缓存 ipconfig /flushdns sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
用默认程序打开 start 文件 open 文件
复制输出到剪贴板 clip pbcopy
从剪贴板粘贴 — pbpaste
清屏 cls clear 或 ⌘K
查文件类型 assoc file 文件名

六、日常最常用的十几条

# 当前目录打开访达
open .

# 用某个程序打开
open -a "Visual Studio Code" 文件.txt

# 递归找文件
find . -name "*.log" -mtime -1

# 找内容(比 grep -r 快)
grep -rn "关键词" --include="*.py" .

# 看目录一共多大,按大小排序
du -sh * | sort -h

# 看磁盘剩余
df -h /

# 系统日志(最近 5 分钟)
log show --last 5m --predicate 'process == "kernel"'

# 看谁在监听端口
lsof -iTCP -sTCP:LISTEN -P -n

# 下载文件
curl -O https://example.com/file.zip

# 看 HTTP 响应头(排查缓存/CDN 时用)
curl -I https://example.com

# 压缩成 zip
zip -r 结果.zip 目录/

# 解压
unzip 结果.zip

# 算文件哈希
shasum -a 256 文件名

七、几个能省事的终端技巧

  • 拖文件进终端 = 自动填完整路径。不用手打带空格的路径。
  • Tab 补全,连按两次列出所有可能。
  • Ctrl+R 反向搜索历史命令,输几个字母就能找到上次那条。
  • !! 重复上一条命令。sudo !! = 用 sudo 重跑上一条(忘记加 sudo 时用)。
  • Ctrl+A 跳到行首,Ctrl+E 行尾,Ctrl+U 删到行首,Ctrl+W 删一个词。
  • ⌘K 清屏(比 clear 更彻底,连滚动缓冲一起清)。
  • ⌘T 新标签页,⌘⇧[ / ⌘⇧] 切标签。
  • 右键标题栏可以改标签页名字,几十个窗口时有用。

八、想更好看点就装个 iTerm2

系统自带的终端够用,但如果每天要开十几个标签,iTerm2 值得一装:

brew install --cask iterm2

它的好处是分屏(⌘D 竖分、⌘⇧D 横分)、搜索(⌘F)、 粘贴历史、以及可以给每个配置不同配色。

再往上一层是 Oh My Zsh(主题和插件管理)或者更轻的 starship(提示符)。 这两个不是必需,装了会让提示符显示 git 分支、当前目录、命令耗时。

# 轻量方案:starship
brew install starship
echo 'eval "$(starship init zsh)"' >> ~/.zshrc

下一章:软件的安装、卸载与放行 →