前言(废话)

本来打算在公司偷偷摸摸给星球的用户写一篇编程喵整合 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. Vue基础二之全局API、实例属性和全局配置,以及组件进阶(mixins)的详细教程(案列实现,详细图解,附源码)

    本篇文章主要是写Vue.directive().Vue.use()等常用全局API的使用,vm.$props.vm.$options.vm.$slots等实例属性的使用,以及Vue全局配置.组件的mi ...

  2. Jx.Cms开发笔记(二)-系统登录

    界面 此界面完全抄了BootstrapAdmin css隔离 由于登录页面的css与其他页面没有什么关系,所以为了防止其他界面的css被污染,我们需要使用css隔离. css隔离需要在_Host.cs ...

  3. Docker安装 Ubuntu Centos

    Ubuntu 安装Dokcer 1. 删除旧版本Docker安装包和依赖项 sudo apt-get remove docker docker-engine docker.io containerd ...

  4. git-config配置多用户环境以及 includeIf用法

    git-config配置多用户环境以及 includeIf用法 git-config配置多用户环境以及 includeIf用法 背景 介绍 配置 栗子 背景 开发人员经常遇到这样的问题,公司仓库和个人 ...

  5. Typora使用手册(基础)

    Typora使用手册 第一步,你首先得拥有一个Typora,可通过(https://typoraio.cn/)该网址下载. 第二步,安装并打开. 第三步,让我们开始认识并设置自己的Typora吧~ 什 ...

  6. [Istio是什么?] 还不知道你就out了,一文40分钟快速理解

    @ 目录 前言 Istio是什么? 服务网格是什么? 应用场景 为什么使用Istio? 流量管理介绍 istio架构 Envoy Sidecar Istiod 虚拟服务(VirtualService) ...

  7. [python][flask] Flask 入门(以一个博客后台为例)

    目录 1.安装 1.1 创建虚拟环境 1.2 进入虚拟环境 1.3 安装 flask 2.上手 2.1 最小 Demo 2.2 基本知识 3.解构官网指导 Demo 3.1 克隆与代码架构分析 3.2 ...

  8. 干货 | Nginx负载均衡原理及配置实例

    一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...

  9. viewport布局

    1.viewport实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h ...

  10. 一、全新安装搭建redis主从集群

    前言· 这里分为三篇文章来写我是如何重新搭建redis主从集群和哨兵集群的及原本服务器上有单redis如何通过升级脚本来实现redis集群.(redis结构:主-从(备)-从(备)) 至于为什么要搭建 ...