当前位置: 首页 > article >正文

Mac安装brew,支持m芯片,5分钟安装成功亲测有效

 

方式一:普通快速

这种方式适合你使用 Intel 芯片的 macOS,这样就可以了,或者m2以下的芯片,m3芯片不适合这种方式,会报错:尝试再次运行自动脚本选择其他下载源或者切换网络

1. 执行命令: 

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

2. 输入编号选择下载源,最好选择第一个中科大下载源,比较快,而且好像我选择了这个才安装生效

选择完源之后,可能会提示: 

此步骤失败 '尝试再次运行自动脚本选择其他下载源或者切换网络'

这个时候只能老老实实用官方的安装命令安装:

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

出现这个问题主要是因为gitee这个国内源没有同步github上面的最新代码导致的,使用官方这个命令的好处是完美支持最新m芯片,但是缺点就是网速很慢,除非你使用魔法工具。

3.macos的m芯片要安装后续的操作

等待下载安装完成后,重新打开一个命令行工具,然后输入:brew

方式二:M3芯片或提示错误

动图

但如果你使用 Apple 芯片的 macOS(如 MacBook M1/M2/M3 等),那么 Homebrew 会安装在 /opt/homebrew 中,你或许已经在上面的提示信息中看到了一条 Warning,提示你需要将该文件夹添加到环境变量中。

(仅 Apple 芯片需要这一步)为了将 Homebrew 添加到环境变量中,运行以下命令:

$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile

这会将 eval "$(/opt/homebrew/bin/brew shellenv)" 这行命令添加到 ~/.zprofile 中(如果不存在该文件则新建)。~/.zprofile 类似于 ~/.zshrc,但它在登录终端时加载而非每打开一个终端 Tab 就加载一次——你没看懂也无所谓,不是特别重要。

然后,无论你是否使用 Apple 芯片,运行以下命令以确保 Homebrew 在当前终端中生效:

$ eval "$(/opt/homebrew/bin/brew shellenv)"

现在运行 $ brew help,你应当能正常看到提示信息:

使用 Homebrew 安装与卸载程序

在安装 Homebrew 之后,你便可以使用 Homebrew 安装其他程序了。你可以直接在其官网搜索你需要安装的程序。比如在这里搜索 Wget:

在 brew.sh 上搜索软件

——或者直接在命令行里执行 $ brew search wget,一个意思,你可以自己摸索着怎么用。

Homebrew 上可以安装的软件被称为“Formula”——这其实很形象,因为每个在 Homebrew 上可以安装的软件都需要有一个对应的“公式 (Formula)”(或者说“配方”)来描述该怎么安装它,这些“公式”通常就是某个 Ruby 脚本。当然,你如果不理解,直接认为“Formula”就是你要安装的软件就行,比如 Python、Java、Git 等。

✨ 有趣的事实: Homebrew 这个名称本身就很幽默,它的含义是“家酿酒”,而它存放所有安装软件的目录被命名为“Cellar(地窖)”,安装好的一个个软件则被称为“Keg(桶)”,同一软件的不同版本被放在同一个目录,这叫做“Rack(架子)”。这样说的话,其实“Formula”翻译成“配方”更合适,它表明了如何按照步骤“酿造出”一个“Keg”,然后放到“Rack”上。

你可以通过运行 $ brew install <formula> 来安装某个 Formula. 例如下图演示了如何使用 Homebrew 安装与卸载 Wget:

✨ 提示: 这里的  <formula> 用作占位符,你在实际输入命令时需要将其替换为实际值(注意把尖括号  <> 也去掉),比如这里使用的  wget. 下面出现的终端命令也同理。

动图

使用 Homebrew 安装与卸载 Wget

Homebrew 在安装软件后会将必要的命令行工具自动添加到你的环境变量中,这样你就可以直接在终端中运行它们了。比如假设你安装了 Node,就会自动添加 node、 npm 和 npx 命令,在卸载时也会自动移除它们。

✨ 说明: 简单将其理解为“环境变量”可能是比较容易和相对恰当的理解方式,但它其实不完全准确。事实上,Homebrew 将安装软件的可执行文件符号连接(symlink)到  /opt/homebrew/bin/ 目录下,而该目录在环境变量里,这样就可以实现在终端中直接访问这些命令。

如你在上图中看到的,相应的,通过 $ brew uninstall <formula> 你也可以卸载某个通过 Homebrew 安装的 Formula.

Homebrew 的其他常用命令

Homebrew 还有一些其他常用的命令,你可以通过 $ brew help 查看它们的用法。下面列出了一些常用的命令。

更新

除了安装与卸载软件外,我们常常还需要更新它们。Homebrew 提供了 $ brew update 命令来更新 Homebrew 本身,以及 $ brew upgrade 命令来更新已安装的软件。你可以运行 $ brew help update 和 $ brew help upgrade 来查看它们的详细用法。

