如何優雅地使用 macOS

當時寫這篇文章的時候才接觸 mac 沒多久,使用快兩年以後,再次修訂了本文。php

0x00 前言

談及 macOS , 不少人喜歡和 Win 比個高下。在我看來, Win 雖在非編程類生態和易用性比 Mac 要好不少,可專業人士之因此專業是由於他能挑選適合的武器發揮最大的效用,不是嗎?node

適合本身的,能讓本身用最大效率生產或者是娛樂的,纔是更好的工具。python

Win 的優勢以下:linux

  • 優良的兼容性。
  • 因爲出自於什麼都愛作的微軟公司,從總體來講,VS,.NET, 遊戲性,兼容性,性能,新手上手速度來講,都是遙遙領先 Mac 的。

Win 的缺點以下:git

  • 微軟的戰線實在是拉的太長,什麼都想作,什麼都想壟斷。因而,與之服務密切相關的公司也就受到了 MS 的牽制。這對大公司來講,幾乎是不可以忍受的行爲。硅谷的公司使用微軟服務的也就接近 5%(可能有偏差)。
  • 糟糕的終端環境(DOS)和沒法與、*nux 世界的腳本友好相處使得系統的可定製性和進階操做性大大下降。
  • 雖然有 Everything,TotalCMD,AHK 這種神級輔助工具能夠知足定製要求。但因爲太高的學習成本(哈哈哈,混亂也是學習成本之一,AHK 語言真的很混亂啊,TC 實在是太不人性化了)。
  • Python 的環境配置實在是太頭疼了

Win 的缺點就是我切到 Mac 上面的緣由。github

macOS 的優勢以下:web

  • Mac 的好在於終端和美觀的圖形的結合。適合不是微軟技術棧和重度 Office 的用戶。
  • *nux 應用的方便以及很是容易與腳本文件配合出強大的組合技能。
  • 反觀 Win 上,則這種組合技能則在環境配置上和操做流暢度上差了不少。

macOS 的缺點以下:sql

  • 娛樂項目實在是少的要死。Metal 和 DirectX 相差不是一點點。
  • 軟件和有些少的不僅一點點。

本文從下面幾處入手,分別從下面幾個角度介紹了 macOSshell

▼ 如何優雅地使用 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
  • 社交通信

    • QQ
    • 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. 時間機器沒法完成備份

我有按期備份的習慣,在一次備份中,意外的發現怎麼備份都沒法備份完畢,通過幾回測試:

  1. 我首先猜想是硬盤問題,換了一塊硬盤,問題依舊。
  2. 複製了幾個大文件,感受也不太像是接口接觸不良的問題。
  3. 我認爲多是文件數量過多致使的問題。因而刪除掉 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 再次重修文字,不按期更新
相關文章
相關標籤/搜索