macOS 缺失的软件包管理器 —— Homebrew

 2017-12-09    东京 /mac/2017/12/09/homebrew.html mac mac

Mac OS X 是基于 Unix 的操作系统,可以安装大部分为 Unix/Linux 开发的软件。然而,如果只是以使用为目的,对每个软件都进行手工编译不是很方便,也不利于管理已安装的软件,于是出现了类似于 Linux 中的 apt-getyum 等软件包管理系统,其中最著名的有 MacPorts、Fink 和 Homebrew。

MacPorts 有个原则,对于软件包之间的依赖,都在 MacPorts 内部解决(/opt/local),无论系统本身是否包含了需要的库,都不会加以利用。这使得 MacPorts 过分的庞大臃肿,导致系统出现大量软件包的冗余,占用不小的磁盘空间,同时稍大型一点的软件编译时间都会难以忍受。

而 Homebrew 的原则恰恰相反,它尽可能地利用系统自带的各种库,使得软件包的编译时间大为缩短;同时由于几乎不会造成冗余,软件包的管理也清晰、灵活了许多。Homebrew 的另一个特点是使用 Ruby 定义软件包安装配置(叫做 formula),定制非常简单。Homebrew 默认将所管理的软件都安装到了 /usr/local/Cellarbrew --prefix)目录中,并在 /usr/local/bin 中创建符号链接。

至于 Fink,由于维护人手的问题,软件包的更新不是很及时,忘了它吧。

下面详细说说 Homebrew。

Homebrew 的安装

Homebrew 的安装非常简单,在终端程序中输入以下命令即可:

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

由于 Homebrew 的安装地址可能变化,建议到官方网站查看最新的安装方法。

Homebrew: https://brew.sh/index_zh-cn.html

安装完 brew 之后,可以执行 brew updatebrew doctor,然后按照提示稍微设置下。例如使用 bash 的环境变量信息(可以先通过 echo $PATH 查看一下),我们可以将 /usr/local/bin 添加到 PATH 路径的最前面,保证系统优先调用到的是 brew 下载的,在命名行下输入:

echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

Homebrew 的使用

Homebrew 的可执行命令是 brew,基本使用方法如下(以 wget 为例)。

查找软件包:

brew search wget

支持正则表达式搜索,例如 brew search /wge*/,需要将内容包含在 / 中。

安装软件包:

brew install wget

列出已安装的软件包:

brew list

删除软件包:

brew uninstall wget

查看软件包信息:

brew info wget
brew home wget

brew home 命令是用浏览器打开官方网页查看软件信息。

列出软件包的依赖关系:

brew deps wget

更新 brew:

brew update

brew update 可以把包信息更新到最新,不过包更新是通过 git 命令,所以如果没有 git 的话需要先通过 brew install git 命令安装 git。

列出过时的软件包(已安装但不是最新版本):

brew outdated

更新过时的软件包(全部或指定):

brew upgrade
brew upgrade wget

一些常用的软件

V2EX 有人统计了常用的安装软件:

wget=26
pkg-config=17
automake=17
autoconf=17
readline=15
git=14
gettext=14
libtool=14
xz=14
pcre=13
imagemagick=12
zsh=12
jpeg=12
gdbm=12
openssl=11
mongodb=11
cmake=11
coreutils=11
libevent=11
tree=11
freetype=11
sqlite=11
libpng=10
macvim=10
mtr=10
libyaml=10
mysql=9
node=9
mercurial=9
tig=9
nginx=9
gnutls=8
redis=8
libgpg-error=8
ack=8
gmp=8
tmux=8
libtiff=8
glib=7
go=7
libksba=7
nettle=7
p11-kit=7
unrar=7
phantomjs=7
python=7
libffi=7
gawk=7
libtasn1=7
lua=7
apple-gcc42=7
libxslt=7
dos2unix=6
fontconfig=6
python3=6
htop-osx=6
pixman=6
ctags=6
gd=5
intltool=5
git-extras=5
swig=5
curl=5
neon=5
jasper=5
curl-ca-bundle=5
icu4c=5
p7zip=5
postgresql=5
zlib=5
libxml2=5

定制自己的软件包

一个问题是:如果自己需要的软件包并不能在 Homebrew 中找到,怎么办呢?毕竟 Homebrew 是一个新生项目,不可能满足所有人的需求。

没关系,这时候我们可以自行编译安装。但是要说明的是:手工安装的软件包游离于 Homebrew 之外,管理起来不是很方便。

前文说过,Homebrew 使用 Ruby 实现的软件包配置非常方便,下面简单说一下软件包的定制(假定软件包名称是 bar,来自 foo 站点)。

首先找到待安装软件的源码下载地址:

http://foo.com/bar-1.0.tgz

建立自己的 formula:

brew create http://foo.com/bar-1.0.tgz

编辑 formula(上一步建立成功后,Homebrew 会自动打开新建的 formula 进行编辑,也可用如下命令打开 formula 进行编辑):

brew edit bar

Homebrew 自动建立的 formula 已经包含了基本的 configure 和 make install 命令,对于大部分软件,不需要进行修改,退出编辑即可。

输入以下命令安装自定义的软件包:

brew install bar

brew 的一个扩展

Homebrew-Cask 提供命令行下安装软件的功能。它所安装的所有软件都在 /usr/local/Caskroom 目录下,自动完成了软连接到 Application(可以通过设置修改,具体的使用可以通过 man brew-cask 查看)。

Homebrew-Cask: https://caskroom.github.io

需要说明一点,安装完应用之后,如果是 Alfred 用户,还需要设置一下 Alfred 的 Search Scope,确保使用 Alfred 可以搜索到通过 Homebrew-Cask 安装的应用。

关于 Homebrew 的其它功能,比如将自定义软件包提交到官方发布等,可以参考 Homebrew 项目的主页

关于作者
Jason,80 后,现从事通信行业。安卓玩家一个人的书房朗读者麦子
 英语入门到放弃
 jsntn
 jasonwtien
 jasonwtien
更多…… /about.html

最近更新: