注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 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 输出文件全文内容
  • source 执行某一个文件,通常 .bash_profile 修改之后需要执行下 source 命令(或者新开一个 shell)来保证配置生效

此外,管道命令 | 也是 Shell 中十分常用的命令,它用于将前一个命令的输出结果作为后一个命令的输入参数

例如使用以下命令查看 7070 端口是否有进程占用:

netstat -an | grep 7070

Mac 下默认的 Terminal + bash 不够强大,推荐换成 iTerm2 + zsh ,以下是具体的配置方法:

1、安装 iTerm2

安装后打开 iTerm2,按下 ⌘, 进行以下配置用来提升逼格:

  • 设置窗口透明度。如下图,Preferences -> Profiles -> Window -> Window Appearance 设置 Transparency

  • 设置打开窗口快捷键。Preferences -> Keys -> Hotkey 推荐把快捷键设置成 control+反引号(数字1左边那个键)

iTerm2 支持窗口切分,使用 ⌘d 可横向切分成两个 shell。

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 保存关闭文件

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..(高级) 配置面板,进行以下设置:

设置完成后在百度搜索IP看看本地网络是否变成了远程机器的IP。使用 Vultr VPS 的同学可以尝试打开下 Google.com 透透气,学会使用 Google/Stackoverflow/Github 找到技术问题的解决方案,是高级程序员的基础素质。

常用软件推荐

在了解了 环境变量Shell 终端SSH 远程连接 之后,基础的命令行编程环境和网络环境已经配置完成。以下是我常用的开发软件,推荐给各位,希望有所帮助。

通用

编辑器IDE

网络编程

前端开发

服务端开发

其他

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

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

全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)的更多相关文章

  1. mac 通过 终端 ssh 远程连接 centos 服务器

    mac 通过 终端 ssh 远程连接 centos 服务器 在终端下输入 ssh -l root 204.74.*.*      就可以连接了,这是端口没变的情况,还是原来的22 ssh -p 448 ...

  2. Mac里用终端ssh远程连接Centos服务器

    在mac终端下输入 ssh -l root *.*.*.* 就可以远程连接Centos服务器了,端口没变还是:22 如果改变端口用下面方法输入: ssh -p 448(你改变的端口) -l root( ...

  3. 全新 Mac 安装指南(通用篇)(推荐设置、软件安装、推荐软件)

    注:本文将会不定期维护与更新,有需要的朋友请在 Github 上订阅该条 Issues:<全新 Mac 安装指南(通用篇)>. 在 Mac 电脑上只用 Windows 操作系统的同学请看到 ...

  4. Linux学习——shell编程之环境变量配置文件

    小白学习,在学习中总结! shell编程之环境变量配置文件 一:环境变量配置文件 1 shell编程之环境变量配置 变量类型: 用户自定义变量(本地变量) 环境变量 :定义每个用户的操作环境,如pat ...

  5. shell中的输入输出和编程中的变量(shell 03)

    shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...

  6. MAC OX 配置JDK环境变量

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

  7. Mac下添加java环境变量

    2015年4月22号更新: 发现一个坑:最近发现有同事按照本文方式配置jdk环境变量一直不成功,后来发现他是使用了“Oh-My-Zsh”,配置文件的路径不是/etc/profile或~/.bash_p ...

  8. Mac下配置Maven环境变量

    Mac下配置Maven环境变量 1.先到Apache官网下载maven压缩包.下载地址:http://maven.apache.org/download.cgi 2.Maven是用Java开发的,所以 ...

  9. 一个错误导致懂了mac系统的PATH环境变量

    一个完全不懂mac系统的强迫症小白,由于搭建环境都按照百度走,所以在执行命令echo $PATH查看PATH内容时发现怎么有这样一串东西 /usr/local/bin:/usr/bin:/bin:/u ...

随机推荐

  1. 【DWR系列03】- DWR主要类详解

    img { border: 1px solid black } 一.简介 首先应该了解这个jar包主要的类,了解了类,就了解了DWR.DWR的在线javadoc:http://directwebrem ...

  2. UWP 判断windows mobile是使用的实体键还是虚拟按键

    最近在写启动屏幕,发现虚拟按钮会挡住,启动屏幕的最下面的元素,大概有50 px.可是有什么办法知道手机是用的实体键还是虚拟按键吗? 如下图.可以看到红色的部分显示了一点点.代码里设置的是60px. 在 ...

  3. 2.View绘制分析笔记之onMeasure

    今天主要学习记录一下Android View绘制三部曲的第一步,onMeasure,测量. 起源 在Activity中,所有的View都是DecorView的子View,然后DecorView又是被V ...

  4. HDFS操作

    HDFS操作 1.shell 1.1 创建目录 hadoop fs -mkdir 目录名(其中/为根目录) 1.2 遍历目录 hadoop fs -ls 目录名 1.3 删除目录 hadoop fs ...

  5. python 学习第二天

    由于换了博客,第一篇没有在博客园写,写在了开源中国上,链接地址为http://my.oschina.net/u/254063/blog/719289,大家有兴趣可以看看 一, python 数据类型 ...

  6. CollectionView水平和竖直瀑布流的实现

    最近在项目中需要实现一个水平的瀑布流(即每个Cell的高度是固定的,但是长度是不固定的),因为需要重写系统 UICollectionViewLayout中的一些方法通过计算去实现手动布局,所以本着代码 ...

  7. mac linux 删除一个文件下边所有文件和文件夹

    sudo rm -r -f 目录

  8. Code Complete 笔记—— 第一章

    软件的构建的主要流程: 定义问题 ( Problem Definition) 需求分析 (Requirements Development) 规划构建 (construction planning) ...

  9. JS 中 Array.slice() 和 Array.splice()方法

    slice slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array: var arr = ['A', 'B', 'C', 'D', 'E ...

  10. echo.js 延迟加载图片控件

    echo.js的github地址:https://github.com/toddmotto/echo   echo是一个独立的JavaScript.轻量级的.延迟图片加载插件,echo压缩后体积不到1 ...