AwesomeBuild Status

awesome-macos-command-line 的中文翻译,翻译不妥的地方,欢迎提 issue 或者 pull request 。

翻译本教程,见识了许多没用过的终端命令,加深了对 Mac 的认识。

精心为 OS X 挑选的 shell 命令和工具。

“你无需知晓一切。仅仅在你需要的时候,找到它就行了。” (John Brunner)

更多好用的终端工具,请参阅原作者的姐妹项目 Awesome Command Line Apps

中文 | English

外形

透明度

菜单和窗口的透明度设置

1
2
3
4
5
# 减小透明度
defaults write com.apple.universalaccess reduceTransparency -bool true

# 恢复默认透明度
defaults write com.apple.universalaccess reduceTransparency -bool false

桌面背景

设置桌面背景

1
2
3
4
5
# Mountain Lion 及之前的版本支持
osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/path/to/picture.jpg"'

# 从 Mavericks 开始支持
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/path/to/picture.jpg'" && killall Dock

应用

App Store

列出所有从 App Store 下载的应用

1
2
3
4
5
# 通过 find
find /Applications -path '*Contents/_MASReceipt/receipt' -maxdepth 4 -print |\sed 's#.app/Contents/_MASReceipt/receipt#.app#g; s#/Applications/##'

# 通过 Spotlight
mdfind kMDItemAppStoreHasReceipt=1

显示调试菜单

Yosemite 版本起作用

1
2
3
4
5
# 开启
defaults write com.apple.appstore ShowDebugMenu -bool true

# 关闭 (默认)
defaults write com.apple.appstore ShowDebugMenu -bool false

苹果远程桌面

唤醒手册

1
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -help

唤醒和睡眠 ARD Agent 和 Helper

1
2
3
4
5
# 激活并且重启 ARD Agent 和 Helper
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -restart -agent -console

# 睡眠并且停止远程管理服务
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -stop

开启和关闭远程桌面共享

1
2
3
4
5
# 给予所有用户完全的接入权限
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -allowAccessFor -allUsers -privs -all

# 关闭 ARD Agent 和删除所有用户的接入权限
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -configure -access -off

删除苹果远程桌面设置

1
2
3
4
5
6
sudo rm -rf /var/db/RemoteManagement ; \
sudo defaults delete /Library/Preferences/com.apple.RemoteDesktop.plist ; \
defaults delete ~/Library/Preferences/com.apple.RemoteDesktop.plist ; \
sudo rm -r /Library/Application\ Support/Apple/Remote\ Desktop/ ; \
rm -r ~/Library/Application\ Support/Remote\ Desktop/ ; \
rm -r ~/Library/Containers/com.apple.RemoteDesktop

通讯录

调试模式

1
2
3
4
5
# 开启
defaults write com.apple.addressbook ABShowDebugMenu -bool true

# 关闭 (默认)
defaults write com.apple.addressbook ABShowDebugMenu -bool false

Google

卸载 Google 更新

1
~/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/ksinstall --nuke

iTunes

键盘媒体健

Yosemite 版本起作用。从 El Capitan 开始引入了系统完整性保护,可防止系统启动代理被卸载。

1
2
3
4
5
# 停止响应按键
launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist

# 响应按键 (默认)
launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plist

从 El Capitan 开始,您可以禁用 SIP 或者使用某种黑客手段,这将使任何用户都无法访问 iTunes,从而有效地阻止它自己和它的帮助者启动。 请注意,这将无法安装 iTunes ,并可能与操作系统的更新相冲突。

1
sudo chmod 0000 /Applications/iTunes.app

邮件

将附件显示为图标

Mac 10.14.4 测试,纯文本或其他文件会显示为图标,但是图片会直接插入。图片可以右键转换为图标,或者更换邮箱客户端解决。issue 1

1
defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes

清空邮件索引

下面的 AppleScript 代码将关闭邮件,清空 SQLite 索引,然后重新打开 Mail。在一个没有优化的大型电子邮件数据库中,可以显着提高响应速度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(*
加快邮件索引。
代码来源: http://web.archive.org/web/20071008123746/http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/
最初由 pmbuko 改编,Romulo 修改。Brett Terpstra 在 2012 年更新,Mathias Törnblom 在 2013 更新到 V3 支持 El Capitan。Andrei Miclaus 在 2017 年更新到 V4,支持 Sierra。
*)

tell application "Mail" to quit
set os_version to do shell script "sw_vers -productVersion"
set mail_version to "V2"
considering numeric strings
    if "10.10" <= os_version then set mail_version to "V3"
    if "10.12" <= os_version then set mail_version to "V4"
    if "10.13" <= os_version then set mail_version to "V5"
    if "10.14" <= os_version then set mail_version to "V6"
end considering

set sizeBefore to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}"
do shell script "/usr/bin/sqlite3 ~/Library/Mail/" & mail_version & "/MailData/Envelope\\ Index vacuum"

set sizeAfter to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}"

display dialog ("Mail index before: " & sizeBefore & return & "Mail index after: " & sizeAfter & return & return & "Enjoy the new speed!")

tell application "Mail" to activate

Safari

改变默认字体

1
2
3
4
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2StandardFontFamily Georgia
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFontSize 16
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2FixedFontFamily Menlo
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFixedFontSize 14

开启开发者菜单以及网络检查

1
2
3
4
5
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true && \
defaults write com.apple.Safari IncludeDevelopMenu -bool true && \
defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true && \
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true && \
defaults write -g WebKitDeveloperExtras -bool true

获取当前网页数据

其他选项: get source, get text.

1
osascript -e 'tell application "Safari" to get URL of current tab of front window'

使用 Backspace/Delete 返回上一页

1
2
3
4
5
# 开启
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool YES

# 关闭
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool NO

Sketch

导出压缩 SVG

1
defaults write com.bohemiancoding.sketch3 exportCompactSVG -bool yes

Skim

关闭自动加载弹窗

去掉弹窗并设置默认自动加载

1
defaults write -app Skim SKAutoReloadFileUpdate -boolean true

终端

焦点跟随鼠标

1
2
3
4
5
# 开启
defaults write com.apple.Terminal FocusFollowsMouse -string YES

# 关闭
defaults write com.apple.Terminal FocusFollowsMouse -string NO

文本编辑

将文本编辑设置为纯文本的默认打开方式

1
defaults write com.apple.TextEdit RichText -int 0

Visual Studio Code

解决 VSCode Vim 按键重复

1
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false

备份

时间机器

改变备份间隔

备份间隔改为 30 分钟,单位是秒。

1
sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 1800

本地备份

本地备份时,时间机器备份卷不可用。

1
2
3
4
5
6
7
8
# 查看状态
defaults read /Library/Preferences/com.apple.TimeMachine MobileBackups

# 开启 (默认)
sudo tmutil enablelocal

# 关闭
sudo tmutil disablelocal

从 High Sierra 开始,你无法禁用本地快照。 时间机器始终会创建本地 APFS 快照,并使用该快照作为创建常规备份的数据源,而不是使用活动磁盘作为数据源,就像 HFS 格式化磁盘一样。

防止时间机器提示将新的硬盘启动器作为本分卷

1
sudo defaults write /Library/Preferences/com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true

显示时间机器的日志

这个脚本将输出过去 12 个小时时间机器的备份活动。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/sh

filter='processImagePath contains "backupd" and subsystem beginswith "com.apple.TimeMachine"'

# show the last 12 hours
start="$(date -j -v-12H +'%Y-%m-%d %H:%M:%S')"

echo ""
echo "[History (from $start)]"
echo ""

log show --style syslog --info --start "$start" --predicate "$filter"

echo ""
echo "[Following]"
echo ""

log stream --style syslog --info --predicate "$filter"

充电时切换备份

1
2
3
4
5
6
7
8
# 查看状态
sudo defaults read /Library/Preferences/com.apple.TimeMachine RequiresACPower

# 开启 (默认)
sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool true

# 关闭
sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool false

验证备份

从 OS X 10.11 开始,时间机器记录文件校验和,并且复制到快照。 对于早期版本的 OS X,校验和不会复制到快照。

1
sudo tmutil verifychecksums /path/to/backup

开发者

Vim

编译 Sane Vim

通过 Homebrew 编译出完整 Mac Vim,包括覆盖系统的 Vim。

1
brew install macvim --HEAD --with-cscope --with-lua --with-override-system-vim --with-luajit --with-python

Neovim

通过 Homebrew 安装现代化的 Vim 替代品。

1
brew install neovim

Xcode

安装没有命令行工具的 Xcode

1
xcode-select --install

删除所有不可用的模拟器

1
xcrun simctl delete unavailable

程序坞

将最近使用的程序添加到程序坞

1
2
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }' && \
killall Dock

添加间隔符的无名文件夹

1
2
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = {}; "tile-type"="small-spacer-tile"; }' && \
killall Dock

添加空格

1
2
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}' && \
killall Dock

添加小空格

1
2
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="small-spacer-tile";}' && \
killall Dock

根据用户最近的使用自动重排

1
2
3
4
5
6
7
# 开启 (默认)
defaults write com.apple.dock mru-spaces -bool true && \
killall Dock

# 关闭
defaults write com.apple.dock mru-spaces -bool false && \
killall Dock

图标弹跳

全局设置当唤醒应用时,是否弹跳图标。

1
2
3
4
5
6
7
# 开启 (默认)
defaults write com.apple.dock no-bouncing -bool true && \
killall Dock

# 关闭
defaults write com.apple.dock no-bouncing -bool false && \
killall Dock

锁住程序坞大小

1
2
3
4
5
6
7
# 开启
defaults write com.apple.Dock size-immutable -bool yes && \
killall Dock

# 关闭 (默认)
defaults write com.apple.Dock size-immutable -bool no && \
killall Dock

重置程序坞

1
2
defaults delete com.apple.dock && \
killall Dock

改变程序坞大小

完全改变程序坞主体大小。要调整大小,将 0 改为整数

1
2
defaults write com.apple.dock tilesize -int 0 && \
killall Dock

滚动手势

使用触摸板或鼠标滚轮与程序坞进行交互,允许您使用向上滚动手势打开应用。正在运行的程序也可以使用相同的手势调用程序窗口管理。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.dock scroll-to-open -bool true && \
killall Dock

# 关闭 (默认)
defaults write com.apple.dock scroll-to-open -bool false && \
killall Dock

启用自动掩藏

1
2
defaults write com.apple.dock autohide -bool true && \
killall Dock

设置自动显示和掩藏的延迟时间

浮点数定义了显示和掩藏的延迟时间(单位毫秒)。

1
2
3
defaults write com.apple.dock autohide-time-modifier -float 0.4 && \
defaults write com.apple.dock autohide-delay -float 0 && \
killall Dock

显示掩藏 APP 的图标

1
2
3
4
5
6
7
# 开启
defaults write com.apple.dock showhidden -bool true && \
killall Dock

# 关闭 (默认)
defaults write com.apple.dock showhidden -bool false && \
killall Dock

仅显示启动的应用程序图标

1
2
3
4
5
6
7
# 开启
defaults write com.apple.dock static-only -bool true && \
killall Dock

# 关闭 (默认)
defaults write com.apple.dock static-only -bool false && \
killall Dock

文档

将文件转换为 HTML

支持的格式有纯文本、富文本(rtf)以及微软的 Word(doc/docx)。

1
textutil -convert html file.ext

文件、磁盘和卷

创建一个空文件

创建一个 10 GB 的空文件。

1
mkfile 10g /path/to/file

禁止突发动作感应

当你使用的是 SSD 时,这个设置是无用的。

1
sudo pmset -a sms 0

弹出所有可安装的卷

唯一可以向访达发送 AppleScript 命令的方法。

1
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'

修复文件权限

不依赖图形化磁盘工具修复文件权限。

1
sudo diskutil repairPermissions /

从 OS X El Capitan 开始,系统文件权限将自动受到保护。 不再需要使用磁盘工具验证或修复权限。(来源)

设置启动卷

1
2
3
4
5
# Up to Yosemite
bless --mount "/path/to/mounted/volume" --setBoot

# From El Capitan
sudo systemsetup -setstartupdisk /System/Library/CoreServices

示所有附加的磁盘和分区

1
diskutil list

查看文件系统的使用率

连续显示文件使用信息。

1
sudo fs_usage

APFS

从 High Sierra 开启,没有中央程序,并且使用不一致,因为大多数功能都被卷入到 tmutil

将卷从 HFS+ 转换为 APFS

1
/System/Library/Filesystems/apfs.fs/Contents/Resources/hfs_convert /path/to/file/system

创建新的 APFS 文件系统

1
/System/Library/Filesystems/apfs.fs/Contents/Resources/newfs_apfs /path/to/device

创建快照

1
tmutil localsnapshot

删除快照

1
tmutil deletelocalsnapshots com.apple.TimeMachine.2018-01-26-044042

列出所有快照

1
tmutil listlocalsnapshots /

挂载快照

快照是只读的。

1
2
mkdir ~/mnt
/System/Library/Filesystems/apfs.fs/Contents/Resources/mount_apfs -s com.apple.TimeMachine.2018-01-26-044042 / ~/mnt

磁盘映像

从文件内容创建磁盘映像

将安装的应用程序转换为二进制包。

1
hdiutil create -volname "Volume Name" -srcfolder /path/to/folder -ov diskimage.dmg

如果你想加密磁盘映像:

1
hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg

打包前,你要输入密码。为了直接输入密码不弹窗:

1
echo -n YourPassword | hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg

将磁盘映像刻录为 DVD

这个命令可以应用在 .iso 、.img 和 .dmg 文件上。

1
hdiutil burn /path/to/image_file

禁止磁盘映像验证

1
2
3
defaults write com.apple.frameworks.diskimages skip-verify -bool true && \
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true && \
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true

制作 OS X 启动卷

1
bless --folder "/path/to/mounted/volume/System/Library/CoreServices" --bootinfo --bootefi

挂载磁盘映像

1
hdiutil attach /path/to/diskimage.dmg

卸载磁盘映像

1
hdiutil detach /dev/disk2s1

将磁盘映像写入到卷中

就像磁盘工具的恢复功能。

1
sudo asr -restore -noverify -source /path/to/diskimage.dmg -target /Volumes/VolumeToRestoreTo

访达

桌面

显示外部媒体

外部的 HDs 、thumb drives 等等。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true && \
killall Finder

# 关闭 (默认)
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool false && \
killall Finder

显示内部媒体

自建的 HDs 或者 SSDs。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true && \
killall Finder

# 关闭 (默认)
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool false && \
killall Finder

显示可移动媒体

CDs 、DVDs 、iPods 等等。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true && \
killall Finder

# 关闭 (默认)
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool false && \
killall Finder

显示网络卷

AFP 、SMB、 NFS、 WebDAV 等等。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.finder ShowMountedServersOnDesktop -bool true && \
killall Finder

# 关闭 (默认)
defaults write com.apple.finder ShowMountedServersOnDesktop -bool false && \
killall Finder

文件和文件夹

清除所有访问控制列表(ACLs)

1
sudo chmod -RN /path/to/folder

在访达掩藏文件夹

1
chflags hidden /path/to/folder/

显示所有文件的扩展名

1
defaults write -g AppleShowAllExtensions -bool true

显示掩藏文件

1
2
3
4
5
# 显示所有
defaults write com.apple.finder AppleShowAllFiles true

# 恢复文件的默认显示
defaults write com.apple.finder AppleShowAllFiles false

删除保护标签

1
sudo chflags -R nouchg /path/to/file/or/folder

在访达中显示全路径

1
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true

取消隐藏用户文件夹

1
chflags nohidden ~/Library

增加最近访问文件数量

1
2
defaults write -g NSNavRecentPlacesLimit -int 10 && \
killall Finder

布局

显示退出访达按钮

显示 退出访达的默认快捷键是 Cmd + Q

1
2
3
4
5
6
7
# 开启
defaults write com.apple.finder QuitMenuItem -bool true && \
killall Finder

# 关闭 (默认)
defaults write com.apple.finder QuitMenuItem -bool false && \
killall Finder

平滑滚动

对旧 Mac 会弄乱动画很有用。

1
2
3
4
5
# 开启
defaults write -g NSScrollAnimationEnabled -bool false

# 关闭 (默认)
defaults write -g NSScrollAnimationEnabled -bool true

橡皮筋滚动

1
2
3
4
5
# 禁止
defaults write -g NSScrollViewRubberbanding -bool false

# 关闭 (默认)
defaults write -g NSScrollViewRubberbanding -bool true

展开默认保存面板

1
2
defaults write -g NSNavPanelExpandedStateForSaveMode -bool true && \
defaults write -g NSNavPanelExpandedStateForSaveMode2 -bool true

桌面图标可见性

1
2
3
4
5
6
7
# 掩藏图标
defaults write com.apple.finder CreateDesktop -bool false && \
killall Finder

# 显示图标(默认)
defaults write com.apple.finder CreateDesktop -bool true && \
killall Finder

路径栏

1
2
3
4
5
# 显示
defaults write com.apple.finder ShowPathbar -bool true

# 掩藏 (默认)
defaults write com.apple.finder ShowPathbar -bool false

滚动条可见性

可选的选项: WhenScrollingAutomaticAlways

1
defaults write -g AppleShowScrollBars -string "Always"

状态栏

1
2
3
4
5
# 显示
defaults write com.apple.finder ShowStatusBar -bool true

# 掩藏 (默认)
defaults write com.apple.finder ShowStatusBar -bool false

默认保存到磁盘

设置默认保存地址是本地磁盘,而不是 iCloud 。

1
defaults write -g NSDocumentSaveNewDocumentsToCloud -bool false

当当前文件夹设置为默认搜索范围

1
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"

设置访达的默认文件夹

1
2
defaults write com.apple.finder NewWindowTarget -string "PfLo" && \
defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}"

设置侧边栏图标大小

将大小设置为中等大小。

1
defaults write -g NSTableViewDefaultSizeMode -int 2

元数据文件

禁止在网络卷创建元数据文件

避免创建 .DS_Store 以及 AppleDouble 文件。

1
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true

禁止在 USB 卷创建元数据文件

避免创建 .DS_Store 以及 AppleDouble 文件。

1
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true

打开文件

改变访达的工作文件夹

如果同时打开了多个窗口,选择最上面。

1
cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"

打开 URL

1
open https://github.com

打开文件

1
open README.md

打开应用程序

你可以加上 -a 打开应用程序。

1
open -a "Google Chrome" https://github.com

打开文件夹

1
open /path/to/folder/

打开当前文件夹

1
open .

字体

清空当前用户字体缓存

为了清除所有用户的字体缓存,在命令前加上 sudo

1
2
3
atsutil databases -removeUser && \
atsutil server -shutdown && \
atsutil server -ping

获取 SF Mono 字体

你需要先下载和安装 Xcode 8 beta,之后所有应用都可以使用。

1
cp -v /Applications/Xcode-beta.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Fonts/SFMono-* ~/Library/Fonts

对于 Sierra 之前的版本,它们包含 Terminal.app 中。

1
cp -v /Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SFMono-* ~/Library/Fonts

函数

请看 这个文件.

硬件

蓝牙

1
2
3
4
5
6
7
8
9
# 查看状态
defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState

# 开启 (默认)
sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1

# 禁止
sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0 && \
sudo killall -HUP blued

硬盘

强制启用修剪

从 Yosemite 开始,可以开启非苹果 SSD 的修剪。

1
forcetrim

硬件信息

列出所有硬件端口

1
networksetup -listallhardwareports

剩余电池百分比

1
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f1 -d';'

剩余电池时间

1
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f3 -d';'

显示已连接设备的 UDID

1
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p'

显示当前屏幕分辨率

1
system_profiler SPDisplaysDataType | grep Resolution

显示 CPU 品牌信息

1
sysctl -n machdep.cpu.brand_string

红外传感器

1
2
3
4
5
6
7
8
# 查看状态
defaults read /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled

# 开启 (默认)
defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 1

# 关闭
defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 0

电池管理

禁止电脑休眠

一小时内不使用不睡眠。

1
caffeinate -u -t 3600

显示所有电池设置

1
sudo pmset -g

15 分钟无活动后显示器睡眠

1
sudo pmset displaysleep 15

30 分钟无活动后显示器睡眠

1
sudo pmset sleep 30

检查系统睡眠剩余时间

1
sudo systemsetup -getcomputersleep

将系统睡眠剩余时间设置为 60 分钟

1
sudo systemsetup -setcomputersleep 60

完全关闭系统睡眠

1
sudo systemsetup -setcomputersleep Never

系统冻结时自动重启

1
sudo systemsetup -setrestartfreeze on

充电时显示铃声

当 MagSafe 连接时,播放 IOS 充电声音。

1
2
3
4
5
6
7
# 开启
defaults write com.apple.PowerChime ChimeOnAllHardware -bool true && \
open /System/Library/CoreServices/PowerChime.app

# 关闭 (默认)
defaults write com.apple.PowerChime ChimeOnAllHardware -bool false && \
killall PowerChime

输入设备

键盘

自动纠正

1
2
3
4
5
6
7
8
# 禁止
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false

# 开启 (默认)
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool true

# 显示状态
defaults read -g NSAutomaticSpellingCorrectionEnabled

全键盘访问

对话框启用 Tab 。

1
2
3
4
5
#  仅限文本框和列表 (默认)
defaults write NSGlobalDomain AppleKeyboardUIMode -int 0

# 所有控件
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

按键重复

禁止默认的 "press and hold" 行为。

1
2
3
4
5
# 开启按键重复
defaults write -g ApplePressAndHoldEnabled -bool false

# 禁止按键重复
defaults write -g ApplePressAndHoldEnabled -bool true

按键重复频率

设置非常快的按键频率,根据个人品味调整。

1
defaults write -g KeyRepeat -int 0.02

启动台

重设启动台布局

你需要重启程序坞,因为启动台与它紧密相连。

