Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

全新 Mac 安装指南(编程篇) #2

Open
kaiye opened this issue Nov 28, 2015 · 9 comments
Open

全新 Mac 安装指南(编程篇) #2

kaiye opened this issue Nov 28, 2015 · 9 comments

Comments

@kaiye
Copy link
Owner

kaiye commented Nov 28, 2015

注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 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 操作系统中预设的一些环境变量:

windows系统环境变量

其中有一个比较特殊的环境变量叫做 系统 path 变量,它的用途是定义一组全局目录路径。当在命令行终端下运行一个命令行时,若当前路径中不存在该命令,则会在系统 path 变量所定义的目录中按先后顺序一一查找,查找到则执行,如果遍历完 path 中所有目录都未查找到,则返回无法找到该命令。

Windows CMD 与 Mac Terminal 下打印系统 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)来保证配置生效

Terminal 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

    iTerm2 窗口透明度设置

  • 设置打开窗口快捷键。Preferences -> Keys -> Hotkey 推荐把快捷键设置成「键盘左下角+左上角」组合成的快捷键,如下图为 control+反引号(数字1左边那个键)。

    iterm2-hotkey

当 iTerm2 未启动时,以上窗口打开快捷键不会生效,使用自定义 Alfred Workflows 会是一个更好的方案(更多 Alfred 内容参看本文「常用软件推荐」部分):

Alfred-iterm

双击上图的 「Launch Apps / Files 」将 iTerm2 程序拖至浮层区域,并勾选「Toggle visibility for apps」选项。该配置方法可以实现 macOS 下使用任意快捷键显示(隐藏)任意应用程序的功能。

Alfred-iterm

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-autosuggestionszsh-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 密钥文件能省去每次输入密码的麻烦,其配置方法只需三步:

  1. 安装 ssh-copy-id 命令行工具 brew install ssh-copy-id
  2. 生成本机密钥/公钥文件 ssh-keygen -t rsa
  3. 将本机公钥上传到远程服务器上 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..(高级) 配置面板,进行以下设置:

配置 SOCKS

设置完成后在百度搜索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 推荐:

以下是其他集合推荐:

编辑器IDE

网络编程

前端开发

服务端开发

其他

  • Synergy 局域网内共享鼠标键盘
  • Keycastr 屏幕上显示按下的快捷键
  • OmniFocus / OmniPlan 任务、项目管理
  • Poedit 语言文件编辑工具
  • Dropbox Dropbox 同步文件不会出错,不过要先学会设置代理

另外,相信不少程序员朋友有听说过神之编辑器 Emacs 与编辑器之神 VIM,在 Mac 下有一个十分关键的隐藏配置,开启之后,可助普通程序员直接步入大神级别。关注微信公众号 「猫哥学前班」,回复 hhkb 关键词即可揭晓答案:)

@aNd1coder
Copy link

跟猫哥的软件重合度挺高的:D,mv命令是移动文件吧

@kaiye
Copy link
Owner Author

kaiye commented Nov 29, 2015

@aNd1coder 嗯,移动更准确点,我修改下,thx:)

@wzl610
Copy link

wzl610 commented Dec 15, 2015

跟着猫哥走,有酒有肉吃~

@kaiye
Copy link
Owner Author

kaiye commented Dec 25, 2015

添加 Alfred Workflows 章节,推荐一些常用的 Alfred 插件。

@kaiye
Copy link
Owner Author

kaiye commented Feb 15, 2016

新增:du -sh、Go2Shell、Autojump、tmux、Keycastr

@CaiPeterCai
Copy link

谢谢哥!

@huahuayu
Copy link

huahuayu commented Sep 4, 2016

LICECap / GifGrabber 极简录屏工具,直接生成 gif 格式
LICECap没有后者好用,谢谢分享!

@KikyoMiao
Copy link

Autojump配合incr服用,效果棒棒哒~

@fengyie007
Copy link

文档建议用dash

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants