Mac
- mac-setup/Mac 开发配置手册: 国外人写的,介绍mac的使用。
- Mac技巧索引: 《TacTalk人生元编程》作者整理。
1. 权限问题
如果有过linux基础的人,就会明白这个权限问题。其实Unix的系统,都是一个root用户,然后自己创建其他用户使用。用户和用户之前通过权限互相独立。
对一般的用户而言,不需要太关注这个权限问题,但是对程序员来说,这一点应该是必知必会的。不然我们常常会被npm install -g xx
出现的报错而不知所措。
1.1. root:“超级用户”
在 Mac OS X 中,在安装系统时将会创建一个名为 root 的超级用户。 root 用户对计算机上的所有文件和文件夹都有完全的访问权限,并且还具有一般用户没有的其他管理访问权限。在计算机的正常使用中,您并不需要以 root 用户的身份登录。事实上,默认情况下, root 用户是被禁用的。
1.2. 普通用户
mac系统创建的用户,会和root在一个group中,一般叫做staff
或者admin
。root用户的权限高于其他用户。
1.3. 定义的权限
- 读取 (r--)
- 写入 (-w-)
- 执行 (--x)
当您可以做到所有三种操作时,您就拥有了“rwx”权限。文件夹的权限与此类似。具有内含文档的文件夹的只读权限,您可以打开和读取其中的文档,但不能保存对该文件夹所做的更改,也不能为该文件夹添加新的文档。只读 (r--) 权限是常用于客户访问的文件共享。
1.4. 所有者、组、其他
像“rwx”和“r-x”这样的简写描述了一个用户或一个实体的权限。每个文件或文件夹的权限设置都定义了三个实体的访问能力:所有者、组和其他。
- 所有者: 所有者通常是创建该文件的用户。在您的 root 目录下的几乎所有文件和文件夹都将您的用户名列作所有者。
- 组: Admin 用户就是一些被称为“staff”和“admin”的组的成员。超级用户“root”是这些及其他一些组的成员。通常情况下,所有文件和文件夹都被分配到“staff”、“admin”或“wheel”等组中。
- 其他: 其他是指某个文件或文件夹的所有者或组成员之外的其他所有用户。
因为每个实体都有其自己的权限,如一个完整的权限组可能为“-rwxrw-r--”。前面的连字符指定该项目是一个文件而不是文件夹。文件夹的权限以“d”开头,如“drwxrw-r--”。“d”代表 directory(目录),表示文件夹。
1.5. 使用 Terminal 查看权限
在终端中输入list -l
,你会得到类似如下的信息:
total 0
drwx------ 6 leohxj staff 204B Jan 27 21:50 Applications
drwx------+ 3 leohxj staff 102B Mar 11 14:54 Desktop
drwx------+ 7 leohxj staff 238B Jan 18 22:11 Documents
drwx------+ 5 leohxj staff 170B Mar 10 23:39 Downloads
drwx------@ 16 leohxj staff 544B Mar 11 14:54 Dropbox
drwx------@ 62 leohxj staff 2.1K Jan 17 23:22 Library
drwx------+ 4 leohxj staff 136B Jan 3 21:37 Movies
drwx------+ 7 leohxj staff 238B Jan 6 09:45 Music
drwx------+ 8 leohxj staff 272B Feb 7 15:23 Pictures
drwxr-xr-x+ 6 leohxj staff 204B Jan 6 10:28 Public
drwx------
:这一段是对文件或者目录的用户权限描述,d代表目录,后面九个字符,每三个为一组,代表所有者,组成员和其他用户。leohxj
:这一栏表示所有者。staff
: 这一栏表示所在组。
1.6. 系统相关
- **Startupizer 2: 管理自启动项工具,可根据日期或标签设置不同启动。MAS购入,68RMB。
- MacUpdate Desktop 6: app安装更新工具。我觉得可以替换brew cask了吧,起码能看什么软件有更新。下载资源包括了MAS和直接下载。
- AppCleaner: app卸载工具。
- DaisyDisk: 显示磁盘状态的工具。
- OptimApps: 系统优化工具,包含三个功能。
- F.lux: 根据日出日落调整屏幕色温,保护视力。个人喜欢设置4000-5500。
- caffeine: App Store下载,免费。取消自动休眠的功能。
- Yolink: 临时存储文件或内容的工具,感觉不是很必要。
- Timing: 付费软件,统计 Mac 使用习惯,每天做了什么。
- fliqlo: 时钟屏保。
- BOOM 2: 音效增强工具。
- CheatSheet: 显示快捷键操作。
1.7. 提高效率的工具
- Hider 2: 隐藏系统文件的工具。
- xtraFinder:Finder的插件。
- alfred 2: 效率神器/快速启动。一定要购买powerpack配合使用哦!
- 1Password: 最佳密码管理工具。
- TextExpander: 最佳输入辅助工具。
- Manico: 付费软件,通过option快速切换应用程序。
- Karabiner: 修改按键映射。
- Seil: 配合karabiner,修改CapsLock映射。
- AutoKeyboard: MAS免费购入。
- BetterTouchTool: 自定义手势操作,以及鼠标,按键等。最明显的帮助是让我的鼠标中间左右切换起作用了。
- ShortCat: 快速移动鼠标软件, 默认
shift+command+space
查找,按住control
+对应字母进行快速切换。 - [Moom]: 付费软件,68元,其实sizeup也是付费的。但我更看好moom的拖放,和自定义窗口大小。
- Bartender: 官网下载,付费软件。管理右上角menu bar图标的软件。
- SynergyKM: 可以使多台设备共用一套键鼠。
- popClip:付费软件,30元,文本选择辅助工具,高效。
- ClipMenu: 付费软件,6元,剪切板历史管理工具。不如windows下的ditto好用。
- XMind: 思维导图软件,先用这个免费版本,熟悉熟悉。
jitouch2: 触控板辅助工具。删除的原因是全屏的手势比较容易误操作,且不一定所有程序都支持。sizeup: 窗口管理工具,类似的还有moom, divvy。这软件开发的公司其他作品也都很高效。
1.8. 设计相关
- Skitch: Evernote出品,截屏、标注工具。
- LilyView: 图片查看工具。
- 1000 Open Type Fonts: 字体相关软件。
- [SnapRuler]: MAS购入,68RMB,标尺以及截图工具。
1.9. 开发工具
- xCode: mac下开发必备吧。
- iTerm2: 据说是最好的终端。
- SublimeText3: 最好的文本编辑器。
- Dash: 超全文档查看工具。
- SourceTree: git GUI工具。
- cotnerstone: SVN客户端。
- Abode系列: 其实也就是用用Photoshop。
- MAMP: 本地服务器。
- CodeRunner 2: 代码直接编辑预览工具。
- FoobarPlus: 运行代码的工具。
- Genymotion: 安卓模拟器。
- Textual 5: MAS购入,免费时获取。IRC聊天工具。
- OhMyStar: MAS购入,68RMB,分类github star项目。
- Robomongo: MongoDB GUI工具。
- WebStorm: web开发IDE.
- Vim
2. 快捷键
- 屏幕切换,command+数字键。
- 截图: shift+command+4。
- aflred2:
, 已换成alt+s
CapsLock
.
Mac与PC上手最大的不同,肯定就是按键问题了。我喜欢将普通键盘上的win与alt映射为mac下的option和command键。这样键盘的布局与标准的苹果键盘相似。
通常PC下很多ctrl的组合操作,都能对于为command的组合操作。
通过一段时间的使用,我发现我切换程序多使用的是alfred2
+Manico
+快捷键
方式.
option
按键主要用于切换程序,shift+command+其他
主要用于程序的功能。
2.1. 全局快捷键
先提一点,我喜欢把Mac键盘最上方的那一排保持F1~F12的功能,快捷功能通过fn的组合键形式实现,实现这一点请勾选:System Perference -> Keyboard -> Use all f1, f2, etc keys as standard function keys.
修改快捷键在:System Perference -> Keyboard -> Shortcuts中。
我的主要修改如下:
Lunchpad & Dock:
- Turn Dock Hiding On/Off: 取消设置。
- Show Launchpad:
F4
.
Display:
默认。
Mission Control:
- Mission Control:
Ctrl+top
. - Show Desktop:
F11
. - Move left a space:
Ctrl+left
. - Move right a space:
Ctrl+right
. - Switch to Desktop:
Command+num
. 我个人是创建了四个桌面。
Keyboard:
默认。
Input Sources:
- Select the previous input source:
Command+Space
. - Select next source in Input menu: 取消设置。
Screen Shots:
默认。
Services:
默认。
Spotlight:
- Show Spotlight search field: 取消设置。
- Show Spotlight window: 取消设置。
Accessibility:
默认。
App Shortcuts:
这里的内容,是设置全局的快捷键,也可以指定某个软件内的快捷键,但是需要设置对应的菜单项名称才OK。比如我设置Finder中的New Terminal Here
, (此功能是通过Extra Finder插件实现的)。则添加:
- Finder.app:
New Terminal Here
, 设置ctrl+command+t
.
2.2. 参考资料
3. 终端
3.1. 常用终端命令
先插一句,说一个好玩的,可以查看最近经常使用的命令,在终端执行:
history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[ a ]" " CMD[ a ]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t |sort -nr | nl | head -n10
- clear: 清除屏幕。
- pwd: 查看当前路径。
- cd: 进入目录,常常配合一些字符使用。比如:
..
: 返回上级目录。~
: 返回用户主目录。-
: 返回上次操作目录。/
: 返回系统根目录。
- ls: 列出目录信息。
- mkdir: 创建目录。
- touch: 创建文件。
- cp: 拷贝文件。
- mv: 移动文件,或者重命名文件。
- rm:删除文件。
- cat: 查看文件内容。
- grep: 查找文本信息。
- man: 手册命名,查看各个命名的帮助。
3.2. 系统操作
- open: 可以打开文件,目录和程序。通过man open查看具体内容,我常用来在终端下打开Finder, 比如
open .
。Windows下对应的使用explorer
命令。或者打开Applications下的程序,使用open "/Applications/Sublime Text.app" test.md
。
3.3. zsh
shell是终端与系统交互的一种语言,默认的是bash,但是最好的是zsh。安装方式我使用:brew install zsh
。
替换bash的方式:chsh -s /bin/zsh
。关闭终端,再次打开即为zsh。
注意:之前我们使用bash,我们为了使用brew安装的软件,修改了~/.bash_prorile
文件,新的zsh自己也有配置文件,是~/.zshrc
,需要将配置拷贝到~/.zshrc
中。
或者在安装完oh-my-zsh后,执行echo export PATH='/usr/local/bin:$PATH' >> ~/.zshrc
。
oh-my-zsh
由于zsh的配置是很复杂的,所以有这个一个开源项目oh-my-zsh,帮助我们简化zsh的配置。
官网有自动安装的方法,我选择的是: curl -L http://install.ohmyz.sh | sh
。
安装完成后,重启终端就能看到界面的变化了。zsh的配置文件是~/.zshrc
,配色对应的是ZSH_THEME
.
oh-my-zsh插件
oh-my-zsh的强大之处还在于提供了完善的插件系统。相关的文件存储在~/.oh-my-zsh/plugins
中,默认提供了100多种。。。
默认提供的插件是git,需要添加的话,修改~/.zshrc
中plugins=(git autojump)
即可。
自动跳转
z和autojump。是两个可以实现自动跳转的插件,都是可以通过brew下载的。
我目前使用的是autojump
,通过brew install autojump
下载,并且在~/.zshrc
中修改plugins=(git autojump)
。重启终端。
使用就可以使用j来代替cd命令了,并可以添加自定义目录,具体使用说明参考autojump的文档或者autojump --help
。
alias设置
alias是一个shell命令,可以理解为别名,就是可以让我们对一些命名重新命名,这样在终端中,我们就可以输入更少的字符完成同样的事情。
系统自带(或者是oh-my-zsh添加的)在终端中输入alias
,会得到:
...=../..
....=../../..
.....=../../../..
......=../../../../..
1='cd -'
2='cd -2'
3='cd -3'
4='cd -4'
5='cd -5'
6='cd -6'
7='cd -7'
8='cd -8'
9='cd -9'
_=sudo
a='fasd -a'
afind='ack-grep -il'
d='fasd -d'
f='fasd -f'
g=git
ga='git add'
gaa='git add --all'
gap='git add --patch'
gb='git branch'
gba='git branch -a'
gbr='git branch --remote'
gc='git commit -v'
'gc!'='git commit -v --amend'
gca='git commit -v -a'
'gca!'='git commit -v -a --amend'
gcl='git config --list'
gclean='git reset --hard && git clean -dfx'
gcm='git checkout master'
gcmsg='git commit -m'
gco='git checkout'
gcount='git shortlog -sn'
gcp='git cherry-pick'
gcs='git commit -S'
gd='git diff'
gdc='git diff --cached'
gdt='git difftool'
gg='git gui citool'
gga='git gui citool --amend'
ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
ggpull='git pull origin $(current_branch)'
ggpur='git pull --rebase origin $(current_branch)'
ggpush='git push origin $(current_branch)'
gignore='git update-index --assume-unchanged'
gignored='git ls-files -v | grep "^[[:lower:]]"'
git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
gk='gitk --all --branches'
gl='git pull'
glg='git log --stat --max-count=10'
glgg='git log --graph --max-count=10'
glgga='git log --graph --decorate --all'
glo='git log --oneline --decorate --color'
globurl='noglob urlglobber '
glog='git log --oneline --decorate --color --graph'
glp=_git_log_prettily
gm='git merge'
gmt='git mergetool --no-prompt'
gp='git push'
gpoat='git push origin --all && git push origin --tags'
gr='git remote'
grba='git rebase --abort'
grbc='git rebase --continue'
grbi='git rebase -i'
grep='grep --color=auto --exclude-dir={.bzr,.cvs,.git,.hg,.svn}'
grh='git reset HEAD'
grhh='git reset HEAD --hard'
grmv='git remote rename'
grrm='git remote remove'
grset='git remote set-url'
grt='cd $(git rev-parse --show-toplevel || echo ".")'
grup='git remote update'
grv='git remote -v'
gsd='git svn dcommit'
gsps='git show --pretty=short --show-signature'
gsr='git svn rebase'
gss='git status -s'
gst='git status'
gsta='git stash'
gstd='git stash drop'
gstp='git stash pop'
gsts='git stash show --text'
gts='git tag -s'
gunignore='git update-index --no-assume-unchanged'
gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
gup='git pull --rebase'
gvt='git verify-tag'
gwc='git whatchanged -p --abbrev-commit --pretty=medium'
gwip='git add -A; git ls-files --deleted -z | xargs -r0 git rm; git commit -m "--wip--"'
history='fc -l 1'
l='ls -lah'
la='ls -lAh'
ll='ls -lh'
ls='ls -G'
lsa='ls -lah'
md='mkdir -p'
o='a -e open'
please=sudo
po=popd
pu=pushd
rd=rmdir
run-help=man
s='fasd -si'
sd='fasd -sid'
sf='fasd -sif'
st='open -a "Sublime Text"'
v='f -e vim'
which-command=whence
z='fasd_cd -d'
zz='fasd_cd -d -i'
这表明mac的终端其实自带了一些alias
。当然,我们也可以手动添加。
手动添加
自定义的alias应该在终端的配置文件中添加,比如我使用的是zsh,就在.zshrc
文件中添加。
常用的操作有:
alias st='open -a "Sublime Text"'
: 打开sublimeText