通常来说,运行以下命令即可更新 Homebrew 以及你当前通过 Homebrew 安装的所有 Formula:

$ brew update && brew upgrade

“钉住”版本

Homebrew 会默认安装软件的较新版本,但有时你可能希望在运行 $ brew upgrade 时不要更新某个特定的 Formula. 此时你可以使用 pin 命令 “钉住”某个 Formula 的版本,这样在运行 $ brew upgrade 时就不会更新它了。

$ brew pin <installed_formula>
✨ 提示: 通过在安装时添加后缀  @<version>,你可以指定安装软件的版本号,如  $ brew install python@3.12.

要“解锁”某个被钉住的软件,可以使用 unpin

$ brew unpin <installed_formula>

livecheck

Homebrew 的版本更新并不总是非常“实时”。你有时可能非常激进,希望在某个软件发布新版本的五分钟之后就立即更新到最新版——此时你可以从软件的“源”(常常是 GitHub 仓库)中直接检查是否有新版本,这个过程被称为“livecheck”.

你可以运行以下命令检查所有安装的 Formula 是否有新版本:

$ brew livecheck --installed

但是如果你发现某个软件的版本更新了,但 Formula 本身还没来得及更新到最新版本怎么办呢?

答案是没什么办法,你只能等 Formula 过几个小时或几天自动更新到最新版本。或者你可以直接去编辑 Formula 文件——但我不建议。

所以我为什么会寻思顺带介绍一下这个命令?我也不知道,但在某些罕见情况下可能对你有用。

列出安装的软件

运行以下命令可以列出你当前通过 Homebrew 安装的所有 Formula:

$ brew list

list 默认不会直接列出版本信息,你可以通过 --versions 选项来显示版本信息:

$ brew list --versions

你可能会奇怪于为什么列出的软件中好像有很多不是你手动安装的,这是因为其中有很多属于你安装的某些软件的依赖——不要尝试强行卸载它们,否则你安装的软件可能会出问题。

unlink && link(安装多个版本的软件并切换)

Homebrew 默认只会安装某个软件的最新版本,但有时你可能需要安装某个软件的多个版本,比如你可能需要同时安装 Node 18 和 Node 20. 此时你可以先使用 unlink 取消链接某个软件版本,然后再使用 link 链接它的另一个版本。

下面展示了使用 Homebrew 管理多个版本的 Node 的过程:

动图封面

使用 Homebrew 管理多个版本的 Node

记得如果要 link 带版本号的 Formula,如 node@18 时,需要在 link 命令后面加上 --overwrite 选项。顺便你不需要在这里加上 --force 选项,对于此类带版本的 Formula,--force 本来就不会起效——它是用于覆盖与系统自带软件冲突的 Formula 的。

你可能觉得这太麻烦了,而且还需要考虑是否需要加上 --overwrite. 事实上你可以通过自定义命令来简化这个过程。例如你可以自定义一个 reset 命令来结合 unlink 和 link 命令。我简单将步骤贴在这里,具体原理可以参见这里:

  1. 首先创建 ~/.homebrew/cmd 文件夹,在其中创建 brew-reset.rb 文件。并使用 $ chmod +x ~/.homebrew/cmd/brew-reset.rb 命令赋予其可执行权限。
  2. 然后在你的 ~/.zshrc 中写入一行 export PATH="$HOME/.homebrew/cmd:$PATH",将该文件夹添加到环境变量中。
  3. 用文本编辑器打开上面创建的 ~/.homebrew/cmd/brew-reset.rb,输入以下内容并保存:
# frozen_string_literal: true#:  * `reset` <installed_formula> [...]
#:
#:  Relink <formula> keg into Homebrew's prefix with `--overwrite`.
#:  This will unlink all versioned symlinks of <formula> first.
#:
#:    -f, --force                      Allow keg-only formulae to be linked.
#:    -v, --verbose                    Make some output more verbose.require "caveats"
require "unlink"def reset_argsHomebrew::CLI::Parser.new donamed_args :installed_formula, number: 1switch "-f", "--force"switch "-n", "--verbose"end
endargs = reset_args.parseoptions = {verbose: args.verbose?,
}keg = args.named.to_latest_kegs[0]
formula = keg.to_formula# Check for keg-only formulae
if Formulary.keg_only?(keg.rack) and !formula.keg_only_reason.versioned_formula?if HOMEBREW_PREFIX.to_s == HOMEBREW_DEFAULT_PREFIX && formula.present? && formula.keg_only_reason.by_macos?caveats = Caveats.new(formula)opoo <<~EOSRefusing to link macOS provided/shadowed software: #{keg.name}#{caveats.keg_only_text(skip_reason: true).strip}EOSKernel.exit 1endif !args.force? && !formula.keg_only_reason.versioned_formula?opoo "#{keg.name} is keg-only and must be linked with `--force`."Kernel.exit 1end
end# Unlink other versioned formulae
Homebrew::Unlink.unlink_versioned_formulae(formula, **options)# Try to unlink main formula if the formula is a versioned one
if formula.keg_only_reason&.versioned_formula?main_formula = beginFormula[formula.name.gsub(/(@[\d.]+)?$/, "")]rescue FormulaUnavailableErrornilendHomebrew::Unlink.unlink(main_formula.any_installed_keg, **options) if main_formula&.linked?
end# Unlink the formula
Homebrew::Unlink.unlink(keg, **options) if formula.linked?# Link the formula
keg.lock doprint "Linking #{keg}... "puts if args.verbose?beginn = keg.link(**options, overwrite: true)rescue Keg::LinkErrorputsraiseelseputs "#{n} symlinks created."end
end

然后重启终端,输入 brew reset --help,如果看到帮助信息就说明好了:

自定义命令 brew reset

这样你就可以通过 $ brew reset <installed_formula> 来重置某个 Formula 以达到切换版本的目的了:

$ node -v
v21.6.0
$ brew reset node@18
Unlinking /opt/homebrew/Cellar/node/21.6.0... 7 symlinks removed.
Linking /opt/homebrew/Cellar/node@18/18.19.0... 2103 symlinks created.
$ node -v
v18.19.0
$ brew reset node
Unlinking /opt/homebrew/Cellar/node@18/18.19.0... 2103 symlinks removed.
Linking /opt/homebrew/Cellar/node/21.6.0... 7 symlinks created.
$ node -v
v21.6.0

清理缓存

Homebrew 有时在安装 Formula 后会留下一部分缓存文件,并且时常因为种种原因在更新 Formula 后没有完全移除旧版本。此时你可以运行 $ brew cleanup 来清除这些陈旧的缓存文件让它们不再占用你的硬盘空间——然而 cleanup 的常规策略是仅清除超过 120 的缓存,而不是“所有”缓存,所以你可能需要使用 --prune=all 选项来清除所有缓存:

$ brew cleanup --prune=all

如果哪天你发现自己的硬盘空间不够了,可以试试这个命令,它可能清理出超出你想象的多的硬盘空间。

安装 GUI 程序(Cask)

我好像漏了什么?如果你更多地了解过 Homebrew,应该知道它除了能够安装 Formula 还能安装另一种程序——Cask.

通常来说,使用 Formula 安装的程序会被存放在某个特定的文件夹(即 /opt/homebrew/Cellar/)下的某个目录里,比如你安装了 fzf 这个 Formula 就会放在 /opt/homebrew/Cellar/fzf/ 目录下。一般来说,对于这些使用 Formula 安装的程序,其大部分数据和文件都存放在这个目录中,比较“干净”,当你删除它时可以删除它的大部分内容——当然一般还是推荐你用 $ brew uninstall 卸载 Formula,这里只是举个例子。

但有些程序是没法通过这种“干净”的方式安装的,这常见于 GUI 程序,比如那些自带一个安装包,打开后要求你将程序拖拽到 /Applications 的软件——比如 Visual Studio Code 或 Google Chrome.

Homebrew 具有管理这些 GUI 程序的能力,它们被称作 Cask. 你也许已经注意到了,Homebrew 的 man 中经常会提及“Formulae and Casks”,使用 $ brew search 时也会将搜索结果分为“Formulae”和“Casks”——这里的 Cask 就是指这些 GUI 软件。

✨ 有趣的事实: “Cask”一词与上面提到过的“Keg(桶,常指小木桶)”类似,其中文含义是“大木桶”。这也是个很形象的词,隐喻了这些 GUI 程序通常较复杂,无法直接存放在“Cellar”目录中的事实。

Homebrew 当前已自带对 Cask 开箱即用的支持。例如你可以直接通过 $ brew install visual-studio-code 安装 VSCode,它会被自动安装到 /Applications 目录下。

我个人不那么习惯于使用 Homebrew 安装 GUI 程序,还是更倾向于手动安装它们——不过这只是个人喜好问题。Homebrew Casks 目前已经几乎没有兼容性问题了,对于程序员常用的那些软件如 VSCode 或 Google Chrome 则更是如此。

Tap(第三方仓库)

Homebrew 官方已经维护了一个相当完善的 Formula 仓库,你基本上可以在其中安装大多数能遇到的软件。然而有时候你可能想安装更多软件——Homebrew 自然也提供了从其他地方“导入”更多 Formula 的方式,也就是通过 brew tap 导入第三方仓库(通常是 GitHub 仓库),这些被导入的仓库就被称为 Tap.

Tap 常常提供了一些额外可以安装的 Formula,或是提供了某些特别的命令。通常 Homebrew 内置的命令已经足够多了,其内置的 Formula 也非常庞大,你不太需要添加自定义 Tap. 这里介绍了少数几个我认为可能有用的 Tap.

你可以运行以下命令列出当前安装的 Tap:

$ brew tap

你可以运行以下命令安装某个 Tap:

$ brew tap <user/repo>

这里的 user/repo 通常是 GitHub 仓库的地址,如 homebrew/cast-fonts.

你也可以使用 untap 来移除某个 Tap:

$ brew untap <user/repo>

homebrew/cask-fonts

你有时可能希望用 Homebrew 安装字体而不是手动下载安装,此时你可以考虑添加 homebrew/cask-fonts 仓库。运行以下命令即可添加它:

$ brew tap homebrew/cask-fonts

该仓库提供了多数程序员常用的字体,如 Fira Code、JetBrains Mono 等,以及它们对应的 Nerd Font 版本。

在安装该 Tap 后,你使用 $ brew search 就可以搜索到这些字体了,也可以通过 $ brew install 安装它们。

rmtree

macOS 是类 Unix 系统,所以 Homebrew 也继承了 Unix 的“优良”传统——包管理器直接用于管理 C/C++ 依赖,这导致有时候安装某个 Formula 会安装下来一大片依赖(常常命名为 libxxx),但你卸载 Formula 时却不会自动卸载它们。你可以试试 rmtree,它提供了递归卸载的功能,可以“干净卸载”某个 Formula:

$ brew tap beeftornado/rmtree

然后你就可以使用 $ brew rmtree <formula> 来安全卸载某个 Formula 以及它的所有依赖了——这只会卸载不被其他 Formula 依赖的那些依赖。

我一般习惯于使用 rmtree 而非 uninstall 来卸载 Formula——当然我不建议所有人都这么干,这可能引入一些额外的风险,因为并不是所有 Formula 都把依赖写清楚的,有时你用 rmtree 可能导致某个没卸载的 Formula 无法正常工作了。不过这个概率比较低,你要是自觉能承受这个风险,那就随你了。

command-not-found

如果你在终端中输入了一个不存在的命令,你可能会看到类似于以下的提示信息:

$ fzf
zsh: command not found: fzf

但是你可能想要一个更加友好的提示——比如告诉你该通过 Homebrew 安装哪个 Formula 才能使用这个命令。这是可行的。你可以运行以下命令自动将 homebrew/command-not-found 添加到 Tap,并提示你如何安装它:

$ brew command-not-found-init

这会提示你在 ~/.zshrc 中加入几行特定的配置以启用这一功能。但比较难绷的是在 Apple 芯片的 macOS 上这个配置里的某个路径是错的。如果你使用的是 Apple 芯片的 macOS,你需要添加这段内容到 ~/.zshrc 中:

# Homebrew tap - command-not-found
HB_CNF_HANDLER="/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh"
if [ -f "$HB_CNF_HANDLER" ]; thensource "$HB_CNF_HANDLER";
fi

然后重启终端,你就可以看到类似于以下的提示信息了:

$ fzf
The program 'fzf' is currently not installed. You can install it by typing:brew install fzf

 

http://www.lryc.cn/news/2415102.html

相关文章:

  • 浅谈网络共享之samba服务
  • CSS预处理语言~~Less安装与使用
  • Java的byte类型详解
  • ICMP协议与ARP协议
  • unity基础(2)——3D对象基础概念与简单操作
  • 发现数学之美--微积分的起源和用途(一文搞懂微积分)
  • QEMU简介
  • 基于微信PC端小程序抓包方法
  • Hex文件解析
  • 超详细一文到底!软件测试基本流程
  • 富文本编辑器汇总
  • 一篇了解使用springSecurity
  • jar包的概念及作用(二)运行jar包、查看jar包内容
  • 推荐开源项目:NSFW Filter — 图片安全性智能检测库
  • 【机器学习】SGD,SGDM,NAG,Adagard,AdaDelta,RMSpro,Adam原理
  • 【Python/绘图】python绘图
  • [计算机效率] 文件搜索工具:Listary(附详细使用教程)
  • IO的详细介绍
  • CPP/C++学习笔记01
  • Evaluation中Percision和Recall的理解
  • Animation 开源项目教程
  • SonarQube代码质量检查平台
  • 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
  • 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
  • Dev-C++/Cpp使用入门详解
  • Angular简介(大神可略过)
  • Linux shell编程学习笔记69: curl 命令行网络数据传输工具 选项数量雷人(中)...
  • gateWay网关组件及工作原理
  • 一次性搞定!思源字体安装、使用及常见问题解答
  • WEBGL原理