[转] mac 下 homebrew 的安装和使用

原文地址: mac 下 homebrew 的使用

mac 系统也是基于 unix 的系统,所以也继承类很多 unix 的特性,包括软件的编译,安装等。ubuntu 下有快捷命令apt-get install来快速安装软件。centos 下有yum install来快速安装。所以,mac 下也有一种方式,就是使用brew

brew是 Mac 下的一个包管理工具,它从下载源码解压然后 ./configure && make install ,同时会包含相关依存库。并自动配置好各种环境变量,而且非常易于卸载。 这个对程序员来说简直是福音,简单的指令,就能快速安装和升级本地的各种开发环境。

home brew 官网是 http://brew.sh/index_zh-cn.html

安装 brew

打开 控制台 。输入一条命令即可安装好 brew。

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

这样一个简单的命令,我们就安装好来 brew 。来验证一下,输入 brew 命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ brew
Example usage:
brew [info | home | options ] [FORMULA...]
brew install FORMULA...
brew uninstall FORMULA...
brew search [foo]
brew list [FORMULA...]
brew update
brew upgrade [FORMULA...]
brew pin/unpin [FORMULA...]
Troubleshooting:
brew doctor
brew install -vd FORMULA
brew [--env | config]
Brewing:
brew create [URL [--no-fetch]]
brew edit [FORMULA...]
open https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md
Further help:
man brew
brew home

出现了很多帮助命令,说明我们已经安装成功了。

用 brew 安装源码

安装好了 brew 之后,我们就可以用这个命令安装各种源码了。比如安装一下wget工具。这个工具能在命令行中帮我们下载各种数据。

1
$ brew install wget

这样一个简单的命令就可以了。它会帮我们下载好 wget,并且编译执行安装,还会下载各种依赖包,设置好各种配置和参数。

安装好的 wget 会被安装到/usr/local/Cellar/wget/下。并且将wget命令软链接至 /usr/local/bin 目录下。这样全局就都可以使用wget命令了。

我们同样可以使用brew安装好git,node,openssl,svn等各种。

安装好的这些软件都会统一安装到/usr/local/Cellar/目录下,统一管理。而且安装目录代码会被同步到/usr/local/opt/下,任何的增删改都会保持这 2 个目录的同步。并且已经软链好各种命令到/usr/local/bin下。

我们去看看:

1
2
3
4
$ ls -l /usr/loal/bin
-rwxr-xr-x 1 yangyi admin 791 3 26 17:47 brew
lrwxr-xr-x 1 yangyi admin 30 3 27 13:34 node -> ../Cellar/node/0.12.1/bin/node
lrwxr-xr-x 1 yangyi admin 30 4 14 15:16 wget -> ../Cellar/wget/1.16.3/bin/wget

/usr/local/Cellar 和 /usr/local/opt/ 同步,增删改都会同步。

1
2
3
4
$ ls /usr/local/opt
brew-cask nginx node openssl pcre pkg-config wget xz
$ ls /usr/local/Cellar/
brew-cask nginx node openssl pcre pkg-config wget xz

ps: 那我就搞不懂了,那为啥wget -> ../Cellar/wget/1.16.3/bin/wget 命令映射要映射到Cellar目录,而不是opt目录呢?

brew 的常用命令

常用的命令没几个:

1
2
3
4
5
6
7
8
brew install wget   # 安装源码
brew info svn # 显示软件的各种信息,包括版本啊源码地址啊等等
brew uninstall wget # 卸载软件,很爽,一键静默卸载
brew search git # 模糊搜索brew 支持的软件。如果不加软件名,就会列出所有它支持的软件。多的很。
brew list # 列出本机通过brew安装的所有软件
brew update # 跟新brew软件自身
brew upgrade wget # 更新安装过的软件,如果不加软件名,就更新所有可以更新的软件
brew cleanup # 清除下载的各种缓存

brew cask

brew cask 是在 brew 的基础上一个增强的工具,用来安装 Mac 上的 Gui 程序应用包(.dmg/.pkg), 比如 qq、chrome、xun lei 等。它先下载解压到统一的目录中(/opt/homebrew-cask/Caskroom),省掉了自己去下载、解压、拖拽(安装)等蛋疼步骤,同样,卸载相当容易与干净。然后再软链到~/Applications/目录下, 一气呵成。非常方便,而且还包含很多在 AppStore 里没有的常用软件。

是不是很牛逼啊!!!

brew cask 的官网是:http://caskroom.io

github 地址是:https://github.com/caskroom/homebrew-cask

brew cask 的安装

也同样是一条命令搞定,前提是已经安装了brew:

1
$ brew install caskroom/cask/brew-cask

这样一条命令久搞定来 brew cask 的安装,是不是很爽。

brew cask help一下看安装成功没?也是出现各种命令和帮助手册:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ brew cask
brew-cask provides a friendly homebrew-style CLI workflow for the
administration of Mac applications distributed as binaries.
Commands:
alfred displays note about new built-in alfred support
audit verifies installability of Casks
cat dump raw source of the given Cask to the standard output
cleanup cleans up cached downloads and tracker symlinks
create creates the given Cask and opens it in an editor
doctor checks for configuration issues
edit edits the given Cask
fetch downloads Cask resources to local cache
home opens the homepage of the given Cask
info displays information about the given Cask
install installs the given Cask
list with no args, lists installed Casks; given installed Casks, lists staged files
search searches all known Casks
uninstall uninstalls the given Cask
update a synonym for 'brew update'
zap zaps all files associated with the given Cask
See also "man brew-cask"

好,我们来来下一个 iTerm 来看看:

1
$ brew cask install iTerm

简单的 2 条命令就可以了,非常之快,它会讲软件安装到/opt/homebrew-cask/Caskroom目录下,并且软链到~/Applications了,这样就能在应用程序里找到它。就能方便的使用。

1
2
3
$ cd /opt/homebrew-cask/Caskroom/
$ ls
iterm2

我们刚才的 iTerm 了。

再看看软链,用户自己手动下载安装的 App 会被安装到~/Applications,进这个目录看看:

1
2
3
4
5
$ cd ~/Applications/
$ ls -l
total 8
drwxr-xr-x 3 yangyi staff 102 4 8 22:27 GitHub.app
lrwxr-xr-x 1 yangyi staff 48 3 27 16:58 iTerm.app -> /opt/homebrew-cask/Caskroom/iterm2/2.0/iTerm.app

看到了吧。我们刚才的 iTerm 就软链到了统一的安装目录。

brew cask 常用命令

下面说一些常用到的各种命令。

1
2
3
4
5
6
7
brew cask install qq     # 下载安装软件
brew cask uninstall qq # 卸载软件
brew cask search qq # 模糊搜索软件,如果不加软件名,就列出所有它支持的软件
brew cask info qq # 显示这个软件的详细信息,如果已经用cask安装了,也会显示其安装目录信息等
brew cask list # 列出本机按照过的软件列表
brew cask cleanup # 清除下载的缓存以及各种链接信息
brew update && brew upgrade brew-cask # 更新cask自身

或许你已经注意到了,好像并没有提供更新用 cask 安装软件命令啊。的确是没有。是的。目前 homebrew-cask 并没有命令直接更新所有已安装的软件,软件更新主要是通过软件自身的更新流程,不过也可以通过以下所示命令先删除 APP,再重新安装。

1
$ brew cask uninstall APP && brew cask install APP

软件同样也会安装到/opt/homebrew-cask/Caskroom目录下。

为 brew 设置代理

1
2
3
4
5
6
7
8
# 打开终端
$ cd ~/

# 查看当前目录
$ ls -al

# 是否有 .curlrc 文件, 如果没有,新建一个吧
$ touch .curlrc

编辑它,写入下面内容.如果已经存在这个文件的话,直接编辑.
HTTP 代理

1
proxy=ip:port

把 ip 和 port 改为你的代理 ip 和端口,如:

1
2
# HTTP代理
proxy=127.0.0.1:8087

保存即可

参考资料:
http://ljhero.info/2013-08-17/homebrew-cask.html
http://www.udpwork.com/item/11775.html
http://www.zhihu.com/question/22624898

brew update 出错 homebrew-core is a shallow clone

最好的方式是 保持 翻墙

brew 执行 update 出现以下错误

1
2
3
4
5
6
7
8
9
10
11
Error:
homebrew-core is a shallow clone.
To `brew update`, first run:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
This command may take a few minutes to run due to the large size of the repository.
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you
automatically to avoid repeatedly performing an expensive unshallow operation in
CI systems (which should instead be fixed to not use shallow clones). Sorry for
the inconvenience!

解决方法

1
2
3
$ cd /usr/local/Homebrew/Library/Taps/homebrew
$ rm -rf homebrew-core
$ brew upgrade -vvv

随后我们将源在更换为清华源(Core)

源地址 : https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/

1
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git

[译] 在 macOS 上升级 Bash

机器翻译, 人工校对, 如有错误, 欢迎斧正
原文地址 : Upgrading Bash on macOS
掘金: https://juejin.im/post/5e4d69c5518825497467f03d

许多 macOS 用户不知道的一件事是,他们正在使用完全过时的 Bash shell 版本。所以,强烈 建议在 macOS 上使用较新版本的 Bash,因为它有很多可用的新功能。本文介绍了如何执行此操作。

macOS 上的默认 Bash 版本

要查看 macOS 中包含的 Bash 版本的是否已经过时,请执行以下命令:

1
2
3
4
5
6
7
$ bash --version
GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin19.0.0)
Copyright (C) 2017 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证第三版或者更新版本 <http://gnu.org/licenses/gpl.html>

