Description
注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有《全新 Mac 安装指南(通用篇)》作为本安装指南的基础篇。
在 《为什么说每个程序员都应该有台Mac电脑》一文中我有提到 Mac 系统的命令行环境与 Linux 系统十分类似,这是因为 Mac OS X 的操作系统内核是 Darwin,它和 Linux 一样是一种优秀的类 Unix 系统。掌握 Linux Shell 命令行的使用,可以说是全栈工程师的基本要求之一,而使用 Mac 的初学者会比使用 Windows 系统的有着更大的优势。
接下来,我们先来了解几个 Mac (及 Linux )下的基础概念 环境变量、Shell 终端、SSH 远程连接。
环境变量
环境变量(environment variables)是所有操作系统中的一个通用概念,简单来说就是系统启动之后,会预设一些全局的变量信息供所有应用程序来使用。打个比方,如果我声明「接下来文章里说的 env 是表示 environment variables 的意思」,其实就是在这篇文章的环境下,定义了一个环境变量 $env = "environment variables"
。
在一个操作系统中,可以把一个目录名、命令行语句、数值或字符串定义成一个环境变量。以下截图展示了 Windows 操作系统中预设的一些环境变量:
其中有一个比较特殊的环境变量叫做 系统 path 变量,它的用途是定义一组全局目录路径。当在命令行终端下运行一个命令行时,若当前路径中不存在该命令,则会在系统 path 变量所定义的目录中按先后顺序一一查找,查找到则执行,如果遍历完 path 中所有目录都未查找到,则返回无法找到该命令。
Shell 终端
Shell 可以用来执行命令行,在 Mac 下打开 Terminal(终端)程序,会自动开启一个 Shell 命令行界面,而 Shell 每次在被打开(或执行)的时候会自动加载默认配置文件。Mac 和 Linux 默认的 shell 都是 bash,其中 Mac 的 bash 默认配置文件是 .bash_profile ,Linux 的是 .bashrc 。Mac 下通过修改 .bash_profile 文件可以进行一些环境变量的配置。
接下来实际操作演示如何使用 Terminal 在 .bash_profile 中配置 ll
快捷命令,其中我会顺带使用一些常用命令,它们含义如下:
cd
跳转至目录ls
列出当前目录下的文件及文件夹ls -l
ls 命令加-l
参数表示列出更多详细信息mv
移动 / 重命名文件touch
新建文件rm -r
删除文件,-r
参数表示递归删除目录pwd
显示当前目录~
波浪号表示当前用户根目录,一般用户的配置文件都放在这里echo
打印字符串或变量>
将结果输出至某文件中cat
输出文件全文内容du -sh *
查看某目录下各子文件和目录的大小source
执行某一个文件,通常 .bash_profile 修改之后需要执行下 source 命令(或者新开一个 shell)来保证配置生效
此外,管道命令 |
也是 Shell 中十分常用的命令,它用于将前一个命令的输出结果作为后一个命令的输入参数。
例如使用以下命令查看 7070 端口是否有进程占用:
netstat -an | grep 7070
Mac 下默认的 Terminal + bash 不够强大,推荐换成 iTerm2 + zsh ,以下是具体的配置方法:
1、安装 iTerm2
安装后打开 iTerm2,使用 ⌘d
可横向切分成出两个窗口,使用 ⌘t
可以新建一个窗口标签。按下 ⌘,
进行以下配置可提升逼格:
-
iTerm2 的命令行指示标记可以通过 Preferences -> Profiles -> Terminal -> Shell Integration 取消勾选 Show mark indicators 来关闭
-
设置窗口透明度。如下图,Preferences -> Profiles -> Window -> Window Appearance 设置 Transparency
-
设置打开窗口快捷键。Preferences -> Keys -> Hotkey 推荐把快捷键设置成「键盘左下角+左上角」组合成的快捷键,如下图为 control+反引号(数字1左边那个键)。
当 iTerm2 未启动时,以上窗口打开快捷键不会生效,使用自定义 Alfred Workflows 会是一个更好的方案(更多 Alfred 内容参看本文「常用软件推荐」部分):
双击上图的 「Launch Apps / Files 」将 iTerm2 程序拖至浮层区域,并勾选「Toggle visibility for apps」选项。该配置方法可以实现 macOS 下使用任意快捷键显示(隐藏)任意应用程序的功能。
2、安装 zsh
安装完成后还需要进行一定的配置,让 zsh 复用 bash 的环境变量配置,具体步骤如下:
- 在线自动安装 zsh 。在 iTerm2 中执行以下命令
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
- 使用 vim 编辑器打开用户 zsh 配置文件,
vim ~/.zshrc
,vim 与普通编辑器有很大差异,使用方法可自行百度学习 - 文件打开后,先按字母键大写 G(跳至文件末尾),再按下字母键小写 o(新插入一行,同时进入编辑模式),输入以下字符
source ~/.bash_profile
,然后按下 Esc 键退出编辑模式,再依次按下 :wq 保存关闭文件 - zsh 提供了大量扩展插件,推荐启用其中的 osx 插件,启用后可使用
ofd
命令将当前 shell 窗口在 Finder 中打开,使用cdf
可在 shell 中直接跳转至当前 Finder 窗口所在的路径 - zsh 的 zsh-autosuggestions 与 zsh-syntax-highlighting 插件能够将 zsh 扩展成与 fish 类似的操作体验 (tmux 下使用时需注意这个 bug)
- zsh 的默认主题 robbyrussell 无法展示完整的当前工作路径,可修改配置文件的主题行,如
ZSH_THEME="gnzh"
设置成其他主题
3、安装 brew
Mac 安装其他命令行,需要一个类似 Linux apt-get
这样的包管理工具,运行以下命令即可自动完成安装 brew
命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完成后,如想安装 wget 命令行(一款常用的爬虫下载工具),只需在 shell 中运行 brew install wget
。大多数命令行都可以通过 brew 进行安装和管理。
SSH 远程连接
ssh 是 Mac/Linux 下一个远程连接主机的命令行工具,两台机器建立一个 ssh 连接之后可以进行一系列的加密指令和数据传输。ssh 十分重要,每个爱编程自由的人都应该掌握。
在开始学习 ssh 之前,我们需要有一台 Linux 的主机(或者另外一台 Mac 电脑)用来作为远程被访问的机器。由于国内的 阿里云、腾讯云 价格略高,建议可以买一个国外的 VPS(虚拟独立服务器),Linode / Vultr 加州机房在国内的访问速度不错,Vultr 最便宜的主机 30RMB/月,不过网速最快的还属 Google Compute Engine 。使用 Google 的云服务需要解决这样一个悖论:一方面你需要能打开 Google 的网站才能购买他的 VPS 服务,另外一方面你需要有了他的 VPS 主机才能通过 SSH 打开他的网站。(这是老大哥留给我们这代人的难题)。
假设你已经有了另外一台 Linux 主机,IP地址 为 1.2.3.4,用户名为 root ,使用以下命令可发起建立 ssh 连接:
ssh root@1.2.3.4
此时会要求输入 root 用户的密码,输入完成后即可登录至远程机器。如果不想每次都输入密码,则可以使用 ssh 密钥文件鉴权。在使用 git/scp/rsync 等命令时,配置 ssh 密钥文件能省去每次输入密码的麻烦,其配置方法只需三步:
- 安装 ssh-copy-id 命令行工具
brew install ssh-copy-id
- 生成本机密钥/公钥文件
ssh-keygen -t rsa
- 将本机公钥上传到远程服务器上
ssh-copy-id root@1.2.3.4
注:ssh 端口映射
ssh 协议默认使用 22 端口连接,通过 -D
参数可指定将该 ssh 连接通道映射到本机的某个端口,并且该加密通道支持 SOCKS 代理协议,这意味着本地应用程序通过此端口传输数据时,实际上是使用远程服务器的网络请求的数据。以下命令行演示了静默映射 ssh 连接至本地 7070 端口:
ssh -g -N -D 7070 -f root@1.2.3.4
接下来我们验证下是否映射成功。打开 System Preferences -> Network ,点击当前使用中的网卡 -> Advanced..(高级) 配置面板,进行以下设置:
设置完成后在百度搜索IP看看本地网络是否变成了远程机器的IP。使用 Vultr VPS 的同学可以尝试打开下 Google.com 透透气,学会使用 Google/Stackoverflow/Github 找到技术问题的解决方案,是高级程序员的基础素质。
常用软件推荐
在了解了 环境变量、Shell 终端、SSH 远程连接 之后,基础的命令行编程环境和网络环境已经配置完成。以下是我常用的开发软件,推荐给各位,希望有所帮助。
通用
- SwitchHost HOST切换工具
- LICECap / GifGrabber 极简录屏工具,直接生成 gif 格式
- Beyond Compare 文件对比、合并工具,推荐购买
- DevDocs 各类开发语言框架 API 文档,推荐使用
nativefier --name "DevDocs" "http://devdocs.io/"
打包成本地应用使用(可配置成离线版本) - FileZilla FTP/SFTP 客户端。收费的推荐 Transmit
- Github Desktop / SourceTree Git GUI 客户端
- SmartSVN,SVN GUI,注意版本号对应关系,一般使用与 Mac 命令行相同的版本(当前为 svn 1.7 )
- Quick Look Plugins Mac 系统中使用「空格键」可快速预览选中的文件,下载相关 .qlgenerator 插件拖至
/Library/QuickLook/
目录即可完成安装 - Autojump 目录快速跳转命令行工具,告别苦逼的 cd cd cd …… 需要注意的是,如果通过
brew install autojump
安装,在完成安装后,还需要进行配置,以下方法二选一:- 在
~/.bash_profile
文件中加入语句[[ -s $(brew --prefix)/etc/profile.d/autojump.sh ]] && . $(brew --prefix)/etc/profile.d/autojump.sh
- 在
~/.zshrc
文件中,修改plugins=(git)
插件配置行,以开启 zsh 对 autojump 插件的支持plugins=(git autojump)
- 在
- tmux 终端复用命令行工具,经常 ssh 到远程服务器的同学必备
- SpechtLite A rule-based proxy app for macOS,自动选择最快的上网通道
Alfred Workflows
Alfred 是 Mac 下的「神兵利器」,以下是部分 Workflows 推荐:
- Web Search 包含 百度、大众点评等
- Baidu Weather 基于百度 API 天气搜索
- Copy Path 复制选中的文件夹路径到剪切板
- Douban 豆瓣图书、音乐、电影搜索
- Github 搜索个人、Stars、所有项目
- Hash 常用 md5、sha1 等哈希工具
- leIP 查看、搜索内外网IP
- Open with Sublime Text 更多其他编辑器参考 franzheidl/alfred-workflows
- TerminalFinder Finder / Terminal 路径双向切换
- Youdao Dict 有道翻译
- Zhihu 知乎搜索和日报
以下是其他集合推荐:
- alfredworkflow.com
- packal
- hzlzh/Alfred-Workflows
- willfarrell/alfred-workflows
- zenorocha/alfred-workflows
编辑器IDE
- Visual Studio Code 微软新出的基于 Atom Shell 的编辑器
- Sublime Text
- PHP Storm
- MacVim 通过 brew 安装,同时安装 VimBox 增强插件
- Android Studio 开发 Android 应用
- Xcode 开发 iOS 应用
网络编程
- Postman HTTP 接口调试 Chrome 插件
- SwitchyOmega Chrome 代理插件
- Charles Proxy 最好用的 HTTP 抓包工具(推荐购买正版)
- HTTPScoop 网卡上 HTTP 抓包
前端开发
- OmniGraffle / Axure 产品原型设计软件
- Sketch 图片编辑工具,也可以当做轻量级原型设计软件
- Adobe Photoshop / Flash / Illustrator
- Pixelmator Photoshop 的轻量级替代品
- Origami 动画原型设计工具
- PNG-2x-Export PS 快捷导图切图工具
- Miro Video Converter 视频转码工具(可转成浏览器支持的 video mp4格式)
- FontLab Studio 字体设计工具
- GIFBrewery MOV 格式转 GIF 格式
- ImageAlpha / ImageOptim 图片压缩工具,ImageAlpha 可有损压缩 PNG
- nvm 管理不同 node 版本的命令行工具
- EgretEngine Egret 游戏开发框架
服务端开发
- ampps / MAMP Apache/MySql/PHP 环境
- Navicat Data Modeler 数据库设计
- Sequel Pro MySQL GUI 客户端
- Robomongo MongoDB GUI 客户端
- DB Browser for SQLite SQLite GUI 客户端
其他
- Synergy 局域网内共享鼠标键盘
- Keycastr 屏幕上显示按下的快捷键
- OmniFocus / OmniPlan 任务、项目管理
- Poedit 语言文件编辑工具
- Dropbox Dropbox 同步文件不会出错,不过要先学会设置代理
另外,相信不少程序员朋友有听说过神之编辑器 Emacs 与编辑器之神 VIM,在 Mac 下有一个十分关键的隐藏配置,开启之后,可助普通程序员直接步入大神级别。关注微信公众号 「猫哥学前班」,回复 hhkb
关键词即可揭晓答案:)
Activity
aNd1coder commentedon Nov 28, 2015
跟猫哥的软件重合度挺高的:D,
mv
命令是移动文件吧kaiye commentedon Nov 29, 2015
@aNd1coder 嗯,移动更准确点,我修改下,thx:)
wzl610 commentedon Dec 15, 2015
跟着猫哥走,有酒有肉吃~
kaiye commentedon Dec 25, 2015
添加 Alfred Workflows 章节,推荐一些常用的 Alfred 插件。
kaiye commentedon Feb 15, 2016
新增:du -sh、Go2Shell、Autojump、tmux、Keycastr
CaiPeterCai commentedon Aug 8, 2016
谢谢哥!
huahuayu commentedon Sep 4, 2016
KikyoMiao commentedon Oct 28, 2016
Autojump配合incr服用,效果棒棒哒~
fengyie007 commentedon Mar 17, 2017
文档建议用dash