當時寫這篇文章的時候才接觸 mac 沒多久,使用快兩年以後,再次修訂了本文。php
談及 macOS , 不少人喜歡和 Win 比個高下。在我看來, Win 雖在非編程類生態和易用性比 Mac 要好不少,可專業人士之因此專業是由於他能挑選適合的武器發揮最大的效用,不是嗎?node
適合本身的,能讓本身用最大效率生產或者是娛樂的,纔是更好的工具。python
Win 的優勢以下:linux
Win 的缺點以下:git
Win 的缺點就是我切到 Mac 上面的緣由。github
macOS 的優勢以下:web
macOS 的缺點以下:sql
本文從下面幾處入手,分別從下面幾個角度介紹了 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 參考連接複製代碼
General數據庫
Decktop & Screen Saver
Language & Region
Security & Privacy
Sharing
Trackpad
shift 按鍵一般用於增強操做。通常會讓操做更進一步 or 相反操做。
cmd+tab =~ alt+tab 程序之間的切換
cmd+` 應用內窗口切換
cmd+h 窗口 hide
cmd+q quit
cmd+a select all
cmd+shift+delete 清空回收站
cmd+= 放大
cmd+r 刷新
cmd+shift+3 截取整個屏幕
control+ 鼠標點擊 -> 至關於 win 中右鍵點擊
fn+left home
觸摸板手勢:
點擊
滑動與縮放
啓動器
網絡工具
社交通信
圖形圖像
辦公軟件
系統軟件
終端用戶
IDE
編輯器
後臺組件
數據庫管理軟件
網絡工具
Chrome
代碼倉庫
GIS 相關
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複製代碼
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)"複製代碼
筆者雖然也接觸過不少語言,都是粗淺一過,但無一精通,惟一能夠稍微談談的就是 Python 語言。
固然,安裝完畢天然是能夠參考一下個人 第三節 Pythonista 的工具集
_
國內外網絡環境不通暢,安裝與配置環境這件小事也就成了一個大事情。
我對於 Python 版本的安裝 和 Python 依賴包管理有三個階段:
最初是入門級,我配置環境和大部分的 Pythonista 同樣,最第一版:
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複製代碼
其實,第一種入門級管理方式弊病在於,python 版本太粗糙,以前遇到一個 python3.3 的問題,python3.4 就解決了。而爲了不這種奇葩的版本差別帶來的潛在風險,開發與部署通常要鎖死 Python 版本。
即使是解決了入門級管理方式帶來的版本管理粗糙的問題,一樣的,依賴也要鎖死。一個項目對應一種環境該多好 經過 PIP 的確能夠用 freeze 輸出爲 txt 達到鎖死的目的。但我的認爲,這個還不夠,至少要知道依賴樹之類的吧?還要知道哪些東西是能夠更新的吧?
並且,就應該像 node 項目裏面的 package.json 同樣,把依賴什麼亂七八糟的東西都放進去纔好。
這表明着,只要一個就好了。
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 簡直是福音。
Java 環境安裝稍微有一丟丟蛋疼。特別是多版本管理。
TODO: 之後補充 JAVA 環境安裝複製代碼
詳細內容請見 yadotfiles
好比,當我在寫本文的目錄中輸入 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
我有按期備份的習慣,在一次備份中,意外的發現怎麼備份都沒法備份完畢,通過幾回測試:
外接硬盤的時候,將網絡關閉便可。
有的時候並非軟件損壞,而是 macOS 的安全配置中配置關掉了未識別出的 App
在終端中開啓這個選項,並在安全與隱私處點上 anywhere 便可。
sudo spctl --master-disable複製代碼
在 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複製代碼
ChangeLog: