Homebrew 简介
Homebrew是一款MacOS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能,类似于CentOS下的apt-get/yum。只需简单的一条指令就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
Homebrew 名称由来
https://zhuanlan.zhihu.com/p/196667957
首先, brew 本身是酿造、酿酒的意思,会用这个字的原因是 homebrew 的安装方式为下载 source code 回来做编译,由于是在自己电脑做 local compile 编译套件,所以这个工具叫做 homebrew 自家酿酒 。
酿酒需要有配方 formula ,当你需要安装套件时,流程就是下 brew 命令去根据配方 formula , 酿造出一桶( keg )酒来。所以 keg 指的是整个编译完成的套件资料夹。
再来,放置套件的位置在 /usr/local/Cellar/ (或**/opt/homebrew/Cellar/**), Cellar 就是地窖,一桶一桶酿好的酒当然要存放在地窖里,所以编译安成的套件资料夹 keg 预设目录在 /usr/local/Cellar/ 。
回到「keg-only 」整个词,字面上意思现在就很清楚,表示这个套件只会存放在桶子里,不会跑出桶子外。实际上的行为是 brew 不会帮你做 symlink 到 /usr/local ,避免你的原生系统内还有一套 readline 而打架,所以提示消息说 readline 套件是 keg-only 。
https://www.zhihu.com/people/morlay
brew cask(木桶) 是对于 brew 的扩展,可以采用 brew 的方式安装图形界面 的软件。brew cask 仅仅是下载解压已经编译好了的应用包 (.dmg/.pkg),并放在统一的目录中( /opt/homebrew-cask/Caskroom ),省掉了自己去下载、解压、拖拽等步骤。
脚本配置安装
https://zhuanlan.zhihu.com/p/98384704
使用作者@Mintimate 配置的脚本安装:
1 $ /bin/zsh -c "$(curl -fsSL 'https://host.mintimate.cn/fileHost/download/MTEyMjMz')"
卸载homebrew:
1 $ /bin/zsh -c "$(curl -fsSL 'https://host.mintimate.cn/fileHost/download/MjIzMzQ0')"
Homebrew 常用命令
安装任意包
1 $ brew install <packageName>
示例:安装node
卸载任意包
1 $ brew uninstall <packageName>
查询可用包
1 $ brew search <packageName>
查看已安装包列表
查看任意包信息
1 $ brew info <packageName>
更新Homebrew
查看Homebrew版本
Homebrew帮助信息
https://www.jianshu.com/p/de6f1d2d37bf
下载的脚本内容:
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 UNAME_MACHINE="$(uname -m) " if [[ "$UNAME_MACHINE " == "arm64" ]]; then HOMEBREW_PREFIX="/opt/homebrew" HOMEBREW_REPOSITORY="${HOMEBREW_PREFIX} " else HOMEBREW_PREFIX="/usr/local" HOMEBREW_REPOSITORY="${HOMEBREW_PREFIX} /Homebrew" fi HOMEBREW_CACHE="${HOME} /Library/Caches/Homebrew" STAT="stat -f" CHOWN="/usr/sbin/chown" CHGRP="/usr/bin/chgrp" GROUP="admin" major_minor () { echo "${1%%.*} .$(x="${1#*.} " ; echo "${x%%.*} " ) " } macos_version="$(major_minor "$(/usr/bin/sw_vers -productVersion) " ) " TIME=$(date "+%Y-%m-%d %H:%M:%S" ) JudgeSuccess() { if [ $? -ne 0 ];then echo '\033[1;31m此步骤失败 ' $1 '\033[0m' else echo "\033[1;32m此步骤成功\033[0m" fi } have_sudo_access () { if [[ -z "${HAVE_SUDO_ACCESS-} " ]]; then /usr/bin/sudo -l mkdir &>/dev/null HAVE_SUDO_ACCESS="$?" fi if [[ "$HAVE_SUDO_ACCESS " -ne 0 ]]; then echo "获取权限失败!" fi return "$HAVE_SUDO_ACCESS " } shell_join () { local arg printf "%s" "$1 " shift for arg in "$@ " ; do printf " " printf "%s" "${arg// /\ } " done } execute () { if ! "$@ " ; then abort "$(printf "Failed during: %s" "$(shell_join "$@ " ) " ) " fi } execute_sudo () { local -a args=("$@ " ) if [[ -n "${SUDO_ASKPASS-} " ]]; then args=("-A" "${args[@]} " ) fi if have_sudo_access; then execute "/usr/bin/sudo" "${args[@]} " else execute "${args[@]} " fi } CreateFolder() { echo '-> 创建文件夹' $1 execute_sudo "/bin/mkdir" "-p" "$1 " JudgeSuccess execute_sudo "/bin/chmod" "g+rwx" "$1 " execute_sudo "$CHOWN " "$USER " "$1 " execute_sudo "$CHGRP " "$GROUP " "$1 " } RmCreate() { sudo rm -rf $1 CreateFolder $1 } git_commit (){ git add . git commit -m "your del" } version_gt () { [[ "${1%.*} " -gt "${2%.*} " ]] || [[ "${1%.*} " -eq "${2%.*} " && "${1#*.} " -gt "${2#*.} " ]] } version_ge () { [[ "${1%.*} " -gt "${2%.*} " ]] || [[ "${1%.*} " -eq "${2%.*} " && "${1#*.} " -ge "${2#*.} " ]] } version_lt () { [[ "${1%.*} " -lt "${2%.*} " ]] || [[ "${1%.*} " -eq "${2%.*} " && "${1#*.} " -lt "${2#*.} " ]] } warning_if (){ git_https_proxy=$(git config --global https.proxy) git_http_proxy=$(git config --global http.proxy) if [[ -z "$git_https_proxy " && -z "$git_http_proxy " ]]; then echo "未发现Git代理(属于正常状态)" else echo "\033[1;33m 提示:发现你电脑设置了Git代理,如果Git报错,请运行下面两句话: git config --global --unset https.proxy git config --global --unset http.proxy " fi } echo ' 033[1;32m开始执行Brew自动安装程序\033[0m [' $TIME '][' $macos_version '] \033[1;36m_____________________________________________________________\033[0m \033[1;36m _ _\033[0m \033[1;36m / /| , ,\033[0m \033[1;36m---/| /-|----------__---_/_---------_--_-----__---_/_-----__-\033[0m \033[1;36m / |/ | / / ) / / / / ) / ) / /___)\033[0m \033[1;36m_/__/___|__/____/___/__(_ ___/____/_/__/__(___(__(_ ___(___ _\033[0m \033[1;36m Mintimate’s Blog:https://www.mintimate.cn \033[0m \033[1;36m_____________________________________________________________\033[0m \033[1;36m作者:Mintimate\033[0m' echo '\033[1;32m 请选择一个下载镜像,例如中科大,输入1回车。 \033[1;33m 1、中科大下载源(推荐) 2、清华大学下载源 3、阿里下载源(cask使用中科大)\033[0m' read "MY_DOWN_NUM?请输入序号: " if [[ "$MY_DOWN_NUM " -eq "2" ]];then echo "你选择了清华大学下载源" USER_HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles USER_BREW_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git USER_CORE_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git USER_CASK_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git USER_CASK_FONTS_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git USER_CASK_DRIVERS_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git elif [[ "$MY_DOWN_NUM " -eq "3" ]];then echo "你选择了阿里下载源" USER_HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles USER_BREW_GIT=https://mirrors.aliyun.com/homebrew/brew.git USER_CORE_GIT=https://mirrors.aliyun.com/homebrew/homebrew-core.git echo "阿里无cask源,使用清华大学cask源" USER_CASK_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git USER_CASK_FONTS_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git USER_CASK_DRIVERS_GIT=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git else echo "你选择了中国科学技术大学下载源" USER_HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles USER_BREW_GIT=https://mirrors.ustc.edu.cn/brew.git USER_CORE_GIT=https://mirrors.ustc.edu.cn/homebrew-core.git USER_CASK_GIT=https://mirrors.ustc.edu.cn/homebrew-cask.git fi echo '==> 通过命令删除之前的brew、创建一个新的Homebrew文件夹 \033[1;36m请输入开机密码,输入过程不显示,输入完后回车\033[0m' export PATH=/usr/local /bin:/usr/bin:/bin:/usr/sbin:/sbinRmCreate ${HOMEBREW_REPOSITORY} echo '==> 删除之前brew环境,重新创建' sudo rm -rf ${HOMEBREW_CACHE} / sudo rm -rf /Users/$(whoami)/Library/Logs/Homebrew/ sudo rm -rf ${HOMEBREW_PREFIX} /Caskroom sudo rm -rf ${HOMEBREW_PREFIX} /Cellar sudo rm -rf ${HOMEBREW_PREFIX} /var/homebrew echo '==> 克隆Homebrew基本文件(brew.git仓库 32M+)' sudo git --version if [ $? -ne 0 ];then sudo rm -rf "/Library/Developer/CommandLineTools/" echo '\033[1;36m安装Git\033[0m后再运行此脚本,\033[1;31m在系统弹窗中点击“安装”按钮 如果没有弹窗的老系统,需要自己下载安装:https://git-scm.com/downloads \033[0m' xcode-select --install exit 0 fi sudo git clone $USER_BREW_GIT ${HOMEBREW_REPOSITORY} JudgeSuccess 尝试切换下载源或者网络 echo '==> 创建brew的快捷方式到系统环境变量' if [[ "$UNAME_MACHINE " == "arm64" ]]; then echo 'arm64架构,自动跳过软链接' else find ${HOMEBREW_PREFIX} /bin -name brew -exec sudo rm -f {} \; sudo ln -s ${HOMEBREW_REPOSITORY} /bin/brew ${HOMEBREW_PREFIX} /bin/brew JudgeSuccess fi warning_if echo '==> 克隆Homebrew Core(Homebrew core仓库 224M+) \033[1;36m此处如果显示Password表示需要再次输入开机密码,输入完后回车\033[0m' sudo mkdir -p ${HOMEBREW_REPOSITORY} /Library/Taps/homebrew/homebrew-core sudo git clone $USER_CORE_GIT ${HOMEBREW_REPOSITORY} /Library/Taps/homebrew/homebrew-core/ JudgeSuccess 尝试切换下载源或者网络 echo '==> 克隆Homebrew Cask(Homebrew cask仓库 248M+) \033[1;36m此处如果显示Password表示需要再次输入开机密码,输入完后回车\033[0m' sudo mkdir -p ${HOMEBREW_REPOSITORY} /Library/Taps/homebrew/homebrew-cask sudo git clone $USER_CASK_GIT ${HOMEBREW_REPOSITORY} /Library/Taps/homebrew/homebrew-cask/ JudgeSuccess 尝试切换下载源或者网络 if [[ "$UNAME_MACHINE " == "arm64" ]]; then echo '==> 配置ARM64架构Homebrew初始化到配置文件' echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zshrc else echo '==> 配置X86架构Homebrew初始化到配置文件' echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.zshrc fi echo '==> 配置国内下载地址' git -C "$(brew --repo homebrew/core) " remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git git -C "$(brew --repo homebrew/cask) " remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git git -C "$(brew --repo homebrew/cask-fonts) " remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-fonts.git git -C "$(brew --repo homebrew/cask-drivers) " remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-drivers.git git -C "$(brew --repo homebrew/cask-versions) " remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask-versions.git source ~/.zshrcecho ' ==> 安装完成,brew版本 ' if version_gt "$macos_version " "10.13" ; then echo "$macos_version " else echo '\033[1;31m检测到你的系统比较老,会有一些报错,请稍等Ruby下载安装; ' fi sudo chown -R $(whoami) ${HOMEBREW_REPOSITORY} HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles echo 'brew -v ' brew -v if [ $? -ne 0 ];then echo ' \033[1;31m失败 留言我看到会回复(附带前面提示“此步骤失败”以及它的前6句) 或者使用手动安装方法(https://www.mintimate.cn/categories/Mac/) 或QQ咨询:198330181(可能会收费) ' ls -al /usr/local echo '--end \033[0m' exit 0 else echo "\033[1;32mBrew前期配置成功\033[0m" fi echo ' ==> brew update ' HOMEBREW_BOTTLE_DOMAIN=${USER_HOMEBREW_BOTTLE_DOMAIN} brew update if [ $? -ne 0 ];then echo ' \033[1;31m失败 留言我看到会回复(附带前面提示“此步骤失败”以及它的前6句) ' else echo " \033[1;32m上一句如果提示Already up-to-date表示成功\033[0m \033[1;32mBrew自动安装程序运行完成\033[0m \033[1;32m国内地址已经配置完成\033[0m 初步介绍几个brew命令 本地软件库列表:brew ls 查找软件:brew search Software(其中SoftWare替换为要查找的软件关键字) 查看brew版本:brew -v 更新brew版本:brew update Formulae(方案库 例如安装Python3) 安装方案库:brew install Python3(其中Python3替换为要安装的软件库名称) 卸载方案库:brew uninstall Python3(其中Python3替换为要卸载的软件库名称) Casks (界面软件 例如谷歌浏览器) 安装软件:brew cask install visual-studio-code(其中visual-studio-code替换为安装的软件名字,例如google-chrome) 卸载软件:brew cask uninstall visual-studio-code(其中visual-studio-code替换为要卸载的软件名字,例如google-chrom " fi