MacOS 的软件包管理工具 HomeBrew 详解

文章目录

  • 一、软件介绍
  • 二、安装 Homebrew
    • 使用 Ruby 或者 Shell 脚本安装
    • 手动 clone 安装
  • 三、卸载 Homebrew
  • 四、Homebrew 安装目录
  • 五、安装包所在位置
  • 六、程序安装目录
  • 七、软件版本切换
  • 八、清除旧版本文件
  • 九、brew 命令汇总
    • 安装、升级和删除软件包
    • 查看和检验软件包
    • 参考示例
    • 服务相关
    • 故障排除
    • 执行其它功能
  • 十、使用 brew 安装常用软件
  • 十一、brew cask 命令汇总(命令全部作废)
    • 安装、升级和删除软件包
    • 查询和检验软件包
    • 执行其它功能
  • 十二、参考文章

一、软件介绍

Homebrew 是一款 Mac OS 平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。

Homebrew 的主命令是 brew,该命令安装软件是直接下载程序源码然后编译安装,并自动做好必要的配置(如环境变量等)。并且,在安装软件之前,会先安装脚本里指明的相关依赖库。

brew 的底层命令其实是 ./configure && make install

The 3.5.0 release notes are available on the Homebrew Blog:
https://brew.sh/blog/3.5.0
The 3.5.6 changelog can be found at:
https://github.com/Homebrew/brew/releases/tag/3.5.6

二、安装 Homebrew

使用 Ruby 或者 Shell 脚本安装

找了一堆资料,都说执行如下命令语句(也就是HomeBrew官网推荐的安装方式):

配置了环境变量,直接在命令终端输入下面的命令:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

没有配置环境变量则输入下面的命令:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果 MacBook 没有 /usr/bin/ruby 这个程序,怎么搞?可以尝试下面这条命令:

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

或者

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

结果执行命令语句就直接报错,如下:

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443 

原因:这是外网,无法正常访问服务器

如果有 VPN 的用户可以尝试以上方式下载安装。没有 VPN 的国内用户可以使用以下的方式下载安装 HomeBrew(亲测有效):

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

有个家伙推荐以下方式安装 HomeBrew

/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"

我没有试过,我的电脑根本没有 /usr/bin/ruby 这个程序,搞啥呢?

该脚本用了中科大镜像加速访问,仅修改仓库地址部分,不会产生安全隐患。

关于中科大所提供的 Homebrew 镜像服务请点击以下链接查看:
https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git

手动 clone 安装

详见请猛戳《手动 clone 安装 Homebrew》

三、卸载 Homebrew

使用中科大镜像的 Shell 脚本卸载:

/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/uninstall.sh)"

使用中科大镜像的 Ruby 脚本卸载:

/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/uninstall)"

四、Homebrew 安装目录

Homebrew 的安装目录,即 Homebrew 本身的程序文件所在位置。我们通过 which brew 命令,可以发现 brew 命令的可执行文件的路径为 /usr/local/bin/brew,它其实是一个指向 /usr/local/Homebrew/bin/brew 的软链接:

lwxdeMacBook-Air:local lwx$ ls -l bin/brew
lrwxr-xr-x  1 root  admin  28  2  4 21:06 bin/brew -> /usr/local/Homebrew/bin/brew

/usr/local/Homebrew/bin/brew 是个 shell 脚本。用文本编辑软件打开,可以发现它实际上是读取系统使用的 ruby 的路径,来执行 /usr/local/Homebrew/Library/Homebrew/brew.rb

Homebrew 软件本身的各个文件全部 在 /usr/local/Homebrew/ 目录下,其实每个 brew 命令都是一个个的 ruby 脚本,所有命令的 ruby 脚本文件都在目录 /usr/local/homebrew/library/homebrew 下,brew search 就是 /usr/local/homebrew/library/homebrew/search.rb

每个使用 brew 安装的软件都有一个对应的 ruby 脚本,我们称为 Formulabrew install <package_name> 安装命令其实就是读取这个脚本里的配置,下载源码,然后运行配置里写好的编译安装命令。这些脚本放在 /usr/local/homebrew/library/taps/homebrew/homebrew-core/formula 下,使用 brew update 从 github 拉取最新版本的 brew 时,会在命令行运行结束后看到提示,哪些软件有版本更新,新增了哪些软件。

五、安装包所在位置

Homebrew 下载后的软件包放在哪里?网上说存放在/Library/Caches/Homebrew 目录下,我查过了,并没有该目录。所以我也不知道,肯定是在某个目录下。

