16年的学生生涯这个月彻底结束了, 在家休养了几天之后. 我就很快赶到深圳入职了, 以后就从一个学生变成Tencenter啦. 公司竟然突然很壕的允许我们Android工程师也配置iMac. 虽然一直没有用过,但是早就对mac用来写代码的便利性有所耳闻了, 所以我就毫不犹豫的在入职时选择了imac作为开发电脑. 第一次使用mac,有一些需要注意的点这里做一下记录.
mac和unix是一家亲, 命令行非常方便, 这也是mac非常大的一个优点. 但是mac自带的终端比较简单, 功能不多, 所以这里我们换用”MAC下最好用的终端工具”— iTerm2. 这里记录几个概念
如果我们不用GUI界面登录linux, 那么进入的那个黑乎乎的界面就是所谓的终端了. mac也是同理, 只不过我们每次一打开mac就自动进入了GUI界面. 在GUI界面需要像终端那样和系统交互, 就需要终端模拟器这个软件. mac系统自带的terminal软件就是一个终端模拟器. 但是最这个软件的功能比较简陋, 所以我们选用iTerm2这个软件. iTerm2具体好在哪里这里就不在赘述了, 下载iTerm2的时候会有介绍.
这个概念是比较容易和终端混淆的一个概念. 简单的理解就是终端模拟器只是一个壳, 里面包裹了shell. shell是命令行解释器, 是我们和内核打交道的桥梁. shell有很多种, 负责把我们我们在命令行输入的命令解释执行. 大部分shell的命令的格式都是差不多的. OS X系统和大部分的linux系统默认安装的shell都是bash. 可以使用命令查看自己当前的mac系统有哪些shell
cat /etc/shellsOS X系统一般自带了zsh这个shell. 使用命令
chsh -s /bin/zsh就可以成功的从bash切换到zsh了. zsh一般被公认为最强的shell. 但是由于其配置过于繁琐, 所以导致很多人看到它就打退堂鼓. 于是GitHub上有人写了一个开源项目oh-my-zsh, 只要安装了这个开源项目, 就可以一键配置zsh shell. 具体安装方法一搜一大把,这里忽略.
作为程序员, 肯定是需要配置各种环境变量的了. 在windows上配置环境变量是比较简单的, 可以直接在gui界面完成. 也可以在CMD窗口使用SET命令完成. mac系统中一般使用export命令将本地变量输出为环境变量,使用$变量名取环境变量的值.
homebrew是一个包管理器, 类似于Ubuntu的apt-get, 用来安装mac没有预装但是日常开发中需要的东西. homebrew会把软件安装在独立的目录, 并建立一个软连接到/usr/local. 下面介绍一个homebre使用的各个目录. * Cellar:文件夹存放的是所有包安装所在路径,包括二进制,文档和配置文件,按照这样Cellar/包名/版本号/的形式来安放。 * opt:由于版本号随着跟新而改变的,所以需要一个固定不变的路径作为我们访问二进制和文档的路径,这就是opt的作用。 * Homebrew:brew程序所在路径. * bin:所有包安装之后二进制都会链接到这个路径下 * share:所有包安装之后的文档都会链接到这个路径下 * etc:同上,所有包的配置文件 * lib:同上,所有包相关库文件 * Caskroom:app文件
我的工作项目的编译需要的java版本要求 > 8. 但是日常使用的工具, 如pycharm,intelij要求使用java8. 平时需要体验最新的一些特性,也需要使用最新的java8.所以我们需要在mac上保持多个jdk版本共存. 1. 首先使用brew cask安装java8 和 java6
brew cask install java6 brew cask install javabrew cask中已经移除了java7, oracle官网也显示不再提供java7的下载. 所以想装上java7现在还是需要费一点功夫的. 2. 使用brew安装jenv
brew install jenv 添加环境变量 $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc $ echo 'eval "$(jenv init -)"' >> ~/.zshrc 使用jenv add将java加入管理 5.使用jenv管理java版本 配置全局Java版本 $ jenv global 1.7配置当前目录的Java版本
$ jenv local 1.7这种方式会只改变当前所在目录的Java版本,可以通过如下命令取消
$ jenv local --unset配置shell实例的版本
jenv shell 1.8这种配置方式,只会影响当前shell窗口。 配置JVM Options
$ jenv global-options "-Xmx512m"python多版本共存的问题比较特殊, 因为系统本来就自带一个python.
当我们没有安装任何版本的python时, 直接打python命令你会发现也可以进入一个python命令行. 这个python在哪里呢. 我们使用which python命令, 会发现这个python的路径在/usr/bin/python. 看了一些其他的资料说这个python是个链接, 链接到/System/Library/Frameworks/Python.framework/Versions/2.7/python2.7. 实测后发现并不是, 这个python既不是硬链接也不是软链接, 与python2.7比较文件大小后发现也不一样, 所以这个python就是一个普通的可执行文件. 不过进入这个/usr/bin/python之后,输出sys.path发现这个python的包地址都在/System/Library/Frameworks/Python.framework/Versions/2.7这个路径里面. 所以这两个路径还是有一些关联的. (这里比较迷惑, 如果有错漏, 欢迎拍砖指出)
重启iTerm2后, which python会发现pyenv安装的python存放于~/.pyenv/… 中.
tips: 如果使用brew安装python, python会被存放于/Library/Frameworks/Python.framework/Versions/x.x中
建议将全局的python版本设置为2.7.1, 保持与自带的python版本一致. 保证系统其他需要默认python的位置正常运行.
在.zshrc文件末尾添加的
eval “$(pyenv init -)”会在打开shell时执行, 这段代码在PATH的最前端插入了python的path. 这个pthon不是真正的python程序, 它只是一个转发器, 当执行到这个python时, 它会按顺序查找对应版本的python分发给对应程序. 分发的顺序依次是: * PYENV_VERSION环境变量的版本(当前shell) * 当前目录的.python-version文件中记录的版本号.如果当前目录找不到, 会递归的向上找, 所以父目录设置了版本号会影响子目录.(当前目录及其父目录) * pyenv安装目录中的version文件中记录的版本号.(全局的)