前言(废话)

本来打算在公司偷偷摸摸给星球的用户写一篇编程喵整合 MongoDB 的文章,结果在通过 brew 安装 MongoDB 的时候竟然报错了。原因很简单,公司这台 Mac 上的 homebrew 环境没有配置好。刚好 Java 程序员进阶之路上缺少这样一篇内容。

所以我就想,不如趁机水一篇吧,啊,不不不,趁机给小伙伴们普及一下 Homebrew 吧!瞧我这该死的大公无私的心(手动狗头)。

不会吧?不会还有人用 macOS 没有安装/配置 Homebrew 吧?

Homebrew 能干什么

Homebrew 的 Slogan :The missing package manager for macOS (or Linux)

Homebrew 这款命令行软件管理神器在 GitHub 上已经有 32.5k+ 的 star 了,功能也真心强大,几乎 macOS 上的软件包它都包了。Homebrew 本身没有问题,问题在于。。。。。不说了,你懂的。

Homebrew 除了是 macOS 的包管理器也可以装在 Linux 上成为 Linux 的包管理器,仅需要执行相应的命令,就能下载安装需要的软件包,省去了下载、解压、拖拽等繁琐的步骤。

用 Homebrew 官方的话来总结就是:安装 Apple(或 Linux 系统)没有预装但你需要的软件。比如说安装 MongoDB,只需要执行以下命令就可以安装,前提条件是环境一定要配置好。

brew install mongodb

简单一条命令,就可以实现包管理,还不用担心依赖/文件路径等问题。

Homebrew 主要由四个部分组成: brew、homebrew-core 、homebrew-cask、homebrew-bottles。

  • brew:Homebrew 的源代码仓库
  • homebrew-core:Homebrew 的核心源
  • homebrew-cask:提供 macOS 应用和大型二进制文件的安装
  • homebrew-bottles:预编译二进制软件包

再来了解一下 Homebrew 的接个核心概念,后续会经常用到。

  • formula(e),安装包的描述文件,带 e 为复数
  • cellar,包安装好后所在的目录
  • bottle,预先编译好的包,不需要再下载源码编译,速度会快很多,官方库中的包大多数是通过 bottle 方式安装的
  • tap,下载源
  • cask(s),安装 macOS native 应用的扩展,可以理解为有图形化界面的应用,带 s 为复数
  • bundle,描述 Homebrew 依赖的扩展

安装配置 Homebrew

世上无难事,只要找到 Homebrew 的正确安装方式。

按理说,Homebrew 的安装方式非常简单,只需要执行官方的一句命令就可以完成安装了。

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

但国内开发者命苦就苦在,经常会因为网络的原因安装失败。原因我只能说这是 https://raw.githubusercontent.com 网站的锅,谁让它访问不稳定呢?

怎么办呢?

必须换一种高效且科学的安装方式,那就是使用镜像安装。 Gitee 上有开源作者提供了一键安装包,只需要执行以下命令就可以了。

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

安装脚本里提供了中科大、清华大学、北京外国语大学、腾讯、阿里巴巴等下载源。

但过来人告诉你,别选其他镜像源,就选中科大,速度杠杠的,40-50M/s,这速度比其他镜像源快多了,对比起来,其他就是蜗牛。

这个安装脚本非常的智能,几乎可以一件帮我们搞定所有问题。

再次感谢 Gitee 上这位大牛,已经 3k star 了,我把地址贴出来:

https://gitee.com/cunkai/HomebrewCN

brew 本体安装成功后,会提示我们配置国内镜像源。

nice,安装完成了。执行下面这几个命令体验下。

  • brew ls 查看本地命令;
  • brew search mongodb 查找软件;
  • brew -v 查看版本;
  • brew update 更新版本;
  • brew install --cask firefox 安装图形化界面软件
  • brew config 查看配置。

brew 和 brew cask 的区别

这里顺带说一下 brew 和 brew cask 的区别,这也是一开始我使用 brew 时困惑的一个点。

以前的版本中,是可以直接 brew cask list 这样执行命令的,现在改成了 brew list --cask

brew 是从下载源码开始,然后编译(不一定,有些有现成的 bottle)解压,通过 ./configure && make install 进行安装,同时会包含相关的依赖库。环境变量也是自动配置的。

brew cask 是下载解压已经编译好了的软件包(.dmg/.pkg),放在统一的目录中,省去了手动去下载、解压、拖拽等蛋疼步骤。

通过 brew search google 我们也可以看得出两者之间的区别。

  • 「Formulae」一般是那些命令行工具、开发库、字体、插件等不含 GUI 界面的软件。
  • 「Cask」就会包含一些 GUI 图形化界面的软件,如 Google Chrome、FireFox 、Atom 等

使用 Homebrew

Homebrew安装配置完成后,我们来实操体验两把。

这里是 homebrew 常用命令的一个清单,可供参考。

命令 描述
brew update 更新 Homebrew
brew search package 搜索软件包
brew install package 安装软件包
brew uninstall package 卸载软件包
brew upgrade 升级所有软件包
brew upgrade package 升级指定软件包
brew list 列出已安装的软件包列表
brew services command package 管理 brew 安装软件包
brew services list 列出 brew 管理运行的服务
brew info package 查看软件包信息
brew deps package 列出软件包的依赖关系
brew help 查看帮助
brew cleanup 清除过时软件包
brew link package 创建软件包符号链接
brew unlink package 取消软件包符号链接
brew doctor 检查系统是否存在问题
brew tap [user/repo] 将开源仓库添加到源

第一把,使用 Homebrew 安装 JDK

作为一名 Java 后端程序员,JDK 是必须要安装的,对吧?

1)执行 brew search jdk 查找有哪些可供安装的 JDK

2)执行 brew install openjdk@17 安装 JDK。

3)但我们在 macOS 上安装了多个版本的 JDK 后,怎么管理它们呢?可以安装一下 jEnv,一个帮助我们管理 JAVA_HOME 的命令行工具,在 GitHub 上已经收获 4.3k 的 star。

GitHub 地址:https://github.com/jenv/jenv

官方文档也非常的简洁大方:

https://www.jenv.be/

安装:

brew install jenv

配置:

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

添加:

jenv add /usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/

JDK 的安装路径可以通过下图的位置查找。

管理:

jenv versions
jenv global 17.0.3

是不是贼方便?再也不用整这 echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc 玩意了!爽,实在是爽!

第二把,使用 Homebrew 安装 MongoDB

先看 MongoDB 的官方文档(当前 release 版本是 5.0,我这里就先用上一个稳定版 4.4):

https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-os-x/

1)拉取 MongoDB 的源

brew tap mongodb/brew

2)更新 brew

brew update

3)安装 MongoDB

brew install mongodb-community@4.4

OK,安装成功。

小结

通过 Homebrew 下载的软件基本上来自于官网,所以大可以放心。而且而且它尽可能地利用了系统自带的各种库,使得软件包的编译时间大大缩短,基本上不会造成冗余。

这里顺带给大家提一则小故事,教别人学算法的大佬可以拿走了:homebrew 的作者去面 Google,被考算法题: 反转二叉树,结果没通过被拒了,

好了好了,今天这篇文章就先水到这吧,我们下期见~


没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟

本文已收录到 GitHub 上星标 2.8k+ 的开源专栏《Java 程序员进阶之路》,据说每一个优秀的 Java 程序员都喜欢她,风趣幽默、通俗易懂。内容包括 Java 基础、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、Nginx、Maven、Intellij IDEA、Spring、Spring Boot、Redis、MySql 等等)、Java 面试等核心知识点。学 Java,就认准 Java 程序员进阶之路

https://github.com/itwanger/toBeBetterJavaer

star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。

好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!的更多相关文章

  1. 解放双手!推荐一款 GitHub 星标 8.2k+的命令行软件管理器,非常酷炫!

    小二是公司新来的实习生,之前面试的过程中对答如流,所以我非常看好他.第一天,我给他了一台新电脑,要他先在本地搭建个 Java 开发环境. 二话不说,他就开始马不停蹄地行动了.真没想到,他竟然是通过命令 ...

  2. springboot实战开发全套教程,让开发像搭积木一样简单!Github星标已上10W+!

    前言 先说一下,这份教程在github上面星标已上10W,下面我会一一给大家举例出来全部内容,原链接后面我会发出来!首先我讲一下接下来我们会讲到的知识和技术,对比讲解了多种同类技术的使用手日区别,大家 ...

  3. WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!

    继 Tabby.Warp 后,今天再来给大家推荐一款终端神器--WindTerm,完全开源,在 GitHub 上已经收获 6.6k 的 star. https://github.com/kingToo ...

  4. github版本库使用详细教程(命令行及图形界面版)

    Git是一个分布式的版本控制系统,作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选 ...

  5. 陋居寡闻,初探Github CLI For Windows,开启命令行撸铁时代

    简介 gh is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to t ...

  6. 好用的Java工具类库,GitHub星标10k+你在用吗?

    简介 Hutool是Hu + tool的自造词,前者致敬我的"前任公司",后者为工具之意,谐音"糊涂",寓意追求"万事都作糊涂观,无所谓失,无所谓得& ...

  7. 【转】Github轻松上手2-如何使用命令行创建和管理repo

    转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzhd.html 如果你对这种怀旧的方式很感冒,不妨参考这里: http://help.github.co ...

  8. Eclipse使用github并开启命令行

    1. 安装EGit插件 2. 导入git项目 选择Import: 选择“Clone URI” 输入想要导入的git项目地址和用户名密码: 选择代码分支: 一路点击next完成导入github项目即可. ...

  9. 神作!阿里首发并发编程神仙笔记,Github已星标92K

    Qzone 微信 神作!阿里首发并发编程神仙笔记,Github已星标92K JAVA超神编程 2020-09-23 21:04:06 JVM 无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎 ...

随机推荐

  1. ElasticSearch 设置某个字段不分词

    先说结论:字段类型更改为 'keyword' elasticSearch官方文档中创建index代码如下 PUT /my_store { "mappings" : { " ...

  2. Android四大组件——Activity——Activity数据回传

    既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity.返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据, ...

  3. ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)

    摘要:介绍在ubuntu16.04中从下载到安装成功的完整步骤.本文给出MATLAB R2017b(Linux系统)的完整安装包百度云盘下载地址,逐步介绍一种简单易行的安装方法,在桌面创建快捷方式,最 ...

  4. AspNetCore配置多环境log4net配置文件

    前言 在之前的文章中有讲到AspNetCore多环境配置文件的应用,我们根据自己多种环境分别配置多个appsettings.$EnvironmentName.json文件. 在实际的开发中我们可能会遇 ...

  5. 保姆级教程:VsCode调试docker中的NodeJS程序

    最近在写NodeJS相关的项目,运行在docker容器中,也是想研究一下断点调试,于是查阅相关资料,最终顺利配置好了. 首先我选择了VsCode作为ide,并用VsCode来做NodeJS可视化deb ...

  6. 谈谈ThreadLocal的应用场景和注意事项?

    特点 ThreadLocal和Sychronized都用于解决多线程间的并发访问,但它们实现的本质方法不同:sychronized利用锁使同一个代码块或变量在某时刻只能被一个线程访问,而ThreadL ...

  7. 1.5 Linux中大量使用脚本语言,而不是C语言!

    说到在 Linux 下的编程,很多人会想到用C语言,Linux 的内核.shell.基础命令程序,也的确是用C语言编写的,这首先证明了一点,C语言很强很通用. 到目前为止,C语言依然垄断着计算机工业中 ...

  8. zipper题解

    -请奆佬们洁身自好,好好打代码从我做起 - 题目大意: 给三个字符串,判断C字符串是否由A B字符串顺序组成, 题意分析: 很容易想到的是,A的长度加上B的长度为C的长度 其实进一步想,这 提供了一个 ...

  9. 用 Python 为接口测试自动生成用例

    用Python为接口自动生成测试用例 基于属性的测试会产生大量的.随机的参数,特别适合为单元测试和接口测试生成测试用例 尽管早在2006年haskell语言就有了QuickCheck来进行" ...

  10. 管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介

    管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介 管家婆 工贸版(标准财务+进销存+生产管理) 1.整体介绍 管家婆工贸版系列软件是针对国内中小型生产加工企业,将ERP管理思想与几十万 ...