Homebrew 让你从 Mac 切换到 Linux 更轻松

无论你是想要更舒服地从 Mac 搬到 Linux,仍是不满意常规的 Linux 包管理器,均可以试试 Homebrew。html

Homebrew 项目最初是为了给 Mac 用户提供一个非官方的 Linux 式的包管理器。用户很快就爱上了它友好的界面以及帮助性的提示,并且,它已经被移植到 Linux 系统 —— 这看起来像是一个奇怪的命运转折。node

一开始,有两个分开的项目分别针对 macOS 和 Linux (Homebrew 与 Linuxbrew),可是如今是由 Homebrew 核心管理着这两个操做系统。因为我正 从 Mac 切换到 Linux,因此一直在研究我在 macOS 最经常使用的开源软件在 Linux 表现如何,最终,我很高兴地发现 Homebrew 对 Linux 的支持太赞了!linux

为何要在 Linux 使用 Homebrew 呢?

长期使用 Linux 的用户对 Homebrew 的第一反应是:“为何不直接使用……呢”,省略号表明他们喜欢的某个 Linux 包管理器。基于 Debian 的系统早就有了 apt,基于 Fedora 的系统则有 dnfyum,而且像 Flatpak 跟 AppImage 这样的项目,在两种系统上都能流畅运行。我花了很多时间尝试这些技术,不得不说,它们都有其强大之处。git

那我为何还要 坚持使用 Homebrew 呢?首先,我对它很是熟悉。在为我过去使用的专有软件寻找开源替代品的过程当中,我已经学会了许多使用方法,而保持一些熟悉的东西,好比 Homebrew,可让我专一于一次学习一件事情,而不是被不一样系统间的差别搞垮。github

此外,我没有看到哪个包管理器像 Homebrew 同样,对用户如此友好。正如默认的帮助命令同样,命令井井有理:shell