1
2
3
4
5
6
7
# Yosemite 之前的版本
rm ~/Library/Application\ Support/Dock/*.db && \
killall Dock

# El Capitan及以上的版本
defaults write com.apple.dock ResetLaunchPad -bool true && \
killall Dock

媒体

音频

将音频文件转换为 iPhone 铃声。

1
afconvert input.mp3 ringtone.m4r -f m4af

从文本创建音频书

使用 Alex 声音,将单纯的 UTF-8 文本文件转换为 AAC。

1
say -v Alex -f file.txt -o "output.m4a"

开机禁用声音

1
sudo nvram SystemAudioVolume=" "

静音音频输出

1
osascript -e 'set volume output muted true'

设置音量

1
osascript -e 'set volume 4'

播放音频文件

你可以播放所有 QuickTime 支持的音频格式。

1
afplay -q 1 filename.mp3

使用系统默认声音讲述文本

1
say 'All your base are belong to us!'

视频

QuickTime 自动播放视频

1
defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1

网络

Bonjour

Bonjour 服务

1
2
3
4
5
# 禁止
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "-NoMulticastAdvertisements"

# 开启 (默认)
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array "/usr/sbin/mDNSResponder" "-launchd"

DHCP

更新 DHCP 租约

1
sudo ipconfig set en0 DHCP

显示 DHCP 信息

1
ipconfig getpacket en0

DNS

清除 DNS 缓存

1
2
sudo dscacheutil -flushcache && \
sudo killall -HUP mDNSResponder

域名

设置电脑域名

1
2
3
4
sudo scutil --set ComputerName "newhostname" && \
sudo scutil --set HostName "newhostname" && \
sudo scutil --set LocalHostName "newhostname" && \
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "newhostname"

网络设置

网络位置

在网络设置中切换网络位置。

1
2
3
4
5
# 查看状态
scselect

# 切换网络位置
scselect LocationNameFromStatus

设置静态 IP 地址

1
networksetup -setmanual "Ethernet" 192.168.2.100 255.255.255.0 192.168.2.1

网络工具

查看网络地址是否可以访问

1
ping -o github.com

解决路由问题

1
traceroute github.com

SSH

将私钥密码永久添加到 SSH 代理

在 macOS Sierra 之前,ssh 会弹出输入密码的对话框,并提供是否将其存储到钥匙串的选项。 这个功能之后被删除。

在 macOS Sierra 中引入了 UseKeychain 选项,允许用户指定是否将密码存储在钥匙串中。 默认情况下,这个选项是开启的,这会导致所有密码都存储在钥匙串中。

这不是预期的默认行为,因此在 macOS 10.12.2 更改过来。([来源](https://developer.apple.com/library/archive/technotes/tn2449/_index.html))

1
ssh-add -K /path/to/private_key

Then add to ~/.ssh/config:

1
2
3
Host server.example.com
    IdentityFile /path/to/private_key
    UseKeychain yes

远程登录

1
2
3
4
5
# 开启远程登录
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

# 关闭远程登录
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

TCP/IP

显示使用特定端口的应用程序

输出所有使用 80 端口的应用程序。

1
sudo lsof -i :80

显示外部 IP 地址

仅当你的 ISP 没有替换 DNS 请求(一般不会)。

1
dig +short myip.opendns.com @resolver1.opendns.com

在所有网络中都可使用的替代方法。

1
curl -s https://api.ipify.org && echo

TFTP

启动原生的 TFTP Daemon

文件将从 /private/tftpboot 启动。

1
2
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist && \
sudo launchctl start com.apple.tftpd

Wi-Fi

加入 Wi-Fi 网络

1
networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD

扫描可用的接入点

创建 airport 轻松接入的符号链接。

1
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

运行无线扫描:

1
airport -s

显示当前的 SSID

1
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'

显示本地 IP 地址

1
ipconfig getifaddr en0

显示 Wi-Fi 的连接历史

1
defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep LastConnected -A 7

显示 Wi-Fi 网络密码

如果你希望使用 SSID 查询密码。

1
security find-generic-password -D "AirPort network password" -a "SSID" -gw

开启 Wi-Fi 适配器

1
networksetup -setairportpower en0 on

包管理器

  • Fink - Unix 开源软件的全部 Darwin 世界,有点过时。
  • Homebrew - OS X 缺少的包管理器,最流行的选择,我使用这个工具。
  • MacPorts - 基于 X11 、Aqua 的开源软件,编译、安装和升级软件包命令行工具。 非常干净的工具,原作者使用它。

打印

清除打印队列

1
cancel -a -

默认展开打印面板

1
2
defaults write -g PMPrintingExpandedStateForPrint -bool true && \
defaults write -g PMPrintingExpandedStateForPrint2 -bool true

打印完成后停止打印机

1
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true

安全

应用防火墙

防火墙服务

1
2
3
4
5
6
7
8
# 查看状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

# 开启
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

# 关闭 (默认)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

将应用添加到防火墙

1
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /path/to/file

网关

添加网关异常

1
spctl --add /path/to/Application.app

删除网关异常

1
spctl --remove /path/to/Application.app

管理网关

1
2
3
4
5
6
7
8
# 查看状态
spctl --status

# 开启 (默认)
sudo spctl --master-enable

# 关闭
sudo spctl --master-disable

密码

产生安全的密码并且复制到剪贴板

1
LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 20 | pbcopy

物理访问

启动屏幕保护程序

1
2
3
4
5
# Sierra 之前
open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app

# Sierra 之后
/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

锁屏

1
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

屏幕锁定

1
2
3
4
5
6
7
8
# 查看状态
defaults read com.apple.screensaver askForPasswordDelay

# 开启 (默认)
defaults write com.apple.screensaver askForPasswordDelay -int 0

# 禁止 (Integer = 锁屏的延迟秒数)
defaults write com.apple.screensaver askForPasswordDelay -int 10

屏幕保护密码

1
2
3
4
5
6
7
8
# 查看状态
defaults read com.apple.screensaver askForPassword

# 开启
defaults write com.apple.screensaver askForPassword -int 1

# 关闭 (默认)
defaults write com.apple.screensaver askForPassword -int 0

擦除数据

注意:在 MacOS 10.9 之后,srm 命令已经被删除了。 [Apple 支持页面](https://support.apple.com/en-us/HT201949)解释了原因。

使用 SSD 驱动器时,磁盘工具中不提供安全擦除和擦除可用空间功能。 SSD 驱动器不需要这些选项,因为标准擦除使得难以从 SSD 恢复数据。

安全删除文件

1
srm /path/to/file

安全删除文件夹

1
srm -r /path/to/folder/

安全强制删除文件夹

1
srm -rf /path/to/complete/destruction

搜索

查找

递归删除 .DS_Store 文件

1
find . -type f -name '*.DS_Store' -ls -delete

定位

建立定位数据库

1
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

通过定位查询

-i修饰符意味着搜索对大小写敏感。

1
locate -i *.jpg

系统

AirDrop

1
2
3
4
5
6
7
8
# 在 Ethernet 以上版本以及不支持的 Mac 版本,开启 AirDrop
defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true

# 开启 (默认)
defaults remove com.apple.NetworkBrowser DisableAirDrop

# 关闭
defaults write com.apple.NetworkBrowser DisableAirDrop -bool YES

AppleScript

执行 AppleScript

1
osascript /path/to/script.scpt

基础

比较两个文件夹

1
diff -qr /path/to/folder1 /path/to/folder2

复制较大文件显示进度条

确定你已经安装了 pv,并且使用适当的写入设备或者文件替换了 /dev/rdisk2

1
FILE=/path/to/file.iso pv -s $(du -h $FILE | awk '/.*/ {print $1}') $FILE | sudo dd of=/dev/rdisk2 bs=1m

修复疯狂 Shell

如果你的 shell 会话疯狂。(比如某些脚本或应用程序将其变成乱码)。

1
stty sane

重启

1
sudo reboot

关机

1
sudo poweroff

显示 OS 版本信息

1
sw_vers

开机时间

显示上次开机到现在过去的时间。

1
uptime

剪贴板

复制数据到剪贴板

1
cat whatever.txt | pbcopy

将剪贴板数据转换为纯文本

1
pbpaste | textutil -convert txt -stdin -stdout -encoding 30 | pbcopy

将剪贴板内容中的 Tab 转换为空格

1
pbpaste | expand | pbcopy

复制剪贴板的数据

1
pbpaste > whatever.txt

删除剪贴板重复内容以及排序

1
pbpaste | sort | uniq | pbcopy

文件库

重启自动解锁文件库

如果在当前卷上启用了文件库,则会绕过初始解锁,重新启动系统。 该命令可能无法在所有版本上运行。

1
sudo fdesetup authrestart

文件库服务

1
2
3
4
5
6
7
8
# 查看状态
sudo fdesetup status

# 开启
sudo fdesetup enable

# 禁止 (默认)
sudo fdesetup disable

信息/报告

产生高级系统和性能报告

1
sudo sysdiagnose -f ~/Desktop/

安装系统

创建安装启动器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Mojave
sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --nointeraction --downloadassets

# High Sierra
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ High\ Sierra.app

# Sierra
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ Sierra.app

# El Capitan
sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

# Yosemite
sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ Yosemite.app
  • 删除驱动器之前进行确认,删去 --nointeraction 选项。
  • Mojave 中才可以使用 --downloadassets 选项。 安装过程中可能会下载资源,比如更新。
  • 从 Mojave 开始,--applicationpath 选项以及被废弃。使用该选项会抛出错误。

内核扩展

展示加载的内核扩展

1
sudo kextstat -l

加载内核扩展

1
sudo kextload -b com.apple.driver.ExampleBundle

卸载内核扩展

1
sudo kextunload -b com.apple.driver.ExampleBundle

自启动服务

请看 自启动服务.

自启动服务

重建自启动服务数据库

为了做到与 OS X 版本无关,这个工具依赖 locate 查找 lsregister。 如果你还没有建立你的 locate 数据库,请先创建

1
sudo $(locate lsregister) -kill -seed -r

登录窗口

设置登录窗口文本

1
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "Your text"

内存管理

清除内存缓存

1
sudo purge

显示内存统计

1
2
3
4
5
# One time
vm_stat

# Table of data, repeat 10 times total, 1 second wait between each poll
vm_stat -c 10 1

通知中心

通知中心服务

1
2
3
4
5
6
# 关闭
launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist && \
killall -9 NotificationCenter

# 启动 (默认)
launchctl load -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist

快速浏览

快速浏览文件

1
qlmanage -p /path/to/file

远程苹果事件

1
2
3
4
5
6
7
8
# 查看状态
sudo systemsetup -getremoteappleevents

# 开启
sudo systemsetup -setremoteappleevents on

# 禁止 (默认)
sudo systemsetup -setremoteappleevents off

Root 用户

1
2
3
4
5
# 开启
dsenableroot

# 禁止
dsenableroot -d

安全模式启动

1
2
3
4
5
6
7
8
# 查看状态
nvram boot-args

# 开启
sudo nvram boot-args="-x"

# 禁止
sudo nvram boot-args=""

截图

延迟截图

3 秒后截图为 JPEG 文件,并且在预览中展示。

1
screencapture -T 3 -t jpg -P delayedpic.jpg

保存截图到给定位置

设置保存地址为桌面。

1
2
defaults write com.apple.screencapture location ~/Desktop && \
killall SystemUIServer

设置截图文件格式

设置截图文件格式为 png,可选的格式有 bmp, gif, jpg, jpeg, pdf, tiff

1
defaults write com.apple.screencapture type -string "png"

禁止截图阴影

1
2
defaults write com.apple.screencapture disable-shadow -bool true && \
killall SystemUIServer

设置截图的默认文件名

截图文件名的时间戳保持不变。

1
2
defaults write com.apple.screencapture name "Example name" && \
killall SystemUIServer

软件安装

安装 PKG

1
installer -pkg /path/to/installer.pkg -target /

软件更新

更新所有可以更新的软件

1
sudo softwareupdate -ia

设置软件更新检查的时间间隔

将软件更新检查的时间间隔设置为天,而不是默认的周。

1
defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1

显示所有可以更新的软件

1
sudo softwareupdate -l

设置软件更新服务器

这仅适用于测试或非托管的客户端。 要在网络范围内使用,请正确设置 DNS 以及 Apple SUS 服务 并通过 OpenDirectory 绑定客户端。 或者,使用 Reposado 正确设置网络 DNS,使分辨率变得透明。 Margarita 看起来也不错。

1
2
3
4
5
# 使用自己 SUS
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://su.example.com:8088/index.sucatalog

# 恢复苹果的默认 SUS
sudo defaults delete /Library/Preferences/com.apple.SoftwareUpdate CatalogURL

软件版本

显示系统的版本号

1
sw_vers -productVersion

聚焦

聚焦索引

1
2
3
4
5
# 禁止
mdutil -i off -d /path/to/volume

# 关闭 (默认)
mdutil -i on /path/to/volume

擦除聚焦索引并重建

1
mdutil -E /path/to/volume

通过聚焦搜索

1
mdfind -name 'searchterm'

显示聚焦索引元数据

1
mdls /path/to/file

系统完整性保护

禁止系统完整性保护

按住 Cmd + R 重启,打开终端输入以下命令:

1
csrutil disable && reboot

开启系统完整性保护

按住 Cmd + R 重启,打开终端输入以下命令:

1
csrutil enable && reboot

时间和日期

列出所有时区

1
sudo systemsetup -listtimezones

设置时区

1
sudo systemsetup -settimezone Europe/Berlin

网络时间设置时钟

1
2
3
4
5
6
7
8
# 查看状态
sudo systemsetup getusingnetworktime

# 开启 (默认)
sudo systemsetup setusingnetworktime on

# 关闭
sudo systemsetup setusingnetworktime off

终端

终端响铃

开启终端响铃,并在其上显示徽标数。

1
tput bel

替代终端

  • iTerm2 - 更好的终端应用
  • kitty - 现代化以及 GPU 加速的终端应用。

Shells

Bash

安装最新版本的 Bash,并且设置为用户的默认的 shell

1
2
3
brew install bash && \
echo $(brew --prefix)/bin/bash | sudo tee -a /etc/shells && \
chsh -s $(brew --prefix)/bin/bash
  • Homepage - OS X 以及 Unix 类似系统的默认 shell 。
  • Bash-it - 社区驱动 Bash 框架,类似 Oh My Zsh

fish

安装最新版本的 fish,并且设置为用户的默认的 shell

1
2
3
brew install fish && \
echo $(brew --prefix)/bin/fish | sudo tee -a /etc/shells && \
chsh -s $(brew --prefix)/bin/fish

Zsh

安装最新版本的 Zsh,并且设置为用户的默认的 shell

1
2
3
brew install zsh && \
sudo sh -c 'echo $(brew --prefix)/bin/zsh >> /etc/shells' && \
chsh -s $(brew --prefix)/bin/zsh
  • Homepage - 尽管 Zsh 是一种强大的脚本语言,它是专为交互式使用而设计的 shell。
  • Oh My Zsh - 社区驱动开源框架,用于管理 Zsh 配置。
  • Prezto - 一个快速的 Zsh 框架。 使用默认值,别名,函数,自动完成和主题来丰富命令行界面环境。
  • zgen - 另一个管理 Zsh 配置的开源框架。 Zgen 可以兼容 oh-my-zsh 的插件和主题,并且具有自动克隆任何插件以及更快的优点。

终端字体

  • Anonymous Pro - 四种固定宽度系列字体,适用于编程。
  • Codeface - 用于开发人员的图库和等宽字体库。
  • DejaVu Sans Mono - 基于 Vera Fonts 的字体家族。
  • Hack - Hack 手动整理字体,是你编程字体的首选。
  • Inconsolata - 一种等宽字体,专为编程设计。
  • Input - 专为编程响应系统的字体设计。
  • Meslo - Apple's Menlo 字体的自制版本.
  • Operator Mono - 令人惊讶的商业等宽字体。
  • Powerline Fonts - Powerline 插件的修补字体仓库
  • Source Code Pro - 专为用户交互以及编程的等宽字体家族。

词汇表

Mac OS X、OS X 以及 macOS 的版本信息

版本 名称 发布日期 最新版本
Rhapsody Developer Release Grail1Z4 / Titan1U August 31, 1997 DR2 (May 14, 1998)
Mac OS X Server 1.0 Hera March 16, 1999 1.2v3 (October 27, 2000)
Mac OS X Developer Preview n/a March 16, 1999 DP4 (April 5, 2000)
Mac OS X Public Beta Kodiak September 13, 2000 n/a
Mac OS X 10.0 Cheetah March 24, 2001 10.0.4 (June 22, 2001)
Mac OS X 10.1 Puma September 25, 2001 10.1.5 (June 6, 2002)
Mac OS X 10.2 Jaguar August 24, 2002 10.2.8 (October 3, 2003)
Mac OS X 10.3 Panther October 24, 2003 10.3.9 (April 15, 2005)
Mac OS X 10.4 Tiger April 29, 2005 10.4.11 (November 14, 2007)
Mac OS X 10.5 Leopard October 26, 2007 10.5.8 (August 5, 2009)
Mac OS X 10.6 Snow Leopard August 28, 2009 10.6.8 v1.1 (July 25, 2011)
Mac OS X 10.7 Lion July 20, 2011 10.7.5 (September 19, 2012)
OS X 10.8 Mountain Lion July 25, 2012 10.8.5 (12F45) (October 3, 2013)
OS X 10.9 Mavericks October 22, 2013 10.9.5 (13F1112) (September 18, 2014)
OS X 10.10 Yosemite October 16, 2014 10.10.5 (14F27) (August 13, 2015)
OS X 10.11 El Capitan September 30, 2015 10.11.6 (15G31) (July 18, 2016)
macOS 10.12 Sierra September 20, 2016 10.12.6 (16G29) (July 19, 2017)
macOS 10.13 High Sierra September 25, 2017 10.13.6 (17G65) (July 9, 2018)
macOS 10.14 Mojave September 24, 2018 10.14 (18A391) (September 24, 2018)