MAC使用注意事项

来源:互联网 发布:什么是creis中指数据 编辑:程序博客网 时间:2024/06/06 03:12

MAC使用注意事项

16年的学生生涯这个月彻底结束了, 在家休养了几天之后. 我就很快赶到深圳入职了, 以后就从一个学生变成Tencenter啦. 公司竟然突然很壕的允许我们Android工程师也配置iMac. 虽然一直没有用过,但是早就对mac用来写代码的便利性有所耳闻了, 所以我就毫不犹豫的在入职时选择了imac作为开发电脑.
第一次使用mac,有一些需要注意的点这里做一下记录.

iTerm2 + zsh + oh-my-zshs

mac和unix是一家亲, 命令行非常方便, 这也是mac非常大的一个优点. 但是mac自带的终端比较简单, 功能不多, 所以这里我们换用”MAC下最好用的终端工具”— iTerm2.
这里记录几个概念

终端

如果我们不用GUI界面登录linux, 那么进入的那个黑乎乎的界面就是所谓的终端了. mac也是同理, 只不过我们每次一打开mac就自动进入了GUI界面. 在GUI界面需要像终端那样和系统交互, 就需要终端模拟器这个软件. mac系统自带的terminal软件就是一个终端模拟器. 但是最这个软件的功能比较简陋, 所以我们选用iTerm2这个软件. iTerm2具体好在哪里这里就不在赘述了, 下载iTerm2的时候会有介绍.

shell

这个概念是比较容易和终端混淆的一个概念. 简单的理解就是终端模拟器只是一个壳, 里面包裹了shell. shell是命令行解释器, 是我们和内核打交道的桥梁. shell有很多种, 负责把我们我们在命令行输入的命令解释执行. 大部分shell的命令的格式都是差不多的. OS X系统和大部分的linux系统默认安装的shell都是bash. 可以使用命令查看自己当前的mac系统有哪些shell

cat /etc/shells

zsh

OS X系统一般自带了zsh这个shell. 使用命令

chsh -s /bin/zsh

就可以成功的从bash切换到zsh了.
zsh一般被公认为最强的shell. 但是由于其配置过于繁琐, 所以导致很多人看到它就打退堂鼓. 于是GitHub上有人写了一个开源项目oh-my-zsh, 只要安装了这个开源项目, 就可以一键配置zsh shell. 具体安装方法一搜一大把,这里忽略.

环境变量及各文件执行顺序

作为程序员, 肯定是需要配置各种环境变量的了. 在windows上配置环境变量是比较简单的, 可以直接在gui界面完成. 也可以在CMD窗口使用SET命令完成.
mac系统中一般使用export命令将本地变量输出为环境变量,使用$变量名取环境变量的值.

几种shell的区别

  • 交互式shell
    交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式
  • 非交互式shell
    shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了
  • 登录shelll
    是需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell)
  • 非登录shell
    当然就不需要输入用户名和密码即可打开的Shell
  • 区分交互式shell和非交互式shell
    使用命令echo $- , 看打印出来的字符串是否含有i字符. 如果有,代表interactive(交互式shell)
  • 区分是否登录shell
    使用命令ps 查看当前shell进程(zsh,bash等)前是否有-标识.如果有-, 则表示是login-shell.
    当我们用iTerm2打开zsh时, 使用ps命令查看进程名, 可以看到进程名是-zsh, 所以我们在mac上用iTerm2默认打开的是login-shell.