本软件是自由软件,你可以自由地更改和重新发布。
在法律许可的情况下特此明示,本软件不提供任何担保。

如你所见,这是 GNU Bash 3.2 版,其日期为 2007 年 !此版本的 Bash 包括在所有 macOS 版本中,甚至是最新版。

苹果在其操作系统中包含如此旧版本的 Bash 的原因与 许可有关。从 4.0 版本(3.2 的后继版本)开始,Bash 使用 GNU 通用公共许可证 v3(GPLv3),Apple 不(想)支持。你可以 在此处此处 找到有关此 问题 的一些讨论。GNU Bash 的 3.2 版是 Apple 接受的带有 GPLv2 的最新版本,因此坚持使用这个版本。

这意味着整个世界(例如 Linux)都将使用 Bash 的新版本,而 macOS 用户则只能使用十年前的旧版本。在撰写本文时,GNU Bash 的最新版本是 5.0(请参阅 此处 ),已于 2019 年 1 月发布。在本文中,我给出了将系统的默认 Shell 升级到 Bash 的最新版本的说明。

为什么要升级?

但如果 Bash 3.2 可以正常工作,为什么还要费心升级新版呢?就我个人而言,主要原因是 编程补全。Bash 有个新特性是支持 特定命令的自动补全。你可能会使用自动补全功能来完成命令,文件名和变量,方法是先键入然后敲击 Tab 键 以自动完成当前词句(或两次敲击 Tab 键 以获取所有可能补全的列表,如果有多个以上的话) )。这是 Bash 的自动补全。

但是,编程补全 远不止于此,因为它允许依赖于上下文的特定于命令的完成。例如,想象一下,键入cmd -[tab][tab],然后看到适用于该命令的所有选项的列表。或键入cmd host rm [tab][tab]然后查看某个配置文件中指定的所有“主机”的列表。编程补全 可以做到这一点。

可编程补全逻辑(由命令的创建者)在完成规范中定义,通常以完成脚本的形式定义。这些完成脚本必须在 Shell 中提供,以启用命令的完成功能。

问题在于,自 3.2 版以来,Bash 的可编程补全功能已得到扩展,并且大多数补全脚本都使用这些新功能。这意味着这些补全脚本在 Bash 3.2 上不起作用,这意味着如果你继续使用默认的 macOS shell,则会错过许多命令的补全功能。

通过升级到较新的 Bash 版本,你可以使用这些补全脚本,这将非常有用。我写了整篇文章,称为macOS 上的 Bash 编程补全,其中介绍了升级到较新的 Bash 版本后要充分利用 macOS 上的可编程补全所需的全部知识。

如何升级?

要将 macOS 系统的默认 Shell 升级到最新版本的 Bash,你必须做三件事:

  1. 安装最新版本的 Bash
  2. 将新的 Bash Whitelist” 作为 login shell
  3. 将新的 Bash 设置为 default shell

每个步骤都非常容易,如下所述。

注意:以下说明不会更改 Bash 的旧版本,而是安装新版本并将其设置为默认版本。这两个版本将在你的系统上并存,但是你可以从此处忽略旧版本。

安装

我建议使用Homebrew安装最新版本的 Bash:

brew 安装 bash

就是这样!

要验证安装,你可以检查系统上现在有两个版本的 Bash:

1
2
3
$ which -a bash
/usr/local/bin/bash
/bin/bash

第一个是新版本,第二个是旧版本:

1
2
3
4
5
6
7
8
9
$ /usr/local/bin/bash --version
GNU bash, version 5.0.0(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

PATH变量中, 默认的新版 /usr/local/bin 目录的 Path 路径 会在 旧版本 /bin 目录之前,因此,只需输入 bash 即可使用新版

1
2
$ bash --version
GNU bash, version 5.0.0(1)-release (x86_64-apple-darwin18.2.0)

到目前为止,一切安好。现在,你已将此版本设置为默认版本。

白名单

UNIX 包含一项安全功能,该功能将可用作 login shell(即登录系统后使用的 shell 程序)的 Shell 程序限制在 “受信任” Shell 程序列表中。这些 Shell 在[/etc/shells](https://bash.cyberciti.biz/guide//etc/shells)文件中列出。

由于你要将新设置的 Bash Shell 用作默认 Shell,因此它必须能够充当登录 Shell。这意味着,你必须将其添加到 /etc/shells 文件中。你可以以 root 用户身份编辑此文件:

1
$ sudo vim /etc/shells

并将 /usr/local/bin/bash Shell 添加到其内容中,以便文件看起来像这样:

1
2
3
4
5
6
7
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash

这就是这一步需要做的!

设置默认 Shell

此时,如果打开一个新的终端窗口,则仍会使用 Bash 3.2。这是因为 /bin/bash 仍设置为默认 Shell 程序。要将其更改为新的 shell,请执行以下命令:

1
$ chsh -s /usr/local/bin/bash

就这样, 现在,当前用户的默认 Shell 程序设置为 Bash 的新版本。如果关闭并重新打开终端窗口,则现在应该已经在使用新版本。你可以如下验证:

1
2
$ echo $BASH_VERSION
5.0.0(1)-release

chsh 命令仅为执行命令的用户(当前用户)更改默认 Shell 程序。如果你也想更改其他用户的默认 Shell ,则可以通过登录其他用户的身份(例如,使用[su](https://en.wikipedia.org/wiki/Su_(Unix)))来重复此命令。最重要的是,也许你可 ​​ 能想要更改 root 用户的默认 Shell 程序,你可以执行以下操作:

1
$ sudo chsh -s /usr/local/bin/bash

这样,如果你 sudo su 以 root 用户身份打开 Shell ,它将使用新的 Bash 版本。

重要笔记

脚本中的用法

如前所述,你没有更改 Bash 的默认版本,而是安装了新版本并将其设置为默认版本。Bash 的两个版本在你的系统上并存:

  • /bin/bash: 旧版本
  • /usr/local/bin/bash: 新版本

在 shell 脚本中,你经常会有一个shebang行,如以下脚本所示:

1
2
#!/bin/bash
echo $BASH_VERSION

请务必注意,该 shebang 行明确引用了 Bash  的版本(因为它指定了/bin/bash)。这意味着,如果你运行此脚本,它将由 Bash 的旧版本解释(你可以在脚本的输出中看到它,类似于3.2.57(1)-release)。

在大多数情况下,这可能不是问题。但是,如果你希望脚本由版本的 Bash  显式解释,则可以更改 shebang 行,如下所示:

1
2
#!/usr/local/bin/bash
echo $BASH_VERSION

现在的输出将是5.0.0(1)-release。但是,请注意,该解决方案是不可移植的,这意味着它可能无法在其他系统上运行。这是因为,其他系统可能没有位于其中的 shell /usr/local/bin/bash(而/bin/bash这几乎是一个标准)。

结合两全其美,可以使用以下 shebang 行:

1
2
$ sudo rm /bin/bash
$ sudo ln -s /usr/local/bin/bash /bin/bash

对于 shebang 行,这是推荐的格式。它通过检查 PATH 和使用第一个遇到的 bash 可执行文件作为脚本的解释器来工作。如果新版本的目录位于中的旧版本目录PATH(默认值)之前,则将使用新版本,并且脚本的输出将类似于5.0.0(1)-release

为什么不能用符号链接?

为了不处理两个版本的 Bash,你是否能删除旧版本并将新版本放到旧的位置?例如,通过在 /bin/bash 其中创建指向新版本的符号链接,如下所示?

1
2
$ sudo rm /bin/bash
$ sudo ln -s /usr/local/bin/bash /bin/bash

这样,即使是带有脚本的脚本 #!/bin/bash 也会被新版本的 Bash 解释,那么为什么不这样做呢?

你可以执行此操作,但是你必须避开名为系统完整性保护(SIP)** **(Wikipedia)的 macOS 安全功能。此功能甚至禁止 root 用户对某些目录进行写访问(这就是为什么它也称为 “rootless(root 无权限)”)的原因。这些目录在这里 列出并包括 /bin 。这意味着即使以 root 用户身份,你也无法执行上述命令,因为不允许你从中删除任何内容或在 /bin 中创建任何文件。

解决方法是禁用 SIP,在 /bin 中进行更改,然后再次启用 SIP。可以根据这里的说明启用和禁用 SIP 。它要求你将计算机引导至恢复模式,然后使用 csrutil disablecsrutil enable 命令。无论你想通过这个 特别复杂的方式 来完全替换旧的 Bash 版本,或者是接受同时使用两个 Bash 版本,则都取决于你。

参考

[转+] Mac 使用 brew 安装 Nginx、MySQL、PHP-FPM 的 LNMP 开发环境

原文地址: Mac OS 使用 brew 安装 Nginx、MySQL、PHP-FPM 的 LAMP 开发环境

Homebrew

Homebrew 是 macOS 的包管理工具, 可以安装多款 unix 软件, 可以根据官网的命令来进行安装

Homebrew 官网

如果你尚未安装, macOS 将会提醒你安装 Xcode 命令行工具

准备

新版的 Mac OS 内置了 Apache 和 PHP,可以通过以下命令查看 Apache 和 PHP 的版本号:

1
2
3
4
5
6
7
8
9
10
$ httpd -v

Server version: Apache/2.4.46 (Unix)
Server built: Oct 29 2020 20:35:15

$ php --version

PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

因为我们要自己动手来安装 Nginx,如果 apache 启动则会出现端口占用的情况, 所以需要关闭系统自带的 apache(如果启动的话):

1
$ sudo apachectl stop  #关闭apache,如果事先没开启过,可以忽略报错信息

如果你的 apache 已经加入了 launchctl,使用下面的命令来关闭:

1
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

为什么选择关闭 apache?因为 mac os x 系统自带的 apache 是没有优雅的 remove/uninstall 的方式的… 默认目录位置是, 可以按需处理

1
2
3
$ /usr/sbin/apachectl
$ /usr/sbin/httpd
$ /etc/apache2/

默认 php 的位置

1
2
3
4
$ /usr/bin/php
$ /usr/bin/phpize
$ /usr/bin/php-config
$ /usr/sbin/php-fpm

Nginx

安装

1
2
$ brew install nginx
$ sudo brew services enable|start|restart|stop nginx

尽管我们不需要使用 sudo 来进行安装, 但是如果我们需要使用 80 端口来运行的话我们需要使用 sudo 来启动应用

配置

首先,我们必须给 Nginx 权限来访问我们的文件,以避免一个讨厌的 403 Forbidden 错误。为此,我们更改第一行,其中 {user}是你的用户名:

1
2
3
# /usr/local/etc/nginx/nginx.conf

user {user} staff;

给予管理员权限

1
2
$ sudo chown root:wheel /usr/local/opt/nginx/bin/nginx
$ sudo chmod u+s /usr/local/opt/nginx/bin/nginx

这里无法启动一定要确认权限是否正确, 尤其是在升级之后

运行 nginx

1
2
3
sudo nginx # 打开 nginx(和 sudo brew services start nginx 一致)
nginx -s reload|reopen|stop|quit #重新加载配置|重启|停止|退出 nginx
nginx -t #测试配置是否有语法错误

用法详解

1
nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

选项列表

1
2
3
4
5
6
7
8
9
-?,-h           : 打开帮助信息
-v : 显示版本信息并退出
-V : 显示版本和配置选项信息,然后退出
-t : 检测配置文件是否有语法错误,然后退出
-q : 在检测配置文件期间屏蔽非错误信息
-s signal : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新加载配置文件)
-p prefix : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/)
-c filename : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
-g directives : 设置配置文件外的全局指令

Mysql

1
2
$ brew install mysql@5.7
$ brew services start mysql@5.7

修改配置文件

1
$ vim /usr/local/opt/mysql/my.cnf

这里我们添加错误日志, 否则默认的错误日志均会记录到系统中

1
2
[mysqld]
log_error=/usr/local/var/log/mysqld.log

初始化 mysql

1
./bin/mysql_install_db

执行安全设置脚本,设置 root 账号密码

1
./bin/mysql_secure_installation

命令行连接 mysql

1
mysql -uroot -p

mysql 可以对外服务

1
2
3
4
5
vim ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
# 将这一行
<string>--bind-address=127.0.0.1</string>
# 替换为
<string>--bind-address=0.0.0.0</string>

Php

安装

如果这里加上版本号, 则为指定版本,如果不加则是默认的版本, 非默认版本的属性是 keg-only, 意思就是可以支持多版本默认不会将命令行软链到 /usr/local

1
2
$ brew install php@7.2
$ sudo brew services start php@7.2

安装之后有两段话需要注意

php@7.2 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have php@7.2 first in your PATH run:
echo ‘export PATH=”/usr/local/opt/php@7.2/bin:$PATH”‘ >> ~/.zshrc
echo ‘export PATH=”/usr/local/opt/php@7.2/sbin:$PATH”‘ >> ~/.zshrc
For compilers to find php@7.2 you may need to set:
export LDFLAGS=”-L/usr/local/opt/php@7.2/lib”
export CPPFLAGS=”-I/usr/local/opt/php@7.2/include”

命令行启动

因为 mac 系统自带 php, 如果想使用我们安装的作为第一命令行, 则需要将路径寻找优先级高于系统 $PATH 位置

这里将 php 路径加入 PATH 有两种方式:

第一种, 修改 ~/.bash_profile 文件, 可以根据自己的命令行工具来使用

1
2
3
4
5
6
$ sudo vim ~/.bash_profile
# add to files
export PATH="$(brew --prefix php@7.2)/bin:$PATH"

# enable setting
$ source ~/.bash_profile

这种方式如果使用 pecl 来安装 php 扩展的时候则由于 keg-only 冲突无法安装, 提示无权创建

第二种方式是
这里强制 php7.2 作为可以执行的版本, 这种可以使用 pecl 进行安装 相关扩展, 比如 redis, swoole

1
$ brew link --force php@7.2

配置 Php-Fpm

1
2
/usr/local/etc/php/{version}/php.ini
/usr/local/etc/php/{version}/php-fpm.conf

配置 Nginx 支持 PHP-FPM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /usr/local/etc/nginx/nginx.conf

# 添加默认首页 php
index index.php index.html index.htm;

# 取消以下内容的注释,并做修改
location ~ \.php$ {
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}

为了避免 出现 File not found 错误, 我们需要给定 php 正确的权限

1
2
3
4
# /usr/local/etc/php/7.2/php-fpm.d/www.conf

user = <user>
group = staff

最后, 重启 nginx 来激活这些改动, 如果我们忘记启动 php, 则会出现 502 Bad Gateway 错误

1
2
$ sudo brew services restart nginx
$ sudo brew services start php@7.2

结语

到目前为止,我们的 Nginx、MySQL、PHP-FPM 三大软件已经安装好了,针对不同的系统版本和软件版本,可能会遇到一些问题,欢迎留言探讨。

是否使用 sudo 启动区别

If sudo is passed, operate on /Library/LaunchDaemons (started at boot).
Otherwise, operate on ~/Library/LaunchAgents (started at login)

Mac 常用软件

开发

Dash

官网 : https://kapeli.com/dash

关键词 : API 文档查阅工具, 本地化, 快速, 集成化

Shottr

官网 : https://shottr.cc/

关键词 : 截屏, 支持滚动, 可标注, 取色

PhpStorm

官网 : https://www.jetbrains.com/phpstorm/
关键词 : jetbrain

Webstorm

官网 : https://www.jetbrains.com/webstorm/
关键词 : jetbrain

设计

Sketch

网站 : https://xclient.info/s/sketch.html
关键词 : 矢量图设计工具, 替代 PS

增强

OpenInTerminal

Url : https://www.appinn.com/openinterminal-lite/
关键词 : 快捷终端, 快捷编辑器, 复制路径

Paste

Url : https://pasteapp.io/
关键词 : 粘贴板历史, 可分组, 多色彩标签

uTools

网站 : https://u.tools/
关键词 : 生产力, 全局快捷键, 图床, 小工具

时间计划

滴答清单

官网 : https://dida365.com/
关键词 : GTD, 计划, 任务管理, 日历

[转+] macos 安装 homebrew 速度慢或者无法安装

安装 homebrew 的时候下载速度超级慢,解决办法是更换 homebrew 的下载源以及默认的 git 地址

如果第一步都无法执行请设置代理 : 为 mac 终端设置代理访问

操作步骤

打开终端,输入:

1
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh >> brew_install

执行后就会在当前用户目录下下载一个 brew_install 文件,然后 vim 修改文件中的下载源地址为中科大的源

1
2
3
4
# former
# BREW_REPO="https://github.com/Homebrew/brew"
# new
BREW_REPO = "git://mirrors.ustc.edu.cn/brew.git"

之后执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
./brew_install

....

# 安装, 输入密码继续
Press RETURN to continue or any other key to abort
Password:

....

# 下载命令行相关工具
Software Update Tool

Downloading Command Line Tools for Xcode

# 开始使用中科大的源进行安装
remote: Counting objects: 262, done.
remote: Compressing objects: 100% (204/204), done.

....

# 这里会使用 github 的地址, 进行克隆/, 所以一般来说会比较慢
==> Tapping homebrew/core
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...

更换 homebrew-core 的地址并克隆

如果出现

1
2
3
4
5
Error: Failure while executing: git clone https://github.com/Homebrew/homebrew-core /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1

Error: Failure while executing: /usr/local/bin/brew tap homebrew/core

$ git clone https://github.com/Homebrew/homebrew-core /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1

则代表这个地址无法访问, 需要重新克隆

几个镜像地址如下 :

清华镜像 : https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/
Aliyun 镜像 : https://developer.aliyun.com/mirror/homebrew

重新克隆

克隆 core

1
git clone https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git "$(brew --repo homebrew/core)" --depth=1

克隆 cask

1
git clone https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git "$(brew --repo homebrew/cask)" --depth=1

执行到这一步之后 homebrew 就安装好了。

如需更换其他源则需要按照 镜像源上边提供的地址设置即可

如需卸载 homebrew 直接执行下面命令即可

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

参考

参考文章 : Mac 安装 brew 并更改源

[转] Mac-zsh 安装和使用

原文地址: Mac-zsh 安装和使用(原创)

首先,我们知道,shell 有很多种:可以通过命令 cat /etc/shells 可以查看系统支持哪些 shell:

1
2
3
4
5
6
7
8
9
10
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh

Zsh全称为 Z Shell,因为 Z 是最后一个字母,因此大家称之为——终极 Shell

Oh My Zsh 安装

Linux/Unix 默认都是使用 Bash(Bourne-again Shell),使用 zsh,由于配置过于复杂,前期很少人使用,但后来有外国程序员弄出一个 Oh My ZSH 来管理 zsh 的配置和支持更多插件,使得 zsh 变得更容易使用和更加强大。

curl 方式

1
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

wget 方式

1
wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh

安装完之后,关闭当前终端,并重新打开一个,oh my zsh的默认主题是 robbyrussel

如下图所示:

安装完成之后退出当前会话重新打开一个终端窗口,你就可以见到这个彩色的提示了:

配置

oh my zsh提供数十种主题,相关文件在 ~/.oh-my-zsh/themes 目录,可以编辑主题来满足自身需求,我是使用默认的robbyrussell,但是做了一些修改:

1
2
PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}> '
#PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}> '

与原来不同的是,将 c(表示当前目录)改为 d(表示绝对路径),另外在尾部添加一个 > 作为隔离符号,效果如下:

切換 theme

所有的主題都放在 ~/.oh-my-zsh/themes 目录中,先看一下有哪些可以用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 ~/ [master*] ls ~/.oh-my-zsh/themes
3den.zsh-theme junkfood.zsh-theme
Soliah.zsh-theme kafeitu.zsh-theme
adben.zsh-theme kardan.zsh-theme
af-magic.zsh-theme kennethreitz.zsh-theme
afowler.zsh-theme kiwi.zsh-theme
agnoster.zsh-theme kolo.zsh-theme
alanpeabody.zsh-theme kphoen.zsh-theme
amuse.zsh-theme lambda.zsh-theme
apple.zsh-theme linuxonly.zsh-theme
arrow.zsh-theme lukerandall.zsh-theme
aussiegeek.zsh-theme macovsky-ruby.zsh-theme
avit.zsh-theme macovsky.zsh-theme
awesomepanda.zsh-theme maran.zsh-theme
bira.zsh-theme mgutz.zsh-theme
blinks.zsh-theme mh.zsh-theme
bureau.zsh-theme michelebologna.zsh-theme
candy-kingdom.zsh-theme mikeh.zsh-theme
candy.zsh-theme miloshadzic.zsh-theme
clean.zsh-theme minimal.zsh-theme
cloud.zsh-theme mira.zsh-theme
crcandy.zsh-theme mortalscumbag.zsh-theme
crunch.zsh-theme mrtazz.zsh-theme
cypher.zsh-theme murilasso.zsh-theme
dallas.zsh-theme muse.zsh-theme
darkblood.zsh-theme nanotech.zsh-theme
daveverwer.zsh-theme nebirhos.zsh-theme
dieter.zsh-theme nicoulaj.zsh-theme
.
.
.

切换方式是修改 .zshrcZSH_THEME 这个参数,预设是 robbyrussell,如果想改成 apple.zsh-theme,那么请把 ZSH_THEME 改为 apple

1
2
3
4
5
# Set name of the theme to load.
# Look in ~/.oh-my-zsh/themes/
# Optionally, if you set this to "random", it'll load a random theme each
# time that oh-my-zsh is loaded.
ZSH_THEME="apple"

这里有一些 theme 的截图,如果不想一个一个來看效果,可以參考看看。

zsh 的改进方法

  • 你可以打开 auto_pushd 选项(通过命令 setopt auto_pushd ),这样你通过 cd 切换目录时,zsh 会自动将前一个目录加到栈里,这样你就不会因为忘记 pushd 而遗憾了;

  • bash 里面可以cd - 回到上一个目录(即最后一次调用 cd 时所在的目录),但 zsh 里面有 cd -2, cd +3 这样的用法,并且在输入 cd - 之后按 TAB 能够列出目录名供挑选补全。不过需要注意的是,这里 -2 并不表示倒数第二次调用 cd 时的目录,而是倒数第二次通过 pushd 记录的目录,如果打开了 auto_pushd 选项,那么这两个的含义倒是一样的;

  • zsh 里面将 ~ 这个符号的用法进行了扩展,我们可以用 hash -d www=/var/www/html 定义一个路径别名,然后用 cd ~www 就可以进入到 /var/www/html 了。我在配置 XAMPP 的 mysql 中,就用到了 hash -d myserver=/Applications/XAMPP/xamppfiles/bin/mysql.server ,配置 XAMPP 启动路径为 hash -d myxampp=/Applications/XAMPP/xamppfiles/xampp

插件

oh my zsh 提供丰富的插件,存放在 ~/.oh-my-zsh/plugins 目录下:

想了解每个插件的功能以及如何使用,只要打开相关插件的目录下 zsh 文件即可,以 git 插件为例:

显示如下:

打开 git.plugin.zsh 文件,里面有很多命名别来来简化命令的输入。您可以根据自己的需要来启用哪些插件,只需在 ~/.zshrc 配置文件追加内容即可:

1
plugins=(git autojump osx)

常用插件的使用:

1.git:

当您处在一个 git 受控的目录下时,Shell 明确显示 gitbranch 信息,另外简化 git 很多命令,具体使用请参考: Plugin:git

2.autojump

autojump 智能跳转,通过 zsh 记录访问过的目录,autojump 的简写 j + 目录名 ,随意的在目录间跳转,支持各种模糊匹配、补全,例如之前的 cd work;现在可以直接 work,或者 j worj work 达到同样的效果,节省大好的时间。

1.安装

如果你是 Mac 用户,跟我一样的话,可以使用 brew 安装即可:

1
brew install autojump

如果是 Linux 用户,首先下载 autojump 最新版本,执行命令:

1
git clone git://github.com/joelthelion/autojump.git

然后进入目录,执行

1
./install.py

最后将以下代码加入 ~/.zshrc 配置文件:

1
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

注意:关于 zsh: command not found: j 报错

请在 .zshrc 文件相应的位置,找到 plugins=() 这行,添加 autojump 记得各插件名之间用英文空格隔开

如下图:

2.使用

我之前打开过我的博客 ~/octopress/source 目录,现在只需敲入 j o 就可以快速切换到 ~/ocotpress 目录。

如下图:

利用 j –s 可以看你的历史路径库。

3.osx

  • tab - 在一个新标签打开当前目录

  • cdf - cd 到当前 Finder 目录

  • quick-look - 快速浏览特殊的文件

  • man-preview - 在 Preview 应用打开特定的 man page

  • trash - 将特定的文件移到垃圾桶

使用:

1.各种补全:除了支持命令补全和文件补全之外,还支持命令参数补全,插件内容补全,只需要按 tab

2.目录浏览和跳转:输入 d,就显示在会话里访问的目录列表,输入列表前的序号,即可以跳转

3.输入 .. 可以返回到上级目录

安装 zsh-comopletions

安裝:

1
$ brew install zsh-completions

要启用还需要打开你的 .zshrc 加入以下两行来纳入 zsh-completions 的补全功能:

.zshrc

1
2
+# zsh-completions
+fpath=(/usr/local/share/zsh-completions $fpath)

同时还需要 rebuild zsh.zcompdump

1
$ rm -f ~/.zcompdump; compinit

转换过程中可能遇到的一些问题

1.alias

如果你本來就有設定一些 alias 在你的 .bashrc,你又把這些設定直接套用到 .zshrc,那有機會有一些指令會變怪怪的,這有可能是你設定的 alias 與 oh-my-zsh 內建的衝到了。oh-my-zsh 內建的 alias 放在 ~/.oh-my-zsh/lib/aliases.zsh,內容如下:

aliases.zsh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Push and pop directories on directory stack

alias pu='pushd'
alias po='popd'

# Basic directory operations

alias ...='cd ../..'
alias -- -='cd -'

# Super user

alias _='sudo'
alias please='sudo'

#alias g='grep -in'

# Show history

if [ "$HIST_STAMPS" = "mm/dd/yyyy" ]
then
alias history='fc -fl 1'
elif [ "$HIST_STAMPS" = "dd.mm.yyyy" ]
then
alias history='fc -El 1'
elif [ "$HIST_STAMPS" = "yyyy-mm-dd" ]
then
alias history='fc -il 1'
else
alias history='fc -l 1'
fi
# List direcory contents

alias lsa='ls -lah'
alias l='ls -la'
alias ll='ls -l'
alias la='ls -lA'
alias sl=ls # often screw this up

alias afind='ack-grep -il'

建议要在 .zshrc 加上自己的 alias 前先确认看看這個档案裡是不是有一些 alias 会跟你的冲突。

2.bash-completion

如果你跟我一样用 bash 时有装 bash-completion,而且又沒仔細弄清楚就把 .bashrc 的內容一般会套用在 .zshrc 上,那么当你开一个新的 shell 时有可能会发现遇到以下的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
  .
.
.
/usr/local/etc/bash_completion:138: command not found: complete
/usr/local/etc/bash_completion:141: command not found: complete
/usr/local/etc/bash_completion:144: command not found: complete
/usr/local/etc/bash_completion:147: command not found: complete
/usr/local/etc/bash_completion:150: command not found: complete
/usr/local/etc/bash_completion:153: command not found: complete
/usr/local/etc/bash_completion:156: command not found: complete
/usr/local/etc/bash_completion:159: command not found: complete
/usr/local/etc/bash_completion:162: command not found: complete
/usr/local/etc/bash_completion:246: parse error near `]]'

这是因为在安裝 bash-completion 的时候,原則上都会加入以下內容在你的 .bashrc

.bashrc

1
2
3
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

以上指令会去 source bash_completion 的內容,而 bash_completion 里面使用了 bash completion buitins 中的 complete 這個指令,所以如果你的 .zshrc 也去 source bash_completion,那就会 show 出像上面的 command not found: complete 这种信息了。所以记得在 .zshrc 中不要加入这段 code。

Resource Reference