macOS 缺失的软件包管理器 —— Homebrew
Mac OS X 是基于 Unix 的操作系统,可以安装大部分为 Unix/Linux 开发的软件。然而,如果只是以使用为目的,对每个软件都进行手工编译不是很方便,也不利于管理已安装的软件,于是出现了类似于 Linux 中的 apt-get
、yum
等软件包管理系统,其中最著名的有 MacPorts、Fink 和 Homebrew。
MacPorts 有个原则,对于软件包之间的依赖,都在 MacPorts 内部解决(/opt/local
),无论系统本身是否包含了需要的库,都不会加以利用。这使得 MacPorts 过分的庞大臃肿,导致系统出现大量软件包的冗余,占用不小的磁盘空间,同时稍大型一点的软件编译时间都会难以忍受。
而 Homebrew 的原则恰恰相反,它尽可能地利用系统自带的各种库,使得软件包的编译时间大为缩短;同时由于几乎不会造成冗余,软件包的管理也清晰、灵活了许多。Homebrew 的另一个特点是使用 Ruby 定义软件包安装配置(叫做 formula),定制非常简单。Homebrew 默认将所管理的软件都安装到了 /usr/local/Cellar
(brew --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 update
和 brew 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 站点)。
首先找到待安装软件的源码下载地址:
建立自己的 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
Homebrew-Cask 提供命令行下安装软件的功能。它所安装的所有软件都在 /usr/local/Caskroom
目录下,自动完成了软连接到 Application(可以通过设置修改,具体的使用可以通过 man brew-cask
查看)。
Homebrew-Cask: https://caskroom.github.io
需要说明一点,安装完应用之后,如果是 Alfred 用户,还需要设置一下 Alfred 的 Search Scope,确保使用 Alfred 可以搜索到通过 Homebrew-Cask 安装的应用。
关于 Homebrew 的其它功能,比如将自定义软件包提交到官方发布等,可以参考 Homebrew 项目的主页。
最近更新: