当时写这篇文章的时候才接触 mac 没多久,使用快两年之后,再次修订了本文。
0x00 前言
谈及 macOS , 很多人喜欢和 Win 比个高下。在我看来, Win 虽在非编程类生态和易用性比 Mac 要好很多,可专业人士之所以专业是因为他能挑选适合的武器发挥最大的效用,不是吗?
适合自己的,能让自己用最大效率生产或者是娱乐的,才是更好的工具。
Win 的优点如下:
- 优良的兼容性。
- 由于出自于什么都爱做的微软公司,从整体来说,VS,.NET, 游戏性,兼容性,性能,新手上手速度来说,都是遥遥领先 Mac 的。
Win 的缺点如下:
- 微软的战线实在是拉的太长,什么都想做,什么都想垄断。于是,与之服务密切相关的公司也就受到了 MS 的牵制。这对大公司来说,几乎是不能够忍受的行为。硅谷的公司使用微软服务的也就接近 5%(可能有误差)。
- 糟糕的终端环境(DOS)和无法与、*nux 世界的脚本友好相处使得系统的可定制性和进阶操作性大大降低。
- 虽然有 Everything,TotalCMD,AHK 这种神级辅助工具可以满足定制要求。但由于过高的学习成本(哈哈哈,混乱也是学习成本之一,AHK 语言真的很混乱啊,TC 实在是太不人性化了)。
- Python 的环境配置实在是太头疼了
Win 的缺点就是我切到 Mac 上面的原因。
macOS 的优点如下:
- Mac 的好在于终端和美观的图形的结合。适合不是微软技术栈和重度 Office 的用户。
- *nux 应用的方便以及非常容易与脚本文件配合出强大的组合技能。
- 反观 Win 上,则这种组合技能则在环境配置上和操作流畅度上差了很多。
macOS 的缺点如下:
- 娱乐项目实在是少的要死。Metal 和 DirectX 相差不是一点点。
- 软件和有些少的不只一点点。
本文从下面几处入手,分别从下面几个角度介绍了 macOS
- ▼ 如何优雅地使用 macOS
- 0x00 前言
- ▼ 0x01 系统内置
- 1.1 系统设置
- 1.2 自带软件
- 1.3 快捷键与触摸板
- ▼ 0x02 必备软件
- 2.1 必备软件 之 日常必备
- ▼ 2.2 必备软件 之 开发必备
- 2.2.1 GUI 应用
- 2.2.2 CMD 命令
- ▼ 2.3 必备软件 之 编程语言
- 2.3.1 Shell
- 2.3.2 Python
- ▼ 0x03 踩坑史
- ▼ 3.1 日常类
- 01. 时间机器无法完成备份
- 02. 下载站的软件包显示损坏
- ▼ 3.2 编程类
- 01. homebrew 的与 Python 的问题
- 0xEE 参考链接复制代码
0x01 系统内置
1.1 系统设置
General
- 默认浏览器 : Google Chrome
Decktop & Screen Saver
- 桌面 / 屏保
Language & Region
- 语言
- 地区设置
Security & Privacy
- 防火墙
Sharing
- Remote Control - SSH
Trackpad
- 设置手势
- 滚轮 Scrool Direction : Natural
1.2 自带软件
- iTunes
- iPhoto
- iMessage
- SpotLight -> Alfred 3
1.3 快捷键与触摸板
- cmd 为 command 按键,通常情况下为所有桌面程序通用性的快捷键。
- ctrl ,通常情况下是针对程序的功能进行加强,并且此功能往往是非 cmd 类(窗口操作,选择,复制粘贴等等)操作。
shift 按键通常用于加强操作。一般会让操作更进一步 or 相反操作。
cmd+tab =~ alt+tab 程序之间的切换
cmd+` 应用内窗口切换
cmd+h 窗口 hide
- cmd+m 窗口 minimize
- cmd+n 新建窗口
- cmd+o 打开
- cmd+s 保存
- cmd+shift+s 另存为
- cmd+p 打印 print
- cmd+w 关闭
cmd+q quit
cmd+a select all
- cmd+i show info
- cmd+n create a new folder
- cmd+f search
- cmd+c copy
- cmd+v paste
- cmd+delete 删除选中文件
cmd+shift+delete 清空回收站
cmd+= 放大
- cmd+- 缩小
- cmd+t 新建选项卡
cmd+r 刷新
cmd+shift+3 截取整个屏幕
- cmd+shift+4 截取选择区域
- cmd+shift+4+SPACE 截取选择窗口
- cmd+ 鼠标点击 -> 选中不连续文件
control+ 鼠标点击 -> 相当于 win 中右键点击
fn+left home
- fn+right end
- fn+up pageup
- fn+down pagedown
触摸板手势:
点击
- 单指点击 - 单击
- 单指滑动 - 滑动鼠标光标
- 双指点击 - 相当于 Windows 的鼠标右键
- 三指点击 - 划词查找
滑动与缩放
- 双指上下滑动 - 滚动
- 双指缩放 - 与 Android 上图片缩放一致
- 双指双击 - 只能缩放
- 双指旋转 - 旋转
- 双指左右滑动 - 应用内切换网页
- 双指头从右往左
- 三指头左右滑动 - 全屏幕 App 切换
- 大拇指和食中无名缩放 - launchpad
0x02 必备软件
2.1 必备软件 之 日常必备
启动器
- Alfred 3
- SpotLight
网络工具
- Chrome
社交通讯
- WeXin
图形图像
- Adobe PhotoShop CC
- Adobe PhotoShop LightRoom
- Sketch
- Annotate
- Camtasia 2
- Snagit
- ScreenFlow
- Final Cut Pro
- MPlayerX
- QuickTime
- iQiyi
- NeteaseMusic
- IINA
办公软件
- 欧陆词典
- Calibre
- Wiznote
- PDF Reader
- iBook
- Microsoft Office
- Work 套件:包括 pages, numbers, keynote
- XMind
- Airmail
- TeamViewer
- OmniFocus
- OmniGraffle
- OmniOutline
- OmniPlan
系统软件
- 搜狗输入法
- AppCleaner
- CleanMyMac
- VMWare
- BetterZip
- Caffeine / Amphetamine
- PopClip
- HandShaker
- AirDroid
2.2 必备软件 之 开发必备
2.2.1 GUI 应用
终端用户
- iTerm2
IDE
- PyCharm
- IntellijIDEA
- WebStorm
编辑器
- MacVim 配合 C-VIM
- Sublime Text 3
后台组件
- MySQL
- PostgreSQL
- Redis
- MongoDB
数据库管理软件
- Navicat
- Datagrip
- RoboMongo
- RDM
- Dash
网络工具
- SS QT
- Charles, Wireshark
Chrome
- Exporter : 百度云,需要离线安装
- AdBlock : 广告拦截
- AutoPatchWork : 链接下一页
- Axure RP Extension : Axure
- CSSViewer
- Dream Afar New Tab
- JSON Editor
- JSON View
- Octotree
- One-Click Extensions Manager
- Proxy SwitchyOmega
- React Developer Tools
- Redux DevTools
- Vue.js devtools
- Vimium
代码仓库
- Github Desktop
- SourceTree
GIS 相关
- ArcGIS
- QGIS
- PostgreSQL + PostGIS
2.2.2 CMD 命令
- if test ! $(which brew); then
- echo "Installing homebrew..."
- ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- fi
-
- # Make sure we’re using the latest Homebrew.
- brew update
-
- # Upgrade any already-installed formulae.
- brew upgrade --all
-
- # Install GNU core utilities (those that come with OS X are outdated).
- # Don’t forget to add `$(brew --prefix coreutils)/libexec/gnubin` to `$PATH`.
- brew install coreutils
- sudo ln -s /usr/local/bin/gsha256sum /usr/local/bin/sha256sum
-
- # Install some other useful utilities like `sponge`.
- brew install moreutils
- # Install GNU `find`, `locate`, `updatedb`, and `xargs`, `g`-prefixed.
- brew install findutils
- # Install GNU `sed`, overwriting the built-in `sed`.
- brew install gnu-sed --with-default-names
- # Install Bash 4.
- brew install bash
- brew tap homebrew/versions
- brew install bash-completion2
- # We installed the new shell, now we have to activate it
- echo "Adding the newly installed shell to the list of allowed shells"
- # Prompts for password
- sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
- # Change to the new shell, prompts for password
- chsh -s /usr/local/bin/bash
-
- # Install `wget` with IRI support.
- brew install wget --with-iri
-
- # Install RingoJS and Narwhal.
- # Note that the order in which these are installed is important;
- # see http://git.io/brew-narwhal-ringo.
- brew install ringojs
- brew install narwhal
-
- # Install Python
- brew install python
- brew install python3
-
- # Install ruby-build and rbenv
- brew install ruby-build
- brew install rbenv
- LINE='eval "$(rbenv init -)"'
- grep -q "$LINE" ~/.extra || echo "$LINE" >> ~/.extra
-
- # Install more recent versions of some OS X tools.
- brew install vim --override-system-vi
- brew install homebrew/dupes/grep
- brew install homebrew/dupes/openssh
- brew install homebrew/dupes/screen
- brew install homebrew/php/php55 --with-gmp
-
- # Install font tools.
- brew tap bramstein/webfonttools
- brew install sfnt2woff
- brew install sfnt2woff-zopfli
- brew install woff2
-
- # Install some CTF tools; see https://github.com/ctfs/write-ups.
- brew install aircrack-ng
- brew install bfg
- brew install binutils
- brew install binwalk
- brew install cifer
- brew install dex2jar
- brew install dns2tcp
- brew install fcrackzip
- brew install foremost
- brew install hashpump
- brew install hydra
- brew install john
- brew install knock
- brew install netpbm
- brew install nmap
- brew install pngcheck
- brew install socat
- brew install sqlmap
- brew install tcpflow
- brew install tcpreplay
- brew install tcptrace
- brew install ucspi-tcp # `tcpserver` etc.
- brew install homebrew/x11/xpdf
- brew install xz
-
- # Install other useful binaries.
- brew install ack
- brew install dark-mode
- #brew install exiv2
- brew install git
- brew install git-lfs
- brew install git-flow
- brew install git-extras
- brew install hub
- brew install imagemagick --with-webp
- brew install lua
- brew install lynx
- brew install p7zip
- brew install pigz
- brew install pv
- brew install rename
- brew install rhino
- brew install speedtest_cli
- brew install ssh-copy-id
- brew install tree
- brew install webkit2png
- brew install zopfli
- brew install pkg-config libffi
- brew install pandoc
-
- # Lxml and Libxslt
- brew install libxml2
- brew install libxslt
- brew link libxml2 --force
- brew link libxslt --force
-
- # gitbook autocover
- brew install pkg-config cairo pango libpng jpeg giflib
-
- # Install Cask
- brew install caskroom/cask/brew-cask
- brew tap caskroom/versions
-
- # aerial 屏保
- # https://github.com/JohnCoates/Aerial
- brew cask install aerial
- # https://github.com/sindresorhus/quick-look-plugins
- brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlprettypatch quicklook-csv betterzipql qlimagesize webpquicklook suspicious-package quicklookase qlvideo
-
- brew update && brew upgrade --all && brew cleanup && brew prune复制代码
2.3 必备软件 之 编程语言
2.3.1 Shell
MAC 使用的大多命令行工具来自于 FreeBSD , 并不是来自 GNU , 所以很多命令会与常规的 linux 命令大同小异。
而本人喜欢 GNU 系软件。
Shell 脚本可参考我的笔记。 第九节如何优雅的使用 Shell
_
说到 shell, 除了要使用 bash 的 shell 之外,zsh 的 shell 也值得一试。(不过大神 kennethreitz 最喜欢 fish shell )
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"复制代码
2.3.1.1 Oh My Zsh
2.3.2 Python
笔者虽然也接触过很多语言,都是粗浅一过,但无一精通,唯一可以稍微谈谈的就是 Python 语言。
当然,安装完毕自然是可以参考一下我的 第三节 Pythonista 的工具集
_
国内外网络环境不通畅,安装与配置环境这件小事也就成了一个大事情。
我对于 Python 版本的安装 和 Python 依赖包管理有三个阶段:
- 入门级
- 新手级
- 熟手级
2.3.2.1 入门级
最初是入门级,我配置环境和大部分的 Pythonista 一样,最初版:
- 面对 Python 版本的管理,干脆就是不管理,brew 安装一个 Python2 用于开发 Python2 的代码,brew install 一个 Python3 用于 Python3 的代码开发。
- 面对 Python 依赖包管理,干脆就是直接使用 virualenv 或者他的 wrapper 直接 venv 一个环境,然后 active 一下,接着 PIP install -r req.txt
2.3.2.2 新手级
- 面对 Python 版本的管理,使用 pyenv
- 面对 Python 依赖包管理,使用 pyenv virtualenv 出多个环境,然后切换环境就好了。
-
- brew install pipenv
- git clone https://github.com/yyuu/pyenv.git ~/.pyenv
- git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
- echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
- echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
- echo 'eval "$(pyenv init -)"' >> ~/.zshrc
- echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
-
- # 接着另开终端
- # 不喜写兼容代码,所有代码均向 3.5+ 靠拢
- v=3.5.2|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
- v=3.6.0|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
- v=2.7.11|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
- # 可以先用迅雷把 官网的 Anaconda3-4.4.0-MacOSX-x86_64.sh 下载下来,然后
- mv Anaconda3-4.4.0-MacOSX-x86_64.sh ~/.pyenv/cache/ && pyenv install anaconda3-4.4.0
-
- # 设置 Global Python 为 2.7.11, 备注:尽量不要把 Py3 设置为全局,否则由于 Homebrew 本身有一些依赖是依赖于 Py2 的,这样容易出现一些奇怪的问题。
- pyenv global 2.7.11
- pip install -i https://pypi.doubanio.com/simple requests
- # 下面这个是用于安装基本的代码补全功能
- pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy
-
- # 创建最常用 Py3 虚拟环境
- pyenv virtualenv 3.5.2 py3-daily
- pyenv activate py3-daily
- pip install -i https://pypi.doubanio.com/simple requests
- pip install -i https://pypi.doubanio.com/simple beatutifulsoup4
- pip install -i https://pypi.doubanio.com/simple ipython[notebook]
- pip install -i https://pypi.doubanio.com/simple jupyter
- # 下面这个是用于安装基本的代码补全功能
- pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy
-
- # 创建 Anaconda 的数据科学 AI 环境
- pyenv virtualenv anaconda3-4.4.0 py3-ai
- pyenv activate anaconda3-4.4.0/envs/py3-ai
- pyenv deactivate
-
- # 进入一个项目之后
- pyenv activate py3-proj
- pip install -r requirements/local.txt
- pip install -r requirements/prod.txt
- # requirements/local.txt 与 requirements/prod.txt 依赖于 requirements/base.txt复制代码
2.3.2.3 熟手级
其实,第一种入门级管理方式弊病在于,python 版本太粗糙,之前遇到一个 python3.3 的问题,python3.4 就解决了。而为了避免这种奇葩的版本差异带来的潜在风险,开发与部署一般要锁死 Python 版本。
即便是解决了入门级管理方式带来的版本管理粗糙的问题,同样的,依赖也要锁死。一个项目对应一种环境该多好 通过 PIP 的确可以用 freeze 输出为 txt 达到锁死的目的。但个人认为,这个还不够,至少要知道依赖树之类的吧?还要知道哪些东西是可以更新的吧?
而且,就应该像 node 项目里面的 package.json 一样,把依赖什么乱七八糟的东西都放进去才好。
- 面对 Python 版本和依赖包管理,使用 pipenv
这代表着,只要一个就行了。
2.3.3 JavaScript 与 Node 环境
nvm && npm && yarn
nvm 主要用户管理 node 的版本,linux / mac only ,windower 最好下载 node 版本安装,记得配置环境变量。
npm 主要用户管理包,国内人喜欢使用 cnpm, 但是 cnpm 包管理比较渣,所以一般情况下选择 Yarn 配合管理
- npm install cnpm
- cnpm install yarn -g
- # 查看下载源
- # yarn config get registry
- yarn config set registry https://registry.npm.taobao.org复制代码
yarn 在使用包管理的时候会分析依赖,这对总是 BUG 不断的 node_module 简直是福音。
2.3.4 Java
Java 环境安装稍微有一丢丢蛋疼。特别是多版本管理。
TODO: 以后补充 JAVA 环境安装复制代码
2.4 必备配置 之 dotfiles
详细内容请见 yadotfiles
- 依照我个人的习惯,在 OhMyZsh 基础上增加了个人习惯的环境变量的配置,一些函数的封装。
比如,当我在写本文的目录中输入 todos, 就可以查看该我在写文章的时候里面挖了多少个还没有填上去的 TODO(坑)。如下
- 3e383c54 (Micheal Gardner 2017-11-18 12:40:38 +0800 422) ## 0xEE TODO TO LIST
- ae86b7cb (Micheal Gardner 2017-11-19 21:39:49 +0800 245) ### 5. TODO
- c0d51990 (Micheal Gardner 2017-11-22 16:42:08 +0800 552) TODO: 以后补充 JAVA 环境安装
- c0d51990 (Micheal Gardner 2017-11-22 16:42:08 +0800 561) 比如,当我在写本文的目录中输入 todos, 就可以查看该我在写文章的时候里面挖了多少个还没有填上去的 TODO(坑)。复制代码
详细请参考 yadotfiles
0x03 踩坑史
3.1 日常类
01. 时间机器无法完成备份
我有定期备份的习惯,在一次备份中,意外的发现怎么备份都无法备份完毕,经过几次测试:
- 我首先猜测是硬盘问题,换了一块硬盘,问题依旧。
- 复制了几个大文件,感觉也不太像是接口接触不良的问题。
- 我认为可能是文件数量过多导致的问题。于是删除掉 node_module 后再次备份,备份成功。当然,这也有一定概率是误打误撞。毕竟从概率学上讲,坏掉的钟还能一天有两次时间是对的呢。
外接硬盘的时候,将网络关闭即可。
02. 下载站的软件包显示损坏
有的时候并不是软件损坏,而是 macOS 的安全配置中配置关掉了未识别出的 App
在终端中开启这个选项,并在安全与隐私处点上 anywhere 即可。
sudo spctl --master-disable复制代码
3.2 编程类
01. homebrew 的与 Python 的问题
在 Python 中执行下面的代码的时候总是报错:
- ip = socket.gethostbyname(socket.gethostname())
- # socket.gaierror: [Errno 8] nodename nor servname provided, or not known
-
- # 最后发现是因为设置主机名没有设置好
- sudo scutil --set ComputerName "newname"
- sudo scutil --set LocalHostName "newname"
- sudo scutil --set HostName "newname"
- dscacheutil -flushcache
- # 然后重启电脑即可复制代码
如果本机安装了 Homebrew 如果后面使用 PyEnv 或者 Anaconda 并且设置当前环境为默认 Python 为 Python3(不建议这么搞), 但是如果偏偏要把默认的 Python 版本换成 Python3, 会弹出一些 pythonpath
的问题,执行下面命令即可暂时屏蔽这个问题,但是没有隐患则不清楚。
mv /usr/local/lib/python2.7/site-packages/sitecustomize.py /usr/local/lib/python2.7/site-packages/sitecustomize.py.back复制代码
02. Homebrew 安装过去的文件
0xEE 参考链接
- 本文部分命令行安装借鉴了 dev-setup
ChangeLog:
- 2016-02 确定大致内容
- 2017-06-28 重修文字,调整文章结构,Python 环境 和 Homebrew 安装环境
- 2017-10-05 再次重修文字,不定期更新