当你用 brew reinstall <package_name> 重新安装该版本,就不需要重新下载了,它会直接使用已下载的软件进行安装。另外,随着时间推移,缓存的安装包文件越来越多,记得使用命令 brew cleanup 进行清理。

六、程序安装目录

HomeBrew 下载的软件的安装目录为:

/usr/local/Cellar/<package_name>/<version>/

源码编译完成后,生成的文件都会放在这里,如果是直接下载的可执行文件,也会直接放在这里。每个版本的软件都会放在对应版本名称的文件夹下。

一般的软件可能会包含可执行文件、供其它库使用的头文件、运行库、文档等文件或目录,为了方便升级管理。brew 会把这些文件或目录分别软链接到下面的目录中:

/usr/local/bin/
/usr/local/include/
/usr/local/lib/
/usr/local/share/ 
...

如果你用 brew upgrade <package_name> 更新过几次该软件,你所有安装过的版本都会在 /usr/local/Cellar/<package_name>/ 目录下找到。每次升级时,brew 都是先把编译好的可执行文件等存放在当前版本目录下,撤销之前版本的软链接,然后在目录 /usr/local 下创建指向新版本的软链接,这样,我们就会使用到最新版本了。

七、软件版本切换

HomeBrew 更新后的版本不会自动删除,即更新后的软件会有多个版本,所以我们可以通过命令 brew switch <package_name_version> 来切换使用软件的某个具体版本。例如:

brew swith autojump 22.1.4

八、清除旧版本文件

时间久了,你的安装文件会越来越多,那么在 /usr/local/Cellar//Library/Caches/Homebrew 这两个目录下的旧版本软件文件会越来越多,这时候可以用 brew cleanup 清理掉不想用的旧版本,这样会会节省出来大量硬盘空间。如果你不想直接删掉,可以使用 brew cleanup -n 命令,它相当于预演一下,告诉你真正运行 brew cleanup 时会干些什么,而不会真正执行。检查完毕确定可以删除后,你再 brew cleanup 就安全多了。brew 的很多命令都支持 -n 参数,也就是 --dry-run 参数,这些就需要你自己去翻文档了。

九、brew 命令汇总

安装、升级和删除软件包

命令说明
brew install安装指定的软件包
brew uninstall卸载指定的软件包
brew update更新软件包列表
brew upgrade升级指定的软件包
brew cleanup清理老版本。使用 -n 参数,不会真正执行,只是打印出真正运行时会做什么

查看和检验软件包

命令说明
brew list列出所有已通过 brew 命令安装的软件包
brew list --versions查看你安装过的包列表(包括版本号)
brew list --versions <formula>查看已安装的 formual 的版本信息
brew search通过关键字搜索可供安装的软件包,也可以使用正则表达式匹配查找相关的软件包,如 brew search /text//text/ 则是匹配字符串“text”的正则表达式
brew info查看软件包的简要信息
brew outdated查看哪些已安装的程序需要更新
brew deps显示包依赖
brew --prefix查看 homebrew 的安装路径
brew --repo显示 Homebrew 的 git 存储库所在的位置

参考示例

启动 MySQL 服务:

brew services start mysql # macOS重启后也会启动MySQL服务

停止 MySQL 服务:

brew services stop mysql # 停止MySQL服务后,系统重启就不会自动启动MySQL服务了

服务相关

命令说明
brew services list <service_name>显示安装的服务
brew services start/stop/restart <service_name>启动、停止、重启使用 brew 安装的服务

故障排除

命令说明
brew config
brew doctor运行 HomeBrew 医生,查看警告文件
brew install --verbose --debug以调试模式安装指定的软件包

执行其它功能

命令说明
brew link <package_name>将指定软件的当前最新版本软链到 /usr/local 目录下,即在该目录下创建符号链接文件,指向该软件的最新版本
brew unlink <package_name>将指定软件在 /usr/local 目录下的软链接删除
brew switch <package_name_version>切换使用软件的某具体版本。比如,brew swith autojump 22.1.4

注:更多使用说明请输入命令 man brew 查看。

十、使用 brew 安装常用软件

brew install alfred
brew install the-unarchiver
brew install qq
brew install line
brew install skype
brew install thunder
brew install mplayerx
brew install evernote
brew install skitch
brew install dropbox
brew install google-chrome
brew install mou
brew install iterm2
brew install sublime-text
brew install virtualbox

十一、brew cask 命令汇总(命令全部作废)

下面的命令把 brew cask 替换成 brew 即可。

安装、升级和删除软件包

命令说明
brew cask uninstall卸载指定的软件包
brew cask installinstalls the given Cask. 安装指定的软件包
brew cask reinstallreinstalls the given Cask. 重新安装指定软件包
brew cask upgradeupgrades all outdated casks
brew cask zapzaps all files associated with the given Cask. 清除与给软件包相关的所有文件

查询和检验软件包

命令说明
brew cask search查找指定关键词相关的软件包
brew cask infodisplays information about the given Cask
brew cask listwith no args, lists installed Casks; given installed Casks, lists staged files
brew cask outdatedlist the outdated installed Casks. 查看哪些软件包需要更新

执行其它功能

命令说明
brew cask auditverifies installability of Casks
brew cask catdump raw source of the given Cask to the standard output
brew cask createcreates the given Cask and opens it in an editor
brew cask doctorchecks for configuration issues. 检查配置问题
brew cask editedits the given Cask
brew cask fetchdownloads remote application files to local cache. 将远程应用程序文件下载到本地缓存
brew cask homeopens the homepage of the given Cask
brew cask stylechecks Cask style using RuboCop

十二、参考文章

  1. Mac 安装 Homebrew 的正确姿势
  2. Mac 镜像飞速安装 Homebrew 教程
  3. Mac 安装 Ruby 和 Homebrew 看过来
  4. Mac 安装 Homebrew 失败怎么办
  5. Homebrew 国内如何自动安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的深度克隆浅克隆_了解Java中的可克隆接口

java中的深度克隆浅克隆什么是对象克隆&#xff1f; 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程。 克隆的对象在内存中有自己的空间&#xff0c;可在其中复制原始对象的内容。 这就是为什么在克隆后更改原始对象的内容时&#xff0c;所做的更改不会反映在克隆…

python env_#!/usr/bin/env python 有什么用?

我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样#!/usr/bin/python或者这样#!/usr/bin/env python那么他们有什么用呢&#xff1f;要理解它&#xff0c;得把这一行语句拆成两部分。第一部分是 #!第二部分是 /usr/bin/python 或者 /usr/bin/env python关于 #! …

MacBook(macOS) 如何安装 Homebrew Cask(作废)

文章目录重要通知&#xff08;不要再去安装 Homebrew Cask 了&#xff09;Homebrew Cask 简介相关文件和目录Homebrew Cask 安装使用命令下载安装直接从官网下载安装包利用国内源手动 clone下载&#xff08;推荐&#xff09;Homebrew Cask 换源重要通知&#xff08;不要再去安装…

java.io.file()_JAVA基础知识之IO-File类

File类介绍File是java.io包下面的一个类&#xff0c;代表与平台无关的文件或者目录。JAVA中&#xff0c;无论文件还是目录&#xff0c;都可以看作File类的一个对象。File类能对文件或目录新建&#xff0c;删除&#xff0c;获取属性等操作&#xff0c;但是不能直接操作文件内容(…

netflix 模式创新_创新设计模式:单例模式

netflix 模式创新单例设计模式是一种软件设计模式&#xff0c;用于将类的实例化限制为一个对象。 与其他创建设计模式&#xff08;例如抽象工厂 &#xff0c; 工厂和构建器模式&#xff09;相比&#xff0c;单例将创建一个对象&#xff0c;但也将负责&#xff0c;因此该对象只…

美式英语 [t] 的发音

爆破音 true [t]&#xff0c;发真实的 t。 单词的开始处重读音节的开始处&#xff0c;且前面没有跟着清辅音 [s] held 住不发声 叫法很多&#xff0c;声门塞音、吞音、喉塞&#xff08;s&#xff09;音、stop [t]&#xff0c;held [t]&#xff0c;不爆破的 [t]。 发音的口…

设计模式 原型模式_创新设计模式:原型模式

设计模式 原型模式原型模式用于创建对象的副本。 这种模式非常有用&#xff0c;特别是当从头开始创建对象的成本很高时。 与builder &#xff0c; factory和abstract factory模式相比&#xff0c;它不会从头开始创建对象&#xff0c;而是会克隆/重新创建它。 与单例模式相比&a…

java file 对象_Java里File对象的问题。

Java里File对象的问题。关注:282 答案:2 mip版解决时间 2021-02-02 07:14提问者鉨瞞着所囿亾&#xff0c;爱着誰2021-02-01 08:59import java.io.*;在此基础上怎么修改呢&#xff1f; 谢谢啦最佳答案二级知识专家山河已春2021-02-01 10:06import java.io.*;class JavaFileLis…

美式英语中 [d] 的特别发音

闪音 flap [d]&#xff0c;fast [d]&#xff0c;闪音 [d] 发音口腔部位说明&#xff1a;舌尖快速拍打上齿龈后&#xff0c;快速释放&#xff0c;轻快拍打 [d] 在两个元音之间发成 fast [d]&#xff0c;非重读音节在元音和 [l] 之间发成 fast [d]&#xff0c;非重读音节在[r]…

netflix 模式创新_创新设计模式:工厂模式

netflix 模式创新以前&#xff0c;我们对创建模式进行了介绍&#xff0c;并使用抽象工厂模式来创建对象族。 下一个模式是Factory模式 。 当涉及到Java时&#xff0c;工厂模式是最常用的模式之一。 那么工厂模式到底是什么呢&#xff1f; 工厂模式处理创建对象而不指定确切的…

g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解

下面小编就为大家带来一篇Linux下g编译与使用静态库和动态库的方法。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧在windows环境下&#xff0c;我们通常在IDE如VS的工程中开发C项目&#xff0c;对于生成和使用静态库(*.…

家用电器如何计算功率和消耗的度数

计算公式&#xff1a;((U*I)/1000)*t 说明&#xff1a; 这里计算的都是电器的额定功率、额定电压、额定电流。U 是电压&#xff1b;I 是电流&#xff1b;t 是时间&#xff0c;单位是小时&#xff1b;U*I 得到的是电功率&#xff0c;例如电压12v&#xff0c;电流5A&#xff0c;…

构建器设计模式_创新设计模式:构建器模式

构建器设计模式以前我们看过工厂和抽象工厂模式。 这些模式可以达到目的&#xff0c;并且确实有用&#xff0c;但是在某些用例中&#xff0c;我们必须创建一个非常复杂的对象&#xff0c;并且创建它需要不同的步骤&#xff0c;每个步骤都需要不同的操作。 在这种情况下&#xf…

在线maven托管_使用Amazon s3托管您的Maven工件

在线maven托管如果您使用Amazon Web Services并将Java用于项目&#xff0c;则Amazon S3是托管团队工件的理想场所。 它很容易设置&#xff0c;而且很便宜。 如果您对它们的功能不特别感兴趣&#xff0c;那么它比设置现有存储库选项&#xff08;jfrog&#xff0c;nexus&#xf…

英语单词如何看字母划分音节

音节划分是读准单词的基本前提之一&#xff0c;划分音节虽麻烦但熟能生巧&#xff0c;在英语交流或阅读时&#xff0c;经常会碰到不认识的单词或专有名称&#xff0c;如果你懂得了音节的划分&#xff0c;那再难的单词你也会读。 1、音节划分。 英语中以元音来划分音节&#xf…

layui绑定json_JSON绑定:概述系列

layui绑定jsonJSON绑定的Java API&#xff08;JSON-B&#xff09;1.0增强了Java EE平台对JSON数据交换格式的整体支持。 事实证明&#xff0c; 用于JSON处理的Java API&#xff08;JSON-P&#xff09;1.1十分流行&#xff0c;它们共同构成了完美的合作伙伴&#xff0c;填补了Ja…

英文单词的音节分类

绝对开音节 以发音的元音字母结尾的叫绝对开音节&#xff0c;且这个元音字母发的是自己本音。例如&#xff1a;he /hi:/ 和 go /gəu/ 相对开音节 一个辅音字母加上不发音的元音字母&#xff08;通常是字母 e&#xff09;结尾的叫相对开音节&#xff0c;其实就是以不发音的元…

java捕捉了异常_java 异常捕获与异常处理

try{会产生异常的代码}catch(出现异常的类型 e){异常出现后处理的方法}一旦异常出现又没有异常处理&#xff0c;程序就会中断。public static void main(String[] args) {try {int num 10 / 0;System.out.println(num);} catch (ArithmeticException e) {System.out.println(&…

2018年4月13日_Java的最新发展– 2018年4月下旬

2018年4月13日本周Java领域有一些最新的发展&#xff0c;我在本文中总结了其中的一些。 我们知道的JavaOne的终结 Stephen Chin在帖子“ JavaOne活动扩展了更多的曲目&#xff0c;语言和社区&#xff0c;并有了新名称 ”中写道&#xff1a;“ JavaOne会议正在扩展&#xff0c;…

Windows 系统下通过命令将本地文件上传至远程 Linux 主机的指定目录下

这里是借助文件传输客户端 putty 的命令来上传文件。 第一步&#xff1a;下载安装 putty 第二步&#xff1a;通过命令终端进入 putty 的主目录下&#xff0c;即进入 D:\puggy 目录下&#xff0c;该目录下含有多个可执行文件&#xff08;以 .exe 为后缀名的文件&#xff09; 第…