$ brew -h
Example usage:
  brew search [TEXT|/REGEX/]
  brew info [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA

Contributing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  <https://docs.brew.sh>
复制代码

过于简短的输出可能会被误解为它功能局限,可是你简单看看每个子命令,都有很丰富的功能。虽然上面的列表只有短短 23 行,但对高级用户来讲,光是子命令 install 就包含整整 79 行的帮助信息:浏览器

$ brew --help | wc -l
23
$ brew install --help | wc -l
79
复制代码

它能够选择忽略或者安装依赖关系,也能够选择用源代码编译以及用什么编译器来编译某个确切的上游 Git 提交,或者选择应用的官方 “灌装” 版。总而言之,Homebrew 即适合新手,也一样能知足老鸟。ruby

开始在 Linux 使用 Homebrew

若是你想要试着使用 Homebrew,能够用这个单行脚本在 Mac 或者 Linux 上进行安装:bash

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

这条命令会当即开始安装 Homebrew。若是你比较谨慎,可使用 curl 将该文件下载到本地,检查完毕以后再运行。app

$ curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh --output homebrew_installer.sh
$ more homebrew_installer.sh # 审核该脚本,直到你以为没问题了
$ bash homebrew_installer.sh
复制代码

对 Linux 的安装步骤还包括如何配置点文件,对于 Debian 系统来讲是 ~/.profile,对于 Fedora 系统是 ~/.bash_profile

$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
复制代码

为了确认已经安装好,Homebrew 团队提供一个空的 hello “秘方” 供测试:

$ brew install hello
==> Downloading https://linuxbrew.bintray.com/bottles/hello-2.10.x86_64_linux.bottle.tar.gz
######################################################################## 100.0%
==> Pouring hello-2.10.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/hello/2.10: 52 files, 595.6KB
复制代码

看起来安装毫无问题,让我来试试更多操做。

命令行工具 Brew

Homebrew 宣称本身是一款默认只 “安装你须要而 [Linux] 没有的东西”的应用程序。

你能够用 brew 命令安装任何打包在 Homebrew 中的命令行软件。这些包的定义文件叫作 “秘方formula”,并且它们经过“瓶子bottle”来编译并分享。在 Homebrew 的世界里,还有许多 “啤酒方面” 的术语,但这个包管理器主要目的是让软件便于使用。

都有些什么样的软件呢?对我这样的技术玩家(既然你已经在读这篇文章,估计你也是)来讲最方便的东西。例如,便利的 tree 命令,能够展现目录结构,或者 pyenv,我用它来 在 Mac 管理不一样版本 Python

你能够用 search 命令查看全部能够安装的“秘方”,在后面加上 wc 命令看看一共有多少:

# -l 选项统计行数
$ brew search | wc -l
    5087
复制代码

迄今为止,一共有 5000 多个 “秘方”,这囊括了不少软件。须要注意的是:并不是全部 “秘方” 都能在 Linux 运行。在 brew search --help 输出中有一节提到能够按软件运行的操做系统来筛选软件。它会在浏览器打开用于每一个操做系统的软件仓库。我运行的是 Fedora,因此我会用它来试一试:

$ brew search --fedora tree
复制代码

浏览器打开了网址 https://apps.fedoraproject.org/packages/s/tree,向我展现了全部 Fedora 的可用选项。你也能够经过其它方法进行浏览。“秘方” 被集中整理到由操做系统划分的核心仓库当中(Mac 在 Homebrew Core,Linux 在 Linux Core)。一样也能够经过 Homebrew API 在网页显示

即便有这些选择,我仍是经过其它用户的推荐找到不少新工具。我列出一些我最喜欢的工具,你能够在里面找点灵感:

  • pyenvrbenvnodenv 用来管理(相应的) Python、Ruby 和 Node.js 版本
  • imagemagick 用于脚本化编辑图片
  • pandoc 用于脚本化转换文档格式(我一般将 .docx 文件转成 .md 或者 .html)
  • hub 为 GitHub 用户提供 更好的 Git 体验
  • tldr 展现了命令工具的使用范例

想要深刻了解 Homebrew,能够去 trldr 页面 看看,比起应用的 man 页面,它要友好得多。使用 search 命令确认你能够安装:

$ brew search tldr
==> Formulae
tldr ✔
复制代码

太好了!对勾说明你能够安装。那么继续吧:

$ brew install tldr
==> Downloading https://linuxbrew.bintray.com/bottles/tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2: 6 files, 63.2KB
复制代码

Homebrew 提供了编译好的二进制文件,因此你没必要在本地机器上从源码编译。这能节省不少时间,也不用听 CPU 风扇的噪声。我很欣赏 Homebrew 的另一点是,你不彻底理解每个选项的含义也不会影响正常使用。若你想本身编译,能够在 brew install 命令后面加上 -s 或者 --build-from-source 标识,这样就能从源码编译 “秘方”(即使已经有一个 “瓶子” 存在)。

一样,软件底层的复杂性也颇有意思。使用 info 能够查看 tldr 软件的依赖管理,“秘方” 的源代码存放在磁盘上的何处,甚至还能查看公开分析。

$ brew info tldr
tldr: stable 1.3.0 (bottled), HEAD
Simplified and community-driven man pages
https://tldr.sh/
Conflicts with:
  tealdeer (because both install `tldr` binaries)
/home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2 (6 files, 63.2KB) *
  Poured from bottle on 2020-06-08 at 15:56:15
From: https://github.com/Homebrew/linuxbrew-core/blob/master/Formula/tldr.rb
==> Dependencies
Build: pkg-config ✔
Required: libzip ✔, curl ✔
==> Options
--HEAD
        Install HEAD version
==> Analytics
install: 197 (30 days), 647 (90 days), 1,546 (365 days)
install-on-request: 197 (30 days), 646 (90 days), 1,546 (365 days)
build-error: 0 (30 days)
复制代码

从 Mac 到 Linux 的一点不足

在 macOS,Homebrew 的 cask(“酒桶”)子命令可让用户使用命令行安装、管理整个应用软件。不幸的是,cask 还不能在任何 Linux 发行版上使用。我在安装一个开源工具时发现了这点:

$ brew cask install tusk
Error: Installing casks is supported only on macOS
复制代码

我在 论坛上 问了一下,很快获得其余用户的反馈。总结一下,方案以下:

  • 复刻 Homebrew 项目,构建这个特性,而后像别人展现其价值
  • 给该软件写一个 “秘方”,而后从源代码编译
  • 为该软件建立一个第三方仓库

最后一个是我最感兴趣的。Homebrew 经过 建立并维护 “水龙头tap (另外一个受啤酒影响的术语)管理第三方仓库。随着你对系统愈来愈熟悉,并想加入生态系统, “水龙头” 是值得研究的。

备份 Homebrew 的安装记录

我最中意的 Homebrew 特性之一就是你能够像其它任何 用版本控制工具来备份点文件 同样备份你的安装记录。为了实现这个目的,Homebrew 提供 bundle(“捆扎”)子命令,它能够控制一个叫 dump(“倾倒”)的子命令生成一个 Brewfile。这个文件包含你目前全部安装的工具列表,能够重复使用。进入你想使用的目录而后运行命令,它会根据你所安装的软件生成 Brewfile

$ cd ~/Development/dotfiles # This is my dotfile folder
$ brew bundle dump
$ ls Brewfile
Brewfile
复制代码

当我换了一台机器,想要安装同样的软件时,进入含有 Brewfile 的文件夹,而后从新安装:

$ ls Brewfile
Brewfile
$ brew bundle
复制代码

它会在个人新机器上安装全部列出的 “秘方”。

在 Mac 和 Linux 同时管理 Brewfile

Brewfile 很是适合备份你目前的安装记录,可是若是某些在 Mac 上运行的软件没法运行在 Linux 呢?或者恰好相反?我发现不论是 Mac 仍是 Linux,若是软件没法在当前操做系统运行,Homebrew 会优雅地忽略那一行。若是它遇到不兼容的请求(好比使用 brew 在 Linux 安装 “酒桶cask” 时),它会选择跳过,继续安装过程:

$ brew bundle --file=Brewfile.example

Skipping cask licecap (on Linux)
Skipping cask macdown (on Linux)
Installing fish
Homebrew Bundle complete! 1 Brewfile dependency now installed.
复制代码

为了保持配置文件的简洁,我在两个操做系统上使用同一份 Brewfile,由于它只安装与操做系统相关的版本,因此我一直没有遇到任何问题。

使用 Homebrew 管理软件包

Homebrew 已经成了我必备的命令行工具,因为我很熟悉它,因此在 Linux 上的体验也充满乐趣。Homebrew 让个人工具井井有理,而且时刻保持更新,我愈发欣赏它在实用性与功能上找到的平衡点。我更喜欢将软件包管理的细节保持在用户须要了解的最小程度,大多数人都会从中受益。若是你已经很熟悉 Linux 包管理器了,Homebrew 可能会让你以为很基础,但稍微深刻一点看,就会发现它的高级选项远远超过本文的内容。

对 Linux 用户来讲,他们有不少包管理器能够选择。若是你来自 MacOS,Homebrew 会让你宾至如归。


via: opensource.com/article/20/…

做者:Matthew Broberg 选题:lujun9972 译者:nophDog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关文章
相关标签/搜索