1 Homebrew 概述
brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,类似ubuntu系统下的apt-get的功能.
homebrew本身就是一个git仓库。使用homebrew安装软件包时,会自动先下载软件包,然后解压安装,但有时候下载会卡住,或者很慢,这个时候你可以通过其他工具先将所需的软件包下载 下来,注意版本一定要对应,homebrew放置软件包源码的路径/Library/Caches/Homebrew/,只要你将所需要的软件包下载正确的版本,放置在此目录下,那么再使用brew install xxx的时候,brew就能直接安装了,有时候brew install xxx卡在下载界面,这招很管用。
1.1 名词概念
brew(意为酿酒)的命名很有意思,全部都使用了酿酒过程中采用的材料/器具,名词对应以下的概念:
Tap (水龙头)程序包的源
Bottle (瓶子)编译打包好的程序包
Formula(配方) 程序包定义,本质上是一个rb文件.代指软件包名,如git(实际操作: brew install git)
Keg (桶)程序包的安装路径
Cellar (地窖)所有程序包(桶)的根目录
最终编译安装完毕的程序就是一桶酿造好的酒。更详细的信息参考Homebrew的官方Cookbook
2 Homebrew安装
brew是一个mac下的由ruby开发的包管理系统,其官网是http://brew.sh。你只要在你的终端中执行
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
便可将其安装完成。
启动web服务器,可以通过浏览器访问http://localhost:4567/ 来同网页来管理包 brew server
软件安装目录 /usr/local/Cellar/
# 安装完之后输入命令
brew update # 即可获得更新并切换到速度最快的源上,相当于更新Git仓库
2.2 Homebrew常见的流程是:
增加一个程序源(新增一个水龙头) brew tap homebrew/php
更新程序源 brew update
安装程序包(按照配方酿酒)
查看配置 brew config 可以看到程序包默认安装在/usr/local/Cellar下 (酒桶放在地窖内)
3 常用命令
brew help | brew -h # 查看brew的帮助
brew home php55 #访问php5.5官方网站
brew tap # 查看安装源列表
brew list # 显示已经安装软件列表
brew tap josegonzalez/php # 增加一个程序源
brew untap homebrew/php # 去掉程序源
安装前准备
brew options php55 #查看php5.5安装选项
brew deps # 显示包依赖
brew search git # 搜索
安装
brew install git # 安装软件
brew remove/uninstall git # 卸载软件
## 查看软件安装信息
brew info mysql # 主要看具体的信息,比如目前的版本,依赖,安装后注意事项等
更新
brew update # 更新Git库/Formula(软件包),对已经安装并有更新的软件用*标明 - 这会更新 Homebrew 自己,并且使得接下来的两个操作有意义
brew outdated # 看一下可以升级的软件
brew upgrade; # 升级所有软件
brew upgrade git # 如果不是所有的都要升级,那就这样升级指定的
删除
brew cleanup git # 单个软件删除
brew cleanup # 直接升级完然后清理干净/清理不需要的版本极其安装包缓存
服务
brew services list #查看系统通过 brew 安装的服务
brew services cleanup #清除已卸载无用的启动配置文件
brew services restart php55 #重启php-fpm
3.1 brew安装目录说明
Homebrew 将软件包分装到单独的目录(/usr/local/Cellar),然后 symlink 到 /usr/local 中。
/usr/local/Cellar # 用户安装目录
/usr/local/opt # 用户安装目录程序软链到此目录
4 更换Homebrew的更新源 csdn
4.1 更新源的机制
Homebrew的更新源由三部分组成:本体(brew.git)、核心(homebrew-core.git)以及二进制预编译包(homebrew-bottles)。
在很多教程中,只会提及到更换本体,而未涉及到核心与二进制预编译包的更换。这样实际上效果是不完全的(尽管这样也无法做到完全,毕竟有一些软件包的地址是不被收录的,只能从它们提供的链接处下载)。
从.git的后缀名可以看出,Homebrew的更新源是以Git仓库的形式存在的,这便是为什么需要用到Git的原因。也正是如此,使得可以对其进行克隆,成为新源。
4.2 更新源的选择
默认官方的更新源都是存放在GitHub上的,这也是中国大陆用户访问缓慢的原因,一般来说我们会更倾向选择国内提供的更新源,在此推荐中国科大以及清华大学提供的更新源,因为它们能够完整以上源组成的三个部分。并且在此感谢他们为大家提供的服务。
4.3 替换更新源
# 替换brew.git:
$ cd “$(brew --repo)”
# 中国科大:
$ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
# 清华大学:
$ git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
# 替换homebrew-core.git:
$ cd “$(brew --repo)/Library/Taps/homebrew/homebrew-core”
# 中国科大:
$ git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
# 清华大学:
$ git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
# 替换homebrew-bottles:
# 中国科大:
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile
# 清华大学:
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile
# 应用生效:
$ brew update
以上在中国科大和清华大学任选其一即可,在使用其他源的时候,最好先尝试访问其链接看看是否健在,并且因为历史原因,最初的brew.git是叫homebrew.git的,而现在部分更新源早已随官方更名,所以切记要验证。
并且没有严格规定必须三个组成部分必须是来自同一提供,可随性发挥。
且Homebrew在早期版本中更新源的是在/usr/local目录下的,而现在是在/usr/local/Homebrew,不过应该都是可以使用"$(brew --repo)"来自动指向目录的,所以无需理会。
如果你之前折腾过不少导致你的Homebrew有点问题,那么可以尝试使用如下方案:
# 诊断Homebrew的问题:
$ brew doctor
# 重置brew.git设置:
$ cd “$(brew --repo)”
$ git fetch
$ git reset --hard origin/master
# homebrew-core.git同理:
$ cd “$(brew --repo)/Library/Taps/homebrew/homebrew-core”
$ git fetch
$ git reset --hard origin/master
# 应用生效:
$ brew update
4.4 重置更新源
所谓有进则有退,在某些时候也有换回官方源的需求。
# 重置brew.git:
$ cd “$(brew --repo)”
$ git remote set-url origin https://github.com/Homebrew/brew.git
# 重置homebrew-core.git:
$ cd “$(brew --repo)/Library/Taps/homebrew/homebrew-core”
$ git remote set-url origin https://github.com/Homebrew/homebrew-core.git
至于homebrew-bottles,本质上作为一个环境变量的存在,之前的命令也只是将其写入到/usr/.bash_profile中,并且只是在文件尾部添加一行。所以之前的命令不推荐重复执行,在未掌握相关命令技巧的前提下,我推荐直接去修改.bash_profile文件:
当然这里的主题是重置更新源,所以我们直接选择删除环境变量HOMEBREW_BOTTLE_DOMAIN,使其成为默认值即可。
当然,最后不要忘记$ brew update进行应用。
4.5 后记
在完成更新源的更换后,我们可以使用$ brew upgrade将现有的软件进行更新至最新版本,这样便能很直接的看出速度上的变化了。最后不要忘记$ brew cleanup将旧有的软件安装包进行清理。
--------------------- 本文来自 無雙草泥馬 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010275932/article/details/76080833?utm_source=copy
5 Launchctl
Launchctl :控制OS X系统里的启动进程(launch)
5.1 执行定时脚本|设置开机启动步骤
(1)编写执行脚本
通常brew在安装软件时brew为我们自动生成。
(2)去对应的目录下建立plist文件
(3)加载服务
5.2 plist指定目录介绍
-
~/Library/LaunchAgents 由用户自己定义的任务项
- /Library/LaunchAgents 由管理员为用户定义的任务项
~/Library/LaunchDaemons 由管理员定义的守护进程任务项
~/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
说明:Agents文件夹下的plist是需要用户登录后,才会加载的,而Daemons文件夹下得plist是只要开机,可以不用登录就会被加载
5.3 加载/卸载服务
cd 进入指定 plist 文件 目录
launchctl load ***.plist #加载
launchctl unload ***.plist #取消
launchctl list #查看服务
launchctl load -w **.pist #设置开机启动并立即启动改服务
launchctl load **.pist #设置开机启动但不立即启动服务
5.4 对服务设置别名方便操作
vim ~/.bash_profile #编辑添加如下脚本
alias nginx.start='launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.stop='launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist'
alias nginx.restart='nginx.stop && nginx.start'
alias php-fpm.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist"
alias php-fpm.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist"
alias php-fpm.restart='php-fpm.stop && php-fpm.start'
alias mysql.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist"
alias mysql.restart='mysql.stop && mysql.start'
alias redis.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist"
alias redis.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist"
alias redis.restart='redis.stop && redis.start'
alias memcached.start="launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.memcached.plist"
alias memcached.stop="launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.memcached.plist"
alias memcached.restart='memcached.stop && memcached.start'