Mac OS 简介
Mac OS可以被分成操作系统的两个系列:
- 一个是老旧且已不被支持的“Classic”Mac OS(系统搭载在1984年销售的首部Mac与其后代上,终极版本是Mac OS 9)。采用Mach作为內核,在Mac OS 7.6.1以前用“System vX.X”来称呼。
- 新的OS X结合BSD Unix、OpenStep和Mac OS 9的元素。它的最底层建基于Unix基础,其代码被称为Darwin,实行的是部分开放源代码。
关于为什么Mac系统没有采用Linux内核,而是采用了BSD还有个小故事,感兴趣的大家可以看Mac OS X 背后的故事(二)——Linus Torvalds的短视这篇文章。
尽管 Mac 的文件系统目录和 Linux 差不多,但还是有些差距。
Mac 开发环境的部署
包管理器 Homebrew
The missing package manager for macOS
brew
相当于Ubuntu
下的apt-get
,CentOS
中的yum
。非常方便实用,一条命令即可安装:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install <cli-program>
,安装命令行工具brew cask install <gui-program>
,安装图形界面软件,这得益于Homebrew-Cask扩展
可以根据需要,配置国内源:
- 中科大,https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git
- 清华,https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/
神之编辑器 Emacs
# 安装命令
brew install --with-cocoa --srgb emacs
brew install sbcl # 顺便把 common lisp 也装上
其实 Mac 是有自带 Emacs 的,位置是/usr/bin/emacs
,只是版本非常旧,通过brew
安装的位置在/usr/local/bin/emacs
,可以通过下面的命令删除 Mac 自带的 Emacs:
sudo rm /usr/bin/emacs
sudo rm -rf /usr/share/emacs
为了能在 git,终端中默认使用 Emacs,需要做以下配置:
# ~/.bashrc
export EDITOR="emacsclient -t -a=\"\""
export ALTERNATE_EDITOR=""
# ~/.gitconfig
[core]
editor = emacsclient -t -a=\\\"\\\"
上面的配置会调用 emacsclient
去连接 emacs daemon
服务,如果服务没启,就先启动服务再去连接。
API 查阅工具Dash
# 安装命令
brew cask install dash
Dash gives your Mac instant offline access to 150+ API documentation sets.
安装 Dash 后,就可以离线查各种语言/框架的 API 文档了。
抓包工具 Wireshark
# 安装命令
brew cask install wireshark
也许是最强大的抓包工具,从其名字上就能体现出:wire(线路)+ shark(鲨鱼)。但这个软件初次使用时有些难度,最重要的是区分两个概念:
capture filter
,在抓包开始时指定。
常见表达式
# Capture only traffic to or from IP address 172.18.5.4:
host 172.18.5.4
# Capture traffic to or from a range of IP addresses:
net 192.168.0.0/24
# Capture non-HTTP and non-SMTP traffic on your server (both are equivalent):
host www.example.com and not (port 80 or port 25)
host www.example.com and not port 80 and not port 25
# Capture traffic within a range of ports with newer versions of libpcap (0.9.1 and later):
tcp portrange 1501-1549
#Capture only IPv4 traffic - the shortest filter, but sometimes very useful to get rid of lower layer protocols like ARP and STP:
ip
# Capture only unicast traffic - useful to get rid of noise on the network if you only want to see traffic to and from your machine, not, for example, broadcast and multicast announcements:
not broadcast and not multicast
display filter
,在抓取一定包后进行过滤。
常见表达式
ip.dst_host == 192.168.30.103 and tcp.dstport == 80
ip.addr == 10.43.54.65
# is equivalent to
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65
终端 iTerm 2
# 安装命令
brew cask install iterm2
Mac自带的终端不是很强,程序员们需要一个强劲的终端来工作,于是有了 iTerm2。需要设置一项:Left Option act as +Esc(Preferences–>Profiles–>Keys),这样 Option 就可以用作 Meta 键了。
Cmd + D
垂直分屏Cmd + Shift + D
水平分屏Cmd + T
开多个TabCmd + 数字
在多个Tab之间进行切换Option + F/B(向前、向后)
按字移动。Bash Shell 光标默认按照 Emacs 风格移动,也可改为 VIM,可参考Modifying the Bash Shell with the set Command。Ctrl + r
搜索历史命令!!
执行上条命令Ctrl+x Ctrl+e
调用默认编辑器去编辑一个特别长的命令
当然,说到了 iTerm2,不得不提到终端复用软件 tmux,tmux 默认配置文件在 Mac 上很别扭。
如果你还不知道 tmux 为何物,强烈推荐你看这个13分钟的视频,绝对物超所值,感谢 happypeter 的分享。
我现在用的主题是:Tomorrow Night。
~/.bashrc
Linux 一般通过~/.bashrc
进行环境变量的配置,但是在
Mac 下配置后,发现根本没有效果,这是为什么呢?
其实这是个比较基础的问题,shell有两种:登录式shell与非登录式shell,直观理解,登录(login)式shell就是在你打开shell要求你输入用户名与密码的shell,我们在使用桌面Linux时一般只在登录时接触到这种shell,等我们进入系统后,再打开的Terminal就是非登录式shell了。这两种
shell 读取配置的文件是不同的:
- 登录式Shell启动时会去读取
~/.profile
文件(Redhat、Mac上为~/.bash_profile
) - 非登录式Shell会去读取
~/.bashrc
文件
这也就解释了为什么在 Linux 系统上只需要修改 ~/.bashrc
后即可生效的原因。但在 Mac 上有些不同,开机后再通过 Terminal.app(或iTerm.app) 打开终端时,这时的 shell 是登录式shell,因为Terminal.app(或iTerm.app)这个应用程序是通过/usr/bin/login
这个命令打开终端的,所以不会去source ~/.bashrc
了。
解决方法也很简单,在~/.bash_profile加上下面一句代码就ok了
[ -r ~/.bashrc ] && source ~/.bashrc
Mac下ls
命令默认是没有颜色的,不是很直观,可以自己设置一个alias,参考链接
export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx
alias ls='ls -FG'
alias ll='ls -l'
为了在命令行提示符中显示时间,可以设置PS1
变量
export PS1="\n\e[1;37m[\e[m\e[1;35m\u\e[m\e[1;36m@\e[m\e[1;37m\h\e[m \e[1;33m\t\e[m \w\e[m\e[1;37m]\e[m\e[1;36m\e[m\n\$ "
# 效果如下
[liujiacai@macbook 22:02:13 ~]
~/.ssh/config
在 macOS/OS X 截止到 Yosemite,ssh-agent 会一直记住 ssh-add -K
添加的 key,即使重启 keychain,ssh-agent 也会自动去读取保存在 keychain 中的密码(passphrase)。但在
Sierra 中,重启 keychain 后,ssh-agent 就不会去读取了。Apple 开发者也对这一现象作出回应:
That’s expected. We re-aligned our behavior with the mainstream OpenSSH in this area.
解决办法也很简单,将ssh-add -A
放到 ~/.bashrc
里面就可以了。除了这种方式,还可以在~/.ssh/config
里面加入如下配置:
Host * (asterisk for all hosts or add specific host)
AddKeysToAgent yes
UseKeychain yes
IdentityFile <key> (e.g. ~/.ssh/userKey)
参考:
除此之外,对于 OpenSSH 4.0 以及之后的版本,引入一新功能 ControlMaster,可以复用之前已经登录的连接,建议开启:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
ControlPersist 60m
参考:
- Accelerating OpenSSH connections with ControlMaster
- https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
Java
# 安装命令
brew cask install java
brew install maven
brew cask install intellij-idea-ce # IDE,不要告诉我你还在用 eclipse
通过brew cask
安装后,可以通过执行/usr/libexec/java_home
这个命令来获取JAVA_HOME
export JAVA_HOME="$(/usr/libexec/java_home)"
Docker
# 安装命令
brew cask install docker
国内访问 Docker Hub 有时会遇到困难,最好可以配置镜像加速器。
数据库的图形界面客户端
# 安装命令
brew cask install sequel-pro # mysql
brew cask install robo-3t # mongodb
brew cask install rdm # redis
科学上网 Shadowsocks
brew install shadowsocks-libev
Mac 下不推荐安装 GUI 版本,已经很久没人维护了。安装之后编辑/usr/local/etc/shadowsocks-libev.json
,填入 server 地址即可。
# 测试
ss-local -v -c /usr/local/etc/shadowsocks-libev.json
# 开机启动
brew services start shadowsocks-libev
为了让终端可以使用代理,需要将 http(s) 转为 socks 流量。ss 官方推荐的是 proxychains,但是在OS X 10.11 以后引入了 SIP安全机制,导致无法直接使用,关闭 SIP 貌似也不可取,可以选用 privoxy 来替代 proxychains。(参考)
brew install privoxy
# privoxy 使用 8118 端口, ss 使用 1080
echo 'listen-address 0.0.0.0:8118\nforward-socks5 / localhost:1080 .' >> /usr/local/etc/privoxy/config
# 测试,查看 8118 有没有在监听, netstat -an | grep 8118
/usr/local/sbin/privoxy /usr/local/etc/privoxy/config
# 开机启动
brew services start privoxy
经过上面这几步 http(s)->socks5
就完成,下面只需要让终端走这个代理即可:
export http_proxy='http://localhost:8118'
export https_proxy='http://localhost:8118'
# 可以将以下函数放入 ~/.bashrc 中,方便开启/关闭代理
function proxy_off(){
unset http_proxy
unset https_proxy
echo -e "已关闭代理"
}
function proxy_on() {
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
export http_proxy="http://127.0.0.1:8118"
export https_proxy=$http_proxy
echo -e "已开启代理"
}
虚拟机 Virtualbox
# 安装命令
brew cask install virtualbox
brew cask install vagrant # 虚拟机管理工具,方便命令行操作
在天朝,很多网站是只支持 IE 的,Mac 下的 Firefox, Chrome, Safari 这时候都显得心有力而不足了,而且很多软件也只有 Windows 版,所以装个虚拟机是非常有必要的。 Virtualbox 是我自用 Ubuntu 以来一直用的虚拟机,开源免费。
vagrant 是一款非常简单且使用的虚拟机命令行工具,支持市面上主流虚拟机,当然包括 VBox,通过下面的命令即可安装一个干净的 Ubuntu 环境:
vagrant init hashicorp/precise32
vagrant up
为了方便今后操作,我自己制作了一个基于 debian8 的 box,安装上了 Clojure 开发环境,一键即可安装。
实用命令
# 修改hostname
sudo scutil --set HostName <name>
# 查看USB设备
system_profiler SPUSBDataType
下面的命令需要通过brew
进行安装后在使用
# 查看网络请求
brew install httpstat
$ httpstat baidu.com
Connected to 180.149.132.47:80 from 172.17.10.80:54727
HTTP/1.1 200 OK
Date: Sat, 14 Jan 2017 13:49:16 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sun, 15 Jan 2017 13:49:16 GMT
Connection: Keep-Alive
Content-Type: text/html
Body stored in: /var/folders/2g/fxz_98ks0lgc79sjp5vn5cxc0000gn/T/tmpsawHq4
DNS Lookup TCP Connection Server Processing Content Transfer
[ 69ms | 37ms | 33ms | 0ms ]
| | | |
namelookup:69ms | | |
connect:106ms | |
starttransfer:139ms |
total:139ms
# Swiss Army Knife for macOS !
brew install m-cli
$ m trash status
Size: 51G
Number of files: 252172
常用软件
日常使用的软件首选通过App Store
进行安装,默认安装在/Applications
下,个人从互联网上单独下载的软件放在这里面即可出现在Launchpad
中找到。
对于通过App Store
安装的软件,在Launchpad
界面,按住Option
键可进行删除。但是需要注意一点的时,应用程序一般都会有些历史文件,存放的位置有如下三处
~/Library/Application Support/<Application name>
~/Library/Cache/<Application name>
~/Library/Preferences/<Application name>.plist
使用find + grep
的方式就能轻松找出来了。网上也有诸如AppCleaner、AppZapper的小软件,大家可以根据需要自取之。
下面介绍下我日常使用的一些免费软件,供大家参考。
PS: Mac 下有很多非常实用的收费软件,我个人用的并不多,这里就不在列举了。 大家可以参考知乎上的 macOS (OS X) 平台上有哪些值得推荐的常用软件?
浏览器
Mac 上自带的 Safari 比较轻量,虽然比较省电,但扩展性远不如 Chrome、Firefox,所以这两个是必须的。
brew cask install firefox
brew cask install google-chrome
Chrome 默认会按照一个 Update 程序,在 ~/Library/Google/GoogleSoftwareUpdate
,可以执行下面命令删除:
cd /Users/liujiacai/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/Resources
./ksinstall --nuke
图片截屏、合并
Mac上的截图工具已经很好了,Cmd + Shift + 3/4
就够用了,但是如果想在图片上写些文字,马赛克某部分,就不行了,推荐用 Snip,才 2M 大小,虽说是腾讯开发的,但是不流氓。可以设置快捷键,我设定的是Cmd + Shift + 6
。
更重要的一点是,Snip 可以解决Retina下截屏2x问题(就是截出来的图超大),光这个特点就足以让你使用snip。
Mac自带的 Preview 可以对图片进行旋转、调整大小、添加文字,不需要额外安装软件。
此外,如果要对两张图片进行合并,需要通过安装 ImageMagick,并且通过以下命令操作:出处
brew install ImageMagick
# 下面两条命令都会把 left.png right.png 合并到 merged.png 里面
convert +append left.png right.png merged.png
montage -geometry 100% left.jpg right.jpg merged.jpg
如果你依赖于Evernote,可以试试圈点,洋名skitch,同样很好很强大。
录屏 gif
# 安装命令
brew cask install licecap
很多时候我们需要把自己的操作展示给别人看,比较好的做法是通过录屏软件将自己的操作保存成 gif 格式的图片。 开源免费的licecap 很好的解决了这个问题。
流程图制作工具
对于程序员来说,流程图应该是再亲切不过的了,一张图胜过千言万语。之前我都是用 Keynote 来画,但是实在是不好用,又找到了新的工具,draw.io,时序图、状态图统统不在话下。其次,国外很多项目的图是用纯文本画的,比较好用的在线工具是:asciiflow。
Calibre mobi 转化器
如果你有 Kinder 阅读器,那么这个应该适合你!
# 安装命令
brew cask install calibre
==> Installing Cask calibre
==> Moving App 'calibre.app' to '/Applications/calibre.app'.
==> Linking Binary 'calibre' to '/usr/local/bin/calibre'.
==> Linking Binary 'calibre-complete' to '/usr/local/bin/calibre-complete'.
==> Linking Binary 'calibre-customize' to '/usr/local/bin/calibre-customize'.
==> Linking Binary 'calibre-debug' to '/usr/local/bin/calibre-debug'.
==> Linking Binary 'calibre-parallel' to '/usr/local/bin/calibre-parallel'.
==> Linking Binary 'calibre-server' to '/usr/local/bin/calibre-server'.
==> Linking Binary 'calibre-smtp' to '/usr/local/bin/calibre-smtp'.
==> Linking Binary 'calibredb' to '/usr/local/bin/calibredb'.
==> Linking Binary 'ebook-convert' to '/usr/local/bin/ebook-convert'.
==> Linking Binary 'ebook-device' to '/usr/local/bin/ebook-device'.
==> Linking Binary 'ebook-edit' to '/usr/local/bin/ebook-edit'.
==> Linking Binary 'ebook-meta' to '/usr/local/bin/ebook-meta'.
==> Linking Binary 'ebook-polish' to '/usr/local/bin/ebook-polish'.
==> Linking Binary 'ebook-viewer' to '/usr/local/bin/ebook-viewer'.
==> Linking Binary 'fetch-ebook-metadata' to '/usr/local/bin/fetch-ebook-metadata'.
==> Linking Binary 'lrf2lrs' to '/usr/local/bin/lrf2lrs'.
==> Linking Binary 'lrfviewer' to '/usr/local/bin/lrfviewer'.
==> Linking Binary 'lrs2lrf' to '/usr/local/bin/lrs2lrf'.
==> Linking Binary 'markdown-calibre' to '/usr/local/bin/markdown-calibre'.
==> Linking Binary 'web2disk' to '/usr/local/bin/web2disk'.
视频播放器、截取
# 安装命令
brew cask install vlc
Mac下的自带的播放器QuickTime,功能实在是太弱了,支持的格式既少又难用,快进什么的貌似都没快捷键,只能手动点击进度条,试用了一段时间的Mplayer,发现效果也不好,会有视频卡顿的现象,最终选择了 VLC,一直用的还不错。 此外, 有网友补充道 mpv 才是程序员最佳播放器,大家也可以尝试下。
很多时候,我们只需要截取视频中的某一段视频,或者简单的进行格式转换,这时候就需要 ffmpeg 出马了。
# 安装命令
brew install ffmpeg
# 将 mov 格式的视频转为 mp4,ffmpeg 能根据文件后缀名自动识别
ffmpeg -i foo.mov foo.mp4
# 从第 6 秒开始,截取10s 视频,并且转为 mp4 格式
ffmpeg -t 10 -ss 00:00:06 -i foo.mov smaller.mp4
音频播放器
# 安装命令
brew cask install vox
官方的 iTunes, 实在是不适应,喜欢简洁清爽的朋友可以试试 VOX
*.webarchive
在windows下保存网页时,如果想把网页上的资源,比如css、js、image等一起下载下来,会单独生成个文件夹,但是用 Mac 上的 Safari 保存整个网页时,是以webarchive
为后缀名的文件进行保存的,如何把打开这种文件呢?推荐:
http://sourceforge.net/projects/webarchivext/
常见问题
不能写 NTFS
用惯了 Windows 的大家都习惯用 NTFS 文件系统格式,但是很遗憾,这个文件系统是微软自己搞得,不是开放的,所以 Mac 是不支持的,如果你以前的 NTFS 格式的硬盘放到 Mac 上,会发现只能进行读操作,不能写入,这属于正常现象,不要惊慌。
解决的方法也很简单,把移动硬盘格式化成FAT32(单个文件大小不能超过4G)或FAText 格式都可以,Mac 自带的磁盘工具就可以进行格式转化,当然你需要先把移动硬盘上的数据拷贝出来。
Wi-Fi 时常中断
Mac 生于乔帮主之手时,为了凸显尊贵,接口与一般的电脑有很大不同。常见的网线没办法直接连接 Mac 电脑,需要单独购买一个以太网转接器,所以大部分同学都是使用无线连接,但 Mac 这里应该是有个 bug,而且是很久的 bug,我用 Mac 两年了,偶尔会遇到几次,网上解决的方法有如下几种:
- 修改网络位置,不是其默认的“自动”就好
- 修改路由器,把无线信道改为6或9
- 关闭蓝牙.Mac 中,同时打开蓝牙与Wi-Fi, 会冲突。详情
如果你的 Mac 也遇到了 Wi-Fi 问题,可以试试上面三个解决方法。
总结
Once you get Mac, you never come back to windows.
---------------------------------------------------
OS X 的一些技巧汇总
下面记录一些使用过程中的小技巧,不断补充。
一. 显示和隐藏
1. 显示和隐藏系统文件
10.8 版本 OS X
$ defaults write com.apple.finder AppleShowAllFiles YES/NO
10.9 版本 OS X
$ defaults write ~/Library/Preferences/com.apple.finder.plist AppleShowAllFiles -bool true/false
2. 显示和隐藏普通文件
$ chflags hidden/nohidden file or directory
二. 文件和目录的扩展属性问题
在 Mac OS X 下,文件经常会被附加上 OS X 特有的扩展属性 ( extend attributes ),具体表现是用 ls -l
查看时会有 @
的标记,譬如
$ ls -l os.pdf
-rw-r--r--@ 1 cnhavee staff 1518 1 9 14:13 os.pdf
这个 @
属性是用户在 Finder 中对文件进行任意操作后就会被附带上,特别讨厌这个属性,这直接导致在 OS X 下打包后放到 Linux 系统分享文件的时候,会出现莫名其妙的错误,兼因 tar 命令本身并不能区分 extend attributes
还好,Mac OS X 下的 cp 有个选项 -X
能忽略这个扩展属性
cp: -X do not copy extended attributes (eas) or resource forks.
处理这个问题,譬如打包,在打包前,请用 cp -Xr
拷贝出一份没有扩展属性的文件或目录,然后再 tar 打包处理。
另有个命令 xattr
也能做到
$ xattr -l filename
com.apple.ResourceFork:
00000000 00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32 |...............2|
……
$ xattr -d com.apple.ResourceFork filename
你可以一次性清除一个文件的所有 extend attributes
$ xattr -c filename
你也可以对一个目录及其下的所有文件做清除操作
$ xattr -rc directory
三. 鼠标移动加速
默认的 Mac OS X 下鼠标的加速,实在是不习惯,俺用 OS X 不是来作图的,纯粹是图它的稳定。所以,还是想办法关闭鼠标的移动加速吧。
下载一个 app,CursorSense
四. 开源软件
可以通过 MacPorts、HomeBrew(https://brew.sh) 等包管理工具来使用开源软件。
五. 重启 Finder
$ killall Finder
或者可以按下 Option 键的同时,右键 Dock 栏上的 Finder 选择重启即可。
Option 键,顾名思义,具体选项的键,譬如按住 Option 键后,点击无线图标,则可以显示具体的无线网络状况。
六. 提示声
按住 Shift 键,再调节音量,即可临时静音调节
开启充电提示音
$ defaults write com.apple.PowerChime ChimeOnAllHardware -bool true; open /System/Library/CoreServices/PowerChime.app
关闭充电提示音
$ defaults write com.apple.PowerChime ChimeOnAllHardware -bool false; killall PowerChime
七. 刷新 DNS 缓存
针对 OS X 10.4、10.5
$ sudo lookupd -flushcache
针对 OS X 10.6
$ sudo dscacheutil -flushcache
针对 OS X 10.7、10.8、10.9
$ sudo killall -HUP mDNSResponder
针对 OS X 10.10 至 10.10.3
$ sudo discoveryutil mdnsflushcache
针对 OS X 10.10.4 以及以后的所有版本
$ sudo killall -HUP mDNSResponder
八. 视频播放
尝试过 N 个播放器,包括收费的射手播放器在内都不太好用,最后确定以下几款视频播放器
1. MPV
原汁原味的 Linux 下 Mplayer 的使用体验,强烈推荐,fork 自 mplayer2 与 Mplayer。
2. MPlayer OSX Extended
Mplayer OSX Extended 是个非常不错的视频播放器,使用过一段时间。
3. MplayerX
另一个很好的选择。
4. 蓝光播放
a. 收费的 Mac Blu-ray Player
b. 免费的 XBMC
九. 终端快捷键
MacOS 终端默认也是使用 emacs 编辑模式,如果想尝试 vi 编辑模式,可以通过 set -o vi
来设置。
$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
$ set -o vi
$ echo $SHELLOPTS
braceexpand:hashall:histexpand:history:interactive-comments:monitor:vi
emacs 编辑模式下一些常用的快捷键
命令 | 说明 | 命令 | 说明 |
Ctrl + a | 移动到行首 | Ctrl + e | 移动到行尾 |
Ctrl + f | 按字符右移 | Ctrl + b | 按字符左移 |
Esc + f | 按单词右移 | Option + b | 按单词左移 |
Ctrl + u | 从光标处剪切至行首 | Ctrl +k | 从光标处剪切至行尾 |
Ctrl + w | 从光标处向左剪切单词 | Option + d | 从光标处向右剪切单词 |
Ctrl + d | 删除光标处的字符 | Ctrl + h | 删除光标签的字符 |
Ctrl + ] | 从光标处向后搜索字符 | Ctrl + Option + ] | 从当前光标处向前搜索字符 |
Ctrl + y | 粘贴至光标后 | !$ | 显示系统最近的一条参数 |
↑(Ctrl + p) | 显示上一条命令 | ↓(Ctrl + n) | 显示下一条命令 |
MacOS 的键盘为非标准键盘,需要在Apple Terminal的设置面板里将“使用option键作为meta键”勾上。详细的 MacOS 终端快捷键,可以访问官网:https://support.apple.com/zh-cn/guide/terminal/trmlshtcts/mac
十. 特殊符号
- 版权符号:Option + G = ©
- 人名币符号:Option + Y = ¥
- 商标符号:Option + 2 = ™
- 已注册的商标:Option + R = ®
十一. 清理右键菜单
用了段时间后,右键菜单就开始臃肿不堪,有时会冒出重复项,打开终端,输入
$ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -seed -r -f -v -domain local -domain user -domain system; killall Finder
十二. 重建 Launchpad
$ defaults write com.apple.dock ResetLaunchPad -bool true; killall Dock
在我的 rMBP 上默认是横排 7 个,竖排5 个,感觉图片过大,小修改下
$ defaults write com.apple.dock springboard-rows -int 6
$ defaults write com.apple.dock springboard-columns -int 8
$ killall Dock
空间一下就出来了,恢复方法
$ defaults delete com.apple.dock springboard-rows
$ defaults delete com.apple.dock springboard-columns
$ killall Dock
十三. app 归类
用了段时间会发现,app目录存在两个地方,一个是用户家目录 ~/Applications
,一个是根目录 /Applications
。
我的处理是这样的,app store的软件默认就在根目录下的 /Applications
,自己下载的 app,我则是放到家目录 ~/Applications
,而不会随便放到 /Applications
而默认给于 root 权限。
同样,能直接在 app store 安装的就直接安装,其次使用 HomeBrew 去安装病自动 ln 到 ~/Applications
目录。
十四. 截屏
- Command + Shift + 3:全屏
- Command + Shift + 4:窗口
针对窗口截图有一些小技巧,即在 Command + Shift + 4 以后:
- 直接鼠标拖动一个矩形区域
- 按下空格来选取窗口
- 拖动一个区域不松手,按住 Shift,来根据 X 或 Y 轴进行拖动
- 拖动一个区域不松手,按住 Option,来按照圆心进行放大缩小
- 以上任意动作操作同时按住 Control,截图保存至剪切板,去其他窗口直接粘贴。
系统默认的快捷键 Shift + Command + 3/4 截屏会带上阴影,部分人觉得不爽,要去掉阴影。
$ defaults write com.apple.screencapture disable-shadow -bool true
$ killall SystemUIServer
自带的截屏操作可以修改默认存放的位置
$ defaults write com.apple.screencapture location /your/path
默认的截屏后保存的格式为 png,当然你可以改为其他格式
$ defaults write com.apple.screencapture type jpg
$ defaults write com.apple.screencapture type gif
$ defaults write com.apple.screencapture type png
$ defaults write com.apple.screencapture type tiff
$ defaults write com.apple.screencapture type pdf
修改默认的截图名
$ defaults write com.apple.screencapture name "yourname"
$ killall SystemUIServer
去掉默认截图名中的时间
$ defaults write com.apple.screencapture "include-date" 0
$ killall SystemUIServer
十五. Mail.app 撰写邮件附件显示
$ defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes/no
$ defaults write com.apple.mail DisableInlineAttachmentViewing -bool true/false
十六. 查看应用沙盒状态
譬如查看 Mac App Store 安装的 QQ
$ codesign --display --entitlements - /Applications/QQ.app
十七. 恢复 Spotlight 窗口位置
OS X 10.11 中,Spotlight 可以移动位置,那么恢复默认位置的方法为
$ defaults delete com.apple.Spotlight userHasMovedWindow
十八. 关闭 MobileBackups
你可能发现了,/Volumes
下挂载了 MobileBackups,去不去掉无所谓,这是快照的本地镜像,开启与关闭的方法
$ sudo tmutil disablelocal
$ sudo tmutil enablelocal
十九. 移除隐私定位中的残留项
需要编辑文件 /var/db/locationd/clients.plist
,防止意外,你可以现备份到另外地方,注意权限,location 文件夹属于 _locationd
的用户用户组。
$ sudo su -
# cd /var/db/locationd
# cp clients.plist ~/
该文件是二进制的,需要转下
# plutil -convert xml1 clients.plist
# vim clients.plist
用搜索定位到残留项位置,删除,随后再转为二进制,并重启定位服务:
# plutil -convert binary1 clients.plist
# killall locationd
二十. HostName 修改
用了一段时间,偶尔发现,HostName 多了个后缀,譬如原来的 HostName 设置为 Havee,一段时间后变成了 Havee-2,一直搞不清为什么会这样,于是打开终端设置下
$ scutil --set ComputerName "your-name"
$ scutil --set LocalHostName "your-name"
$ scutil --set HostName "your-name"
注意,LocalHostName 与 HostName 的 your-name 中不能有空格。设置完成后,检查下
$ scutil --get ComputerName
$ scutil --get LocalHostName
$ scutil --get HostName
二一. Safari 显示 status bar
是否开启原生 Safari 状态栏
$ defaults write com.apple.Safari ShowStatusBar -bool true/false
二二. 打开 terminal.app 缓慢
清理下日志
$ sudo rm /private/var/log/asl/*.asl
-------------------------------------------
El Capitan中的 SIP机制
将 OS X 系统升级到了 El Capitan,然后发现,一些注入的工具无法使用了,某些系统目录无法使用了,第三方未签名的 kext
无法加载了,问题一堆堆的。这是因为,Mac OS X 在 10.11 中全面启用了 System Integrity Protection
(SIP) —— 系统完整性保护技术。
SIP 技术主要是用来限制 root 用户的权限,以提升系统的健壮性。
具体哪些目录受到保护,可以查看文件
/System/Library/Sandbox/rootless.conf
不被保护的列表存储在
/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths
Mac 提供了内置 csrutil
配置来进行一些 SIP 的配置。在默认情况下,SIP 是开启状态,你可以用一下指令查看
$ csrutil status
System Integrity Protection status: enabled
可配置项如下,字面意思:
Apple Internal
Kext Signing
Filesystem Protections
Debugging Restrictions
DTrace Restrictions
NVRAM Protections
白苹果用户
上面已经说过,Mac 提供了内置的 csrutil
工具来让用户进行一些配置,不过,你需要重启进入到 Recovery mode (Cmd + R on boot) 下进行操作。
csrutil 的一些常用命令
csrutil clear # 清除 SIP 用户配置,即开启默认的 SIP
csrutil enable # 开启 SIP
csrutil disable # 禁用 SIP
csrutil status # 查看当前 SIP 配置
关于 csrutil enable
可用参数为
csrutil enable --no-internal --without kext --without fs --without fs --without debug --without dtrace --without nvram
譬如说,如果你需要某系统目录的读写权限,譬如 homebrew 全新安装的时候,需要创建 /usr/local
目录,那么你需要
- 重启进入 Recovery mode
- 打开 Terminal.app,输入
csrutil enable --without fs
- 重启至正常系统下,打开 Terminal.app,安装 homebrew
- 再次重启至 Recovery mode
- 打开 Terminal.app,输入
csrutil enable
- 重启
/Library/Extensions/
下.
No comments:
Post a Comment