如果你刚换到 Mac,或者正捧着一台新电脑准备配开发环境,十有八九会遇到这么个场景:翻到一篇教程,第一句写着“用 wget 下载某个文件”,你打开终端敲了个wget,系统很不给面子地回一句command not found。
这就是很多 Mac 新手被卡住的第一道坎。wget 在 Linux 世界里几乎是标配,但 macOS 默认只带了curl,并不会帮你把 wget 装好。想把这个缺口补上,最省心、最主流的方式就是先装 Homebrew,然后用一条命令把 wget 请回家。这篇内容就是给 Mac 新手准备的完整操作手册,从为什么要装、怎么装,到中间会踩到的各种报错怎么修,一步步讲透,保证你照着做完能顺利用上 wget。
1. 为什么要用Homebrew装wget
很多刚接触 macOS 的人都会有同一个疑问:系统里不是有curl吗,为什么要费劲再装一个 wget?这个问题的答案,其实也是理解“为什么 Mac 用户普遍依赖 Homebrew”的入口。
1.1 macOS明明自带curl,为什么还要wget
先说实话,日常下载一个文件,curl完全够用。你在终端里敲:
curl -O https://example.com/file.zip文件就能存到当前目录。但 wget 和 curl 的定位不太一样,wget 是“下载工具”,curl 是“网络传输工具”,两者的侧重点决定了它们在实际使用中的体验差异。
wget 有四个非常实用的能力,是 curl 默认不太好实现的:
- 递归下载。wget 可以
-r参数把一个网页下面链接到的资源一层层拉下来,像镜像整个文档站、批量抓取图片,一条命令搞定。 - 断点续传。下载到一半断了,wget 用
-c接着下,不用从头再来。 - 重试机制。网络不稳定时,wget 可以在失败之后自动重试,配合
--tries参数设置次数,适合挂在后台跑批量任务。 - 限速下载。
--limit-rate直接限制下载速度,避免把带宽全吃满,尤其是你在公司网络或共用网络环境里下载大文件时很有用。
另外很多老牌开源项目、Docker 镜像构建脚本、统计分析工具里,写死的都是wget命令。你跟着教程操作,第一步就需要 wget,这时候再临时去查“curl 怎么替代 wget”,完全没必要,装一个一劳永逸。
1.2 Homebrew是什么,为什么Mac新手推荐用它
Homebrew 是 macOS 上最流行的第三方包管理器,社区里常叫它“brew”。你可以把它理解成 macOS 的命令行版“应用商店”,只是它装的不是图形界面 App,而是开发中常用的命令行工具、软件库和服务端程序。
没有包管理器的时候,装一个软件要手动下载源码包、解压、编译、配置环境变量,依赖关系稍微复杂一点就是连环坑。有了 Homebrew,所有流程被压缩成一条命令,软件被统一安装到固定的目录,卸载也干净,不会在系统里留一堆乱七八糟的残留文件。
Homebrew 装 wget 的好处更直接。wget 本身依赖 OpenSSL、libidn2、libunistring 等一批底层库,如果你手动编译,要先解决这些依赖的版本兼容问题,新手在这一步就能劝退。用 brew 安装时,它会自动把依赖一起处理好,你只需要看着终端滚动完,然后就能直接用。
还有一个隐藏优点:Homebrew 是后续安装很多开发工具的入口。你以后想装 nginx、mysql、git、python、node,大概率都会用到 brew。提前把 Homebrew 装好,等于铺好了后面一整条路。
2. Homebrew安装:从零到能跑通
重头戏来了。这一章我会带你一步步把 Homebrew 装好,过程中会涉及芯片类型判断、安装脚本选择、路径配置和权限处理。很多报错都是在这一阶段冒出来的,值得认真看完。
2.1 装之前先确认三件事
第一件事:确认你的 Mac 是 Intel 芯片还是 Apple Silicon 芯片。这一步直接决定 Homebrew 的安装路径和后续 PATH 配置。
打开终端,输入:
uname -m输出x86_64的是 Intel 芯片,输出arm64的是 Apple Silicon(M 系列芯片)。你也可以点击左上角苹果图标 -> 关于本机,处理器一栏看是 Intel 还是 Apple M 系列。
第二件事:确认是否已经安装 Xcode Command Line Tools。Homebrew 安装时需要用到这套命令行工具里的编译器。你可以直接运行安装命令,如果缺少它会自动弹出安装提示,也可以提前手动安装:
xcode-select --install系统会弹窗问你是否安装,点击安装,等待几分钟。如果提示“command line tools are already installed”,说明已经有了,继续下一步即可。
第三件事:确认是否已经装过 Homebrew。可以在终端输入:
brew --version如果返回版本号,说明以前已经装过,可以直接跳到第三部分安装 wget;如果提示command not found: brew,就按照下面的流程走。
2.2 官方安装命令与国内镜像加速方案
Homebrew 官方安装脚本长这样:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"问题在于,整个安装过程要从 GitHub 拉取仓库和安装包,网络状况不好时,很容易卡住,或者直接报Failed to connect to raw.githubusercontent.com port 443: Connection refused。这时候我不建议你硬磕官方脚本,换成国内镜像会顺畅得多。
我自己给新 Mac 配环境时,用得比较顺手的是中科大镜像。安装前先写入环境变量,再执行官方安装脚本:
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这里的环境变量意思是:Homebrew 主仓库、核心仓库、预编译包的下载地址都指向中科大的镜像服务器。这样即使官方地址不能用,镜像站也能把安装包给你。
如果你发现上面命令里curl拉取 GitHub 原始脚本那一步也很慢,可以直接用国内社区维护的 Homebrew 安装脚本。下载执行时,建议先看一眼脚本内容再跑:
/bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"这个脚本会自动识别你的芯片类型、帮你判断本机网络环境,并提供多个镜像源选项。全程就像问答向导一样,选完之后它会自动完成下载、安装、换源等一系列操作,对新手尤其友好。
执行安装时,终端会先提示你输入开机密码(输入时屏幕不会显示字符,这是正常的),然后开始下载 Command Line Tools、拉取 Homebrew 仓库、创建目录,整个过程在镜像源加速下一般 5 分钟左右。如果中途没报错,看到Installation successful!就说明成了。
2.3 安装完成后的三件小事
装完不代表立刻能用。下面这三件事不做好,后面基本都会冒出来问题。
第一件:确认安装路径。Apple Silicon 芯片的 Mac,Homebrew 默认装在/opt/homebrew;Intel 芯片的 Mac,默认装在/usr/local。你可以用命令确认:
brew --prefix看到路径后,后面配置 PATH 就要用它。
第二件:让终端能找到 brew 命令。如果你是 Apple Silicon Mac,安装脚本结束时会提示你运行两行命令把 Homebrew 加入 PATH,类似:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile eval "$(/opt/homebrew/bin/brew shellenv)"其中~/.zprofile是 zsh 的配置文件,写入之后每次打开终端都会自动加载 Homebrew 的环境。Intel Mac 一般不需要额外配置,因为/usr/local/bin已经在 PATH 里了。
第三件:运行自检命令。
brew doctor看到类似Your system is ready to brew的输出,就说明 Homebrew 装得没问题。如果输出了一堆 Warning,不用慌,大多只是建议性质的提示,认真看描述就知道怎么处理,比如告诉你某路径没有写入权限、某个依赖需要更新,按提示操作即可。
3. 用Homebrew安装wget与基本玩法
Homebrew 装好之后,wget 就跟白送一样简单。这一章不仅教你怎么装,还会给你一套可以直接拿走的 wget 常用命令参考。
3.1 一条命令装好wget
直接运行:
brew install wget你会看到终端先输出一串依赖包名称,比如libidn2、libunistring、openssl@3,这是因为 wget 需要这些库才能正常工作,Homebrew 会自动帮你装好。下载预编译包(也叫 bottle)时,速度一般很快,装完会提示你运行wget --version验证。
如果你希望装最新的开发版 wget,可以用--HEAD参数,会从源码编译:
brew install --HEAD wget这个操作耗时较长,而且依赖你的 Xcode 编译器配置。除非你有特殊需求,否则不建议新手用。
有个细节值得注意:安装过程中如果出现Error: wget: undefined symbol或类似编译错误,大概率是 Homebrew 和 Xcode Command Line Tools 版本不匹配导致的。先运行brew update && brew upgrade,把 Homebrew 自身和依赖全部更新一遍,再重装 wget 一般能解决。
3.2 验证安装与最常用的wget命令
装完先验证:
wget --version能看到GNU Wget 1.21.4之类的版本号,说明安装成功。接下来是几个最常用的场景。
普通下载,直接跟 URL:
wget https://example.com/file.zip文件会以 URL 里的名字保存到当前目录,下载过程中会显示进度、速度、剩余时间。
改名保存,使用-O:
wget -O myapp.tar.gz https://example.com/download/latest.tar.gz适合那些 URL 里文件名没有意义的下载链接。
断点续传,使用-c:
wget -c https://example.com/bigfile.iso如果上次下载到一半断了,加上-c会接着下。注意:如果服务器不支持断点续传,wget 会提示改用--continue或者直接重新下载。
镜像整个网站,使用-r -l -np组合:
wget -r -l 2 -np https://docs.example.com/-r开启递归,-l 2限制只抓取两层链接,-np表示不往上爬到上级目录。这个命令常用于把在线文档站拉下来离线阅读。
限速下载:
wget --limit-rate=500k https://example.com/video.mp4单位可以是k(KB/s)、m(MB/s),适合在共享网络环境里避免占满带宽。
3.3 顺手装个wget2?新版本有什么不同
Homebrew 里还有一个 wget2,安装命令是:
brew install wget2wget2 是 wget 的重写版本,最大卖点是支持 HTTP/2、多线程并发下载,理论上速度更快。但要注意,它的命令名是wget2,不是直接替换wget。
什么时候需要 wget2?我个人的看法是,日常脚本和教程里出现的命令几乎都是wget,普通用户没必要追新。老版本 wget 的兼容性更好,网上大量现成的命令直接复制就能用,不折腾。只有当你明确需要 HTTP/2 或者更高并发下载,再去考虑 wget2。
4. 高频报错与一键修复方案
我见过太多人在这一步卡死。Homebrew 安装 wget 本身不难,难的是各种报错信息让人看不懂。这里我把最常见的几类问题整理出来,你遇到报错时可以直接对号入座。
4.1 网络类报错:raw.githubusercontent.com连接失败、克隆超时
典型报错一:
Failed to connect to raw.githubusercontent.com port 443: Connection refused这个错误出现在执行官方安装脚本时,说明你的网络无法访问 GitHub 的原始文件服务器。修复方法是改用国内镜像安装脚本,也就是前面 2.2 小节里的 gitee 脚本,或者提前设置中科大镜像相关环境变量再跑官方脚本。注意要看清楚安装脚本来源是否可靠。
典型报错二:
fatal: unable to access 'https://github.com/Homebrew/brew/': Failed to connect to github.com port 443安装过程中拉取 Homebrew 仓库失败。修复方法是先设置 Git 代理镜像,但这里我不建议新人折腾代理,直接重新用中科大镜像的安装命令,同时执行export HOMEBREW_NO_INSTALL_CLEANUP=1,减少安装时的额外网络请求。
典型报错三:
Cloning into '/tmp/homebrew-homebrew-core'... 然后长时间无反应这是 Git 正在克隆仓库但网络速度极慢。可以先Ctrl+C中断,然后重新执行安装脚本并选择源。
4.2 权限类报错:/usr/local/Homebrew is not writable
这个报错多出现在 Intel Mac、或者之前装过 Homebrew 但后来系统升级过的机器上。因为系统升级后,/usr/local下部分目录的所有权被重置为 root,当前用户没有写入权限了。
典型报错:
Error: /usr/local/Homebrew is not writable.修复方法是把关键目录的所有权还给当前用户,命令里的$(whoami)会自动替换成你的用户名:
sudo chown -R $(whoami) /usr/local/Homebrew /usr/local/Cellar /usr/local/Caskroom /usr/local/bin /usr/local/share /usr/local/var输入密码后,再运行brew --version确认。需要提醒的是,这条命令只适用于/usr/local路径的 Intel Mac。如果你用的是 Apple Silicon Mac,Homebrew 在/opt/homebrew下,通常不会出现这个权限问题,除非你手动改过目录所有权。
4.3 PATH类报错:zsh: command not found
典型场景:安装时明明成功了,重启终端之后再敲brew,提示:
zsh: command not found: brew问题出在 zsh 没有自动加载 Homebrew 的环境变量。Apple Silicon Mac 上修复方法如下:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile source ~/.zprofileIntel Mac 上一般用:
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zprofile source ~/.zprofile配置好之后,关掉终端重新打开,再输入brew --version应该就能正常识别。这类命令找不到的问题,其实不只影响 brew,后面 wget 如果提示command not found,同样要检查 PATH 是不是漏了。
4.4 下载与校验类报错:下载慢、Checksum mismatch
新装 Homebrew 后第一次brew install wget时,经常会遇到“下载慢得像蜗牛”的情况。这是因为 Homebrew 默认去 GitHub 下载预编译包。解决方法是在~/.zprofile里加入镜像源配置:
export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles" export HOMEBREW_NO_AUTO_UPDATE=1其中HOMEBREW_BOTTLE_DOMAIN让 brew 从国内镜像下载软件包,HOMEBREW_NO_AUTO_UPDATE=1禁止每次安装软件前自动检查更新,能明显缩短等待时间。改完之后source ~/.zprofile生效。
另一个典型的下载类报错是:
Error: Checksum mismatch. Expected: 8a1c... Got: 9d4a...意思是你下载到的安装包和官方记录的校验值对不上。多半是之前下载一半的缓存文件损坏了,或者镜像源和官方源文件不同步。修复方法清理 Homebrew 缓存后重试:
rm -rf "$(brew --cache)" brew install wgetbrew --cache会返回 Homebrew 的缓存目录,删掉之后 brew 会强制重新下载,基本都能解决。
5. 日常使用技巧与维护建议
wget 装好之后,除了“能用”还要“用好”。这一章分享几个我实际使用中觉得最值的技巧,以及 Homebrew 的日常维护习惯。
5.1 wget的实用参数组合
很多新手背不住参数,我这里整理一张速查表,用的时候直接查。
| 参数 | 作用 | 示例 |
|---|---|---|
-O | 指定保存的文件名 | wget -O file.tar.gz URL |
-c | 断点续传 | wget -c URL |
-r | 递归下载 | wget -r URL |
-l | 递归下载的最大层级 | wget -r -l 3 URL |
-np | 不递归上一级目录 | wget -r -np URL |
--limit-rate | 限制下载速度 | wget --limit-rate=1m URL |
--tries | 设置最大重试次数 | wget --tries=5 URL |
-b | 后台下载 | wget -b URL |
--user-agent | 伪装请求头 | wget --user-agent="Mozilla/5.0" URL |
-q | 静默模式,不输出日志 | wget -q URL |
后台下载是我使用频率比较高的功能。比如半夜要下一个大文件,终端窗口又不能关,用了-b之后,命令会写入wget-log文件,你可以随时查看进度。日志文件默认生成在当前目录,用tail -f wget-log跟踪下载状态。
镜像整个网站这个功能也值得多说一句,很多工程师喜欢用wget -r -l 1 -np -k -p URL做整站离线备份。其中-k会把页面里的链接从绝对路径改成相对路径,-p会下载页面里引用的图片、CSS、JS 等静态资源。这样拉下来的网站在本地直接双击 HTML 就能正常浏览,非常方便。
5.2 Homebrew日常维护三条命令
Homebrew 跟手机应用商店一样,软件装在本地,但软件列表和版本信息需要经常更新。我的建议是每周抽两分钟做一次维护。
更新软件列表:
brew update升级所有已安装的软件:
brew upgrade清理旧版本和缓存文件:
brew cleanup -n先加上-n看一眼哪些会被清掉,确认没问题再去掉-n正式清理。这样做的好处是避免 Homebrew 目录无限膨胀,尤其是/opt/homebrew/Cellar里堆满旧版本软件时,磁盘空间可能悄悄少了好几个 GB。
如果你用 Homebrew 装了服务类软件,比如 mysql、nginx,还可以用brew services list查看服务状态。这是 Homebrew 另一个隐藏能力,不过和 wget 无关,这里不多展开。
5.3 把wget下载变成习惯的几个场景
wget 不只是“下载文件”的命令,它还能帮你解决几个真实场景里的痛点。
场景一:下载 GitHub Release 里的附件。有时候网页访问慢,直接把附件地址给 wget,配合--tries和-c挂着重试,体验往往比浏览器里傻等好。
场景二:批量下载某个页面里的所有图片。比如一个图集合集页面,运行wget -r -l 1 -nd -A jpg,png URL,-nd表示不创建目录层级,-A指定只下载 jpg 和 png 文件。一圈下来图片全部落进当前文件夹。
场景三:给运维脚本提供稳定的下载源。写自动化脚本时,用wget --timeout=10 --tries=3 -q -O /tmp/installer.sh URL拉取安装脚本,能避免网络波动导致脚本中断。
我个人最常用的其实是断点续传。公司在弱网环境下载几个 GB 的安装镜像,以前浏览器下载一断就要重来,用上wget -c之后就再没犯过愁。
最后再分享一个使用心法:遇到任何报错,先别急着复制到搜索引擎,把终端里的第一行红色Error看完,再顺着往下看文件名、路径、权限这几个关键词,八成问题就定位了。Homebrew 的报错提示写得已经很友好,它往往会直接告诉你“什么东西访问不了”“哪个目录没有权限”。能读懂报错,比会背命令更重要。