zsh启动时执行的文件顺序

  • 首先从/etc/zshenv读取, 不可以覆盖这个文件
  • (忽略)接下来的行为可以被RCS 和 GLOBAL_RCS 选项修改. RCS选项影响所有的启动文件. GLOBAL_RCS选项只影响全局启动文件(这里指的是路径以/开头的文件). 如果其中一个选项没有设置, 所有接下来的文件都不会被读取. 一个以$ZDOTDIR路径开头的文件去重新设置生效GLOBAL_RCS也是可以的. RCS和GLOBAL_RCS 都拥有一个默认设置
  • 接下来会从$ZDOTDIR/.zshenv读取命令. 如果当前是一个login-shell, 接下来会从/etc/zprofile读取命令, 然后是$ZDOTDIR/.zprofile.
  • 如果当前shell是一个交互式shell, 接下来会从/etc/zshrc然后是$ZDOTDIR/.zshrc. 最后, 如果当前shell是登录shell, /etc/zlogin$ZDOTDIR/.zlogin会加载
  • 如果$ZDOTDIR变量没设置, 默认使用HOME变量.
  • 根据安装方案的不同, 上面说的/etc中的目录也可能在其他目录
  • 因为每个zsh的实例都会加载/etc/zshenv,所以这个文件应该尽可能的小.用一个if判断把那些并不需要每个shell都执行的语句包起来是一个好主意.
  • 当zsh被sh或者ksh调起的时候, 会source /etc/profile 和 ~/.profile.
    更加详细额相关信息, 可以参考stackoverflow相关回答
    以及man zsh.PATH变量的设置可以参考Mac OS X 中 Zsh 下 PATH 环境变量的正确设置

homebrew

homebrew是一个包管理器, 类似于Ubuntu的apt-get, 用来安装mac没有预装但是日常开发中需要的东西.
homebrew会把软件安装在独立的目录, 并建立一个软连接到/usr/local. 下面介绍一个homebre使用的各个目录.
* Cellar:文件夹存放的是所有包安装所在路径,包括二进制,文档和配置文件,按照这样Cellar/包名/版本号/的形式来安放。
* opt:由于版本号随着跟新而改变的,所以需要一个固定不变的路径作为我们访问二进制和文档的路径,这就是opt的作用。
* Homebrew:brew程序所在路径.
* bin:所有包安装之后二进制都会链接到这个路径下
* share:所有包安装之后的文档都会链接到这个路径下
* etc:同上,所有包的配置文件
* lib:同上,所有包相关库文件
* Caskroom:app文件

java多版本

我的工作项目的编译需要的java版本要求 > 8. 但是日常使用的工具, 如pycharm,intelij要求使用java8. 平时需要体验最新的一些特性,也需要使用最新的java8.所以我们需要在mac上保持多个jdk版本共存.
1. 首先使用brew cask安装java8 和 java6

brew cask install java6brew cask install java

brew cask中已经移除了java7, oracle官网也显示不再提供java7的下载. 所以想装上java7现在还是需要费一点功夫的.
2. 使用brew安装jenv

brew install jenv
  1. 添加环境变量
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
  1. 使用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命令你会发现也可以进入一个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这个路径里面. 所以这两个路径还是有一些关联的.
(这里比较迷惑, 如果有错漏, 欢迎拍砖指出)

使用pyenv安装pyenv

  1. 首先使用homebrew安装pyenv
brew install pyenv
  1. 配置pyenv的环境变量
    在.zshrc末尾添加
eval “$(pyenv init -)”
  1. 使用pyenv安装其他版本python
pyenv install --lsit    //查看可以安装的各个版本的pythonpyenv install 3.6.1      // 安装某个具体版本的python

重启iTerm2后, which python会发现pyenv安装的python存放于~/.pyenv/… 中.

tips: 如果使用brew安装python, python会被存放于/Library/Frameworks/Python.framework/Versions/x.x中

pyenv切换python版本

pyenv global 2.7.1  // 将全局python设置为2.7版本pyenv local 3.6.1 // 将当前目录的python版本设置为3.6版本

建议将全局的python版本设置为2.7.1, 保持与自带的python版本一致. 保证系统其他需要默认python的位置正常运行.

pyenv原理

在.zshrc文件末尾添加的

eval “$(pyenv init -)”

会在打开shell时执行, 这段代码在PATH的最前端插入了python的path. 这个pthon不是真正的python程序, 它只是一个转发器, 当执行到这个python时, 它会按顺序查找对应版本的python分发给对应程序.
分发的顺序依次是:
* PYENV_VERSION环境变量的版本(当前shell)
* 当前目录的.python-version文件中记录的版本号.如果当前目录找不到, 会递归的向上找, 所以父目录设置了版本号会影响子目录.(当前目录及其父目录)
* pyenv安装目录中的version文件中记录的版本号.(全局的)

原创粉丝点击