awesome-macos-command-line 收集了很多有趣的 Mac 终端命令。
看了一遍后,发现帮助很大。
见识了许多没有使用过的命令,加深了对 Mac 的认识。
所以翻译成中文,分享给其他需要的人查看。
翻译不妥的地方,欢迎提 issue 或者 pull request 。
喜欢点 star ,关注点 watch,贡献点 fork 。
为了获得更好的阅读效果,可以在线预览。在线预览地址
精心为 OS X 挑选的 shell 命令和工具。
“你无需知晓一切。仅仅在你需要的时候,找到它就行了。” (John Brunner)
中文 | English
外形
透明度
菜单和窗口的透明度设置
# 减小透明度
defaults write com.apple.universalaccess reduceTransparency -bool true
# 恢复默认透明度
defaults write com.apple.universalaccess reduceTransparency -bool false
桌面背景
设置桌面背景
# 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 下载的应用
# 通过 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 版本起作用
# 开启
defaults write com.apple.appstore ShowDebugMenu -bool true
# 关闭 (默认)
defaults write com.apple.appstore ShowDebugMenu -bool false
苹果远程桌面
唤醒手册
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -help
唤醒和睡眠 ARD Agent 和 Helper
# 激活并且重启 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
开启和关闭远程桌面共享
# 给予所有用户完全的接入权限
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
删除苹果远程桌面设置
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
通讯录
调试模式
# 开启
defaults write com.apple.addressbook ABShowDebugMenu -bool true
# 关闭 (默认)
defaults write com.apple.addressbook ABShowDebugMenu -bool false
卸载 Google 更新
~/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/ksinstall --nuke
iTunes
键盘媒体健
Yosemite 版本起作用。从 El Capitan 开始引入了系统完整性保护,可防止系统启动代理被卸载。
# 停止响应按键
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 ,并可能与操作系统的更新相冲突。
sudo chmod 0000 /Applications/iTunes.app
邮件
将附件显示为图标
Mac 10.14.4 测试,纯文本或其他文件会显示为图标,但是图片会直接插入。图片可以右键转换为图标,或者更换邮箱客户端解决。issue 1
defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
清空邮件索引
下面的 AppleScript 代码将关闭邮件,清空 SQLite 索引,然后重新打开 Mail。在一个没有优化的大型电子邮件数据库中,可以显着提高响应速度。
(*
加快邮件索引。
代码来源: 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
改变默认字体
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
开启开发者菜单以及网络检查
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
.
osascript -e 'tell application "Safari" to get URL of current tab of front window'
使用 Backspace/Delete 返回上一页
# 开启
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
defaults write com.bohemiancoding.sketch3 exportCompactSVG -bool yes
Skim
关闭自动加载弹窗
去掉弹窗并设置默认自动加载
defaults write -app Skim SKAutoReloadFileUpdate -boolean true
终端
焦点跟随鼠标
# 开启
defaults write com.apple.Terminal FocusFollowsMouse -string YES
# 关闭
defaults write com.apple.Terminal FocusFollowsMouse -string NO
文本编辑
将文本编辑设置为纯文本的默认打开方式
defaults write com.apple.TextEdit RichText -int 0
Visual Studio Code
解决 VSCode Vim 按键重复
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
备份
时间机器
改变备份间隔
备份间隔改为 30 分钟,单位是秒。
sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 1800
本地备份
本地备份时,时间机器备份卷不可用。
# 查看状态
defaults read /Library/Preferences/com.apple.TimeMachine MobileBackups
# 开启 (默认)
sudo tmutil enablelocal
# 关闭
sudo tmutil disablelocal
从 High Sierra 开始,你无法禁用本地快照。 时间机器始终会创建本地 APFS 快照,并使用该快照作为创建常规备份的数据源,而不是使用活动磁盘作为数据源,就像 HFS 格式化磁盘一样。
防止时间机器提示将新的硬盘启动器作为本分卷
sudo defaults write /Library/Preferences/com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
显示时间机器的日志
这个脚本将输出过去 12 个小时时间机器的备份活动。
#!/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"
充电时切换备份
# 查看状态
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,校验和不会复制到快照。
sudo tmutil verifychecksums /path/to/backup
开发者
Vim
编译 Sane Vim
通过 Homebrew 编译出完整 Mac Vim,包括覆盖系统的 Vim。
brew install macvim --HEAD --with-cscope --with-lua --with-override-system-vim --with-luajit --with-python
Neovim
通过 Homebrew 安装现代化的 Vim 替代品。
brew install neovim
Xcode
安装没有命令行工具的 Xcode
xcode-select --install
删除所有不可用的模拟器
xcrun simctl delete unavailable
程序坞
将最近使用的程序添加到程序坞
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }' && \
killall Dock
添加间隔符的无名文件夹
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = {}; "tile-type"="small-spacer-tile"; }' && \
killall Dock
添加空格
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}' && \
killall Dock
添加小空格
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="small-spacer-tile";}' && \
killall Dock
根据用户最近的使用自动重排
# 开启 (默认)
defaults write com.apple.dock mru-spaces -bool true && \
killall Dock
# 关闭
defaults write com.apple.dock mru-spaces -bool false && \
killall Dock
图标弹跳
全局设置当唤醒应用时,是否弹跳图标。
# 开启 (默认)
defaults write com.apple.dock no-bouncing -bool true && \
killall Dock
# 关闭
defaults write com.apple.dock no-bouncing -bool false && \
killall Dock
锁住程序坞大小
# 开启
defaults write com.apple.Dock size-immutable -bool yes && \
killall Dock
# 关闭 (默认)
defaults write com.apple.Dock size-immutable -bool no && \
killall Dock
重置程序坞
defaults delete com.apple.dock && \
killall Dock
改变程序坞大小
完全改变程序坞主体大小。要调整大小,将 0 改为整数
defaults write com.apple.dock tilesize -int 0 && \
killall Dock
滚动手势
使用触摸板或鼠标滚轮与程序坞进行交互,允许您使用向上滚动手势打开应用。正在运行的程序也可以使用相同的手势调用程序窗口管理。
# 开启
defaults write com.apple.dock scroll-to-open -bool true && \
killall Dock
# 关闭 (默认)
defaults write com.apple.dock scroll-to-open -bool false && \
killall Dock
启用自动掩藏
defaults write com.apple.dock autohide -bool true && \
killall Dock
设置自动显示和掩藏的延迟时间
浮点数定义了显示和掩藏的延迟时间(单位毫秒)。
defaults write com.apple.dock autohide-time-modifier -float 0.4 && \
defaults write com.apple.dock autohide-delay -float 0 && \
killall Dock
显示掩藏 APP 的图标
# 开启
defaults write com.apple.dock showhidden -bool true && \
killall Dock
# 关闭 (默认)
defaults write com.apple.dock showhidden -bool false && \
killall Dock
仅显示启动的应用程序图标
# 开启
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)。
textutil -convert html file.ext
文件、磁盘和卷
创建一个空文件
创建一个 10 GB 的空文件。
mkfile 10g /path/to/file
禁止突发动作感应
当你使用的是 SSD 时,这个设置是无用的。
sudo pmset -a sms 0
弹出所有可安装的卷
唯一可以向访达发送 AppleScript 命令的方法。
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
修复文件权限
不依赖图形化磁盘工具修复文件权限。
sudo diskutil repairPermissions /
从 OS X El Capitan 开始,系统文件权限将自动受到保护。 不再需要使用磁盘工具验证或修复权限。(来源)
设置启动卷
# Up to Yosemite
bless --mount "/path/to/mounted/volume" --setBoot
# From El Capitan
sudo systemsetup -setstartupdisk /System/Library/CoreServices
示所有附加的磁盘和分区
diskutil list
查看文件系统的使用率
连续显示文件使用信息。
sudo fs_usage
APFS
从 High Sierra 开启,没有中央程序,并且使用不一致,因为大多数功能都被卷入到 tmutil
。
将卷从 HFS+ 转换为 APFS
/System/Library/Filesystems/apfs.fs/Contents/Resources/hfs_convert /path/to/file/system
创建新的 APFS 文件系统
/System/Library/Filesystems/apfs.fs/Contents/Resources/newfs_apfs /path/to/device
创建快照
tmutil localsnapshot
删除快照
tmutil deletelocalsnapshots com.apple.TimeMachine.2018-01-26-044042
列出所有快照
tmutil listlocalsnapshots /
挂载快照
快照是只读的。
mkdir ~/mnt
/System/Library/Filesystems/apfs.fs/Contents/Resources/mount_apfs -s com.apple.TimeMachine.2018-01-26-044042 / ~/mnt
磁盘映像
从文件内容创建磁盘映像
将安装的应用程序转换为二进制包。
hdiutil create -volname "Volume Name" -srcfolder /path/to/folder -ov diskimage.dmg
如果你想加密磁盘映像:
hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg
打包前,你要输入密码。为了直接输入密码不弹窗:
echo -n YourPassword | hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg
将磁盘映像刻录为 DVD
这个命令可以应用在 .iso 、.img 和 .dmg 文件上。
hdiutil burn /path/to/image_file
禁止磁盘映像验证
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 启动卷
bless --folder "/path/to/mounted/volume/System/Library/CoreServices" --bootinfo --bootefi
挂载磁盘映像
hdiutil attach /path/to/diskimage.dmg
卸载磁盘映像
hdiutil detach /dev/disk2s1
将磁盘映像写入到卷中
就像磁盘工具的恢复功能。
sudo asr -restore -noverify -source /path/to/diskimage.dmg -target /Volumes/VolumeToRestoreTo
访达
桌面
显示外部媒体
外部的 HDs 、thumb drives 等等。
# 开启
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true && \
killall Finder
# 关闭 (默认)
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool false && \
killall Finder
显示内部媒体
自建的 HDs 或者 SSDs。
# 开启
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true && \
killall Finder
# 关闭 (默认)
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool false && \
killall Finder
显示可移动媒体
CDs 、DVDs 、iPods 等等。
# 开启
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true && \
killall Finder
# 关闭 (默认)
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool false && \
killall Finder
显示网络卷
AFP 、SMB、 NFS、 WebDAV 等等。
# 开启
defaults write com.apple.finder ShowMountedServersOnDesktop -bool true && \
killall Finder
# 关闭 (默认)
defaults write com.apple.finder ShowMountedServersOnDesktop -bool false && \
killall Finder
文件和文件夹
清除所有访问控制列表(ACLs)
sudo chmod -RN /path/to/folder
在访达掩藏文件夹
chflags hidden /path/to/folder/
显示所有文件的扩展名
defaults write -g AppleShowAllExtensions -bool true
显示掩藏文件
# 显示所有
defaults write com.apple.finder AppleShowAllFiles true
# 恢复文件的默认显示
defaults write com.apple.finder AppleShowAllFiles false
删除保护标签
sudo chflags -R nouchg /path/to/file/or/folder
在访达中显示全路径
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
取消隐藏用户文件夹
chflags nohidden ~/Library
增加最近访问文件数量
defaults write -g NSNavRecentPlacesLimit -int 10 && \
killall Finder
布局
显示退出访达按钮
显示 退出访达的默认快捷键是 Cmd + Q 。
# 开启
defaults write com.apple.finder QuitMenuItem -bool true && \
killall Finder
# 关闭 (默认)
defaults write com.apple.finder QuitMenuItem -bool false && \
killall Finder
平滑滚动
对旧 Mac 会弄乱动画很有用。
# 开启
defaults write -g NSScrollAnimationEnabled -bool false
# 关闭 (默认)
defaults write -g NSScrollAnimationEnabled -bool true
橡皮筋滚动
# 禁止
defaults write -g NSScrollViewRubberbanding -bool false
# 关闭 (默认)
defaults write -g NSScrollViewRubberbanding -bool true
展开默认保存面板
defaults write -g NSNavPanelExpandedStateForSaveMode -bool true && \
defaults write -g NSNavPanelExpandedStateForSaveMode2 -bool true
桌面图标可见性
# 掩藏图标
defaults write com.apple.finder CreateDesktop -bool false && \
killall Finder
# 显示图标(默认)
defaults write com.apple.finder CreateDesktop -bool true && \
killall Finder
路径栏
# 显示
defaults write com.apple.finder ShowPathbar -bool true
# 掩藏 (默认)
defaults write com.apple.finder ShowPathbar -bool false
滚动条可见性
可选的选项: WhenScrolling
、Automatic
和 Always
。
defaults write -g AppleShowScrollBars -string "Always"
状态栏
# 显示
defaults write com.apple.finder ShowStatusBar -bool true
# 掩藏 (默认)
defaults write com.apple.finder ShowStatusBar -bool false
默认保存到磁盘
设置默认保存地址是本地磁盘,而不是 iCloud 。
defaults write -g NSDocumentSaveNewDocumentsToCloud -bool false
当当前文件夹设置为默认搜索范围
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
设置访达的默认文件夹
defaults write com.apple.finder NewWindowTarget -string "PfLo" && \
defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}"
设置侧边栏图标大小
将大小设置为中等大小。
defaults write -g NSTableViewDefaultSizeMode -int 2
元数据文件
禁止在网络卷创建元数据文件
避免创建 .DS_Store
以及 AppleDouble 文件。
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
禁止在 USB 卷创建元数据文件
避免创建 .DS_Store
以及 AppleDouble 文件。
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
打开文件
改变访达的工作文件夹
如果同时打开了多个窗口,选择最上面。
cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"
打开 URL
open https://github.com
打开文件
open README.md
打开应用程序
你可以加上 -a
打开应用程序。
open -a "Google Chrome" https://github.com
打开文件夹
open /path/to/folder/
打开当前文件夹
open .
字体
清空当前用户字体缓存
为了清除所有用户的字体缓存,在命令前加上 sudo
。
atsutil databases -removeUser && \
atsutil server -shutdown && \
atsutil server -ping
获取 SF Mono 字体
你需要先下载和安装 Xcode 8 beta,之后所有应用都可以使用。
cp -v /Applications/Xcode-beta.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Fonts/SFMono-* ~/Library/Fonts
对于 Sierra 之前的版本,它们包含 Terminal.app 中。
cp -v /Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SFMono-* ~/Library/Fonts
函数
请看 这个文件.
硬件
蓝牙
# 查看状态
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 的修剪。
forcetrim
硬件信息
列出所有硬件端口
networksetup -listallhardwareports
剩余电池百分比
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f1 -d';'
剩余电池时间
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f3 -d';'
显示已连接设备的 UDID
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p'
显示当前屏幕分辨率
system_profiler SPDisplaysDataType | grep Resolution
显示 CPU 品牌信息
sysctl -n machdep.cpu.brand_string
红外传感器
# 查看状态
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
电池管理
禁止电脑休眠
一小时内不使用不睡眠。
caffeinate -u -t 3600
显示所有电池设置
sudo pmset -g
15 分钟无活动后显示器睡眠
sudo pmset displaysleep 15
30 分钟无活动后显示器睡眠
sudo pmset sleep 30
检查系统睡眠剩余时间
sudo systemsetup -getcomputersleep
将系统睡眠剩余时间设置为 60 分钟
sudo systemsetup -setcomputersleep 60
完全关闭系统睡眠
sudo systemsetup -setcomputersleep Never
系统冻结时自动重启
sudo systemsetup -setrestartfreeze on
充电时显示铃声
当 MagSafe 连接时,播放 IOS 充电声音。
# 开启
defaults write com.apple.PowerChime ChimeOnAllHardware -bool true && \
open /System/Library/CoreServices/PowerChime.app
# 关闭 (默认)
defaults write com.apple.PowerChime ChimeOnAllHardware -bool false && \
killall PowerChime
输入设备
键盘
自动纠正
# 禁止
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false
# 开启 (默认)
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool true
# 显示状态
defaults read -g NSAutomaticSpellingCorrectionEnabled
全键盘访问
对话框启用 Tab 。
# 仅限文本框和列表 (默认)
defaults write NSGlobalDomain AppleKeyboardUIMode -int 0
# 所有控件
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
按键重复
禁止默认的 "press and hold" 行为。
# 开启按键重复
defaults write -g ApplePressAndHoldEnabled -bool false
# 禁止按键重复
defaults write -g ApplePressAndHoldEnabled -bool true
按键重复频率
设置非常快的按键频率,根据个人品味调整。
defaults write -g KeyRepeat -int 0.02
启动台
重设启动台布局
你需要重启程序坞,因为启动台与它紧密相连。
# Yosemite 之前的版本
rm ~/Library/Application\ Support/Dock/*.db && \
killall Dock
# El Capitan及以上的版本
defaults write com.apple.dock ResetLaunchPad -bool true && \
killall Dock
删除启动台图标
长按删除图标以及重设启动台布局后,仍然无法删除的图标,使用下面的命令删除。
Gitter 是图标名称,大小写敏感。
sqlite3 $(find /private/var/folders \( -name com.apple.dock.launchpad -a -user $USER \) 2> /dev/null)/db/db "DELETE FROM apps WHERE title='Gitter';" && killall Dock
媒体
音频
将音频文件转换为 iPhone 铃声。
afconvert input.mp3 ringtone.m4r -f m4af
从文本创建音频书
使用 Alex 声音,将单纯的 UTF-8 文本文件转换为 AAC。
say -v Alex -f file.txt -o "output.m4a"
开机禁用声音
sudo nvram SystemAudioVolume=" "
静音音频输出
osascript -e 'set volume output muted true'
设置音量
osascript -e 'set volume 4'
播放音频文件
你可以播放所有 QuickTime 支持的音频格式。
afplay -q 1 filename.mp3
使用系统默认声音讲述文本
say 'All your base are belong to us!'
视频
QuickTime 自动播放视频
defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1
网络
Bonjour
Bonjour 服务
# 禁止
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 租约
sudo ipconfig set en0 DHCP
显示 DHCP 信息
ipconfig getpacket en0
DNS
清除 DNS 缓存
sudo dscacheutil -flushcache && \
sudo killall -HUP mDNSResponder
域名
设置电脑域名
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"
网络设置
网络位置
在网络设置中切换网络位置。
# 查看状态
scselect
# 切换网络位置
scselect LocationNameFromStatus
设置静态 IP 地址
networksetup -setmanual "Ethernet" 192.168.2.100 255.255.255.0 192.168.2.1
网络工具
查看网络地址是否可以访问
ping -o github.com
解决路由问题
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))
ssh-add -K /path/to/private_key
Then add to ~/.ssh/config
:
Host server.example.com
IdentityFile /path/to/private_key
UseKeychain yes
远程登录
# 开启远程登录
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
# 关闭远程登录
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
TCP/IP
显示使用特定端口的应用程序
输出所有使用 80 端口的应用程序。
sudo lsof -i :80
显示外部 IP 地址
仅当你的 ISP 没有替换 DNS 请求(一般不会)。
dig +short myip.opendns.com @resolver1.opendns.com
在所有网络中都可使用的替代方法。
curl -s https://api.ipify.org && echo
TFTP
启动原生的 TFTP Daemon
文件将从 /private/tftpboot
启动。
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist && \
sudo launchctl start com.apple.tftpd
Wi-Fi
加入 Wi-Fi 网络
networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD
扫描可用的接入点
创建 airport 轻松接入的符号链接。
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport
运行无线扫描:
airport -s
显示当前的 SSID
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
显示本地 IP 地址
ipconfig getifaddr en0
显示 Wi-Fi 的连接历史
defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep LastConnected -A 7
显示 Wi-Fi 网络密码
如果你希望使用 SSID 查询密码。
security find-generic-password -D "AirPort network password" -a "SSID" -gw
开启 Wi-Fi 适配器
networksetup -setairportpower en0 on
包管理器
- Fink - Unix 开源软件的全部 Darwin 世界,有点过时。
- Homebrew - OS X 缺少的包管理器,最流行的选择,我使用这个工具。
- MacPorts - 基于 X11 、Aqua 的开源软件,编译、安装和升级软件包命令行工具。 非常干净的工具,原作者使用它。
打印
清除打印队列
cancel -a -
默认展开打印面板
defaults write -g PMPrintingExpandedStateForPrint -bool true && \
defaults write -g PMPrintingExpandedStateForPrint2 -bool true
打印完成后停止打印机
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
安全
应用防火墙
防火墙服务
# 查看状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# 开启
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
# 关闭 (默认)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
将应用添加到防火墙
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /path/to/file
网关
添加网关异常
spctl --add /path/to/Application.app
删除网关异常
spctl --remove /path/to/Application.app
管理网关
# 查看状态
spctl --status
# 开启 (默认)
sudo spctl --master-enable
# 关闭
sudo spctl --master-disable
密码
产生安全的密码并且复制到剪贴板
LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 20 | pbcopy
物理访问
启动屏幕保护程序
# Sierra 之前
open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app
# Sierra 之后
/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine
锁屏
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
屏幕锁定
# 查看状态
defaults read com.apple.screensaver askForPasswordDelay
# 开启 (默认)
defaults write com.apple.screensaver askForPasswordDelay -int 0
# 禁止 (Integer = 锁屏的延迟秒数)
defaults write com.apple.screensaver askForPasswordDelay -int 10
屏幕保护密码
# 查看状态
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 恢复数据。
安全删除文件
srm /path/to/file
安全删除文件夹
srm -r /path/to/folder/
安全强制删除文件夹
srm -rf /path/to/complete/destruction
搜索
查找
递归删除 .DS_Store 文件
find . -type f -name '*.DS_Store' -ls -delete
定位
建立定位数据库
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
通过定位查询
-i
修饰符意味着搜索对大小写敏感。
locate -i *.jpg
系统
AirDrop
# 在 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
osascript /path/to/script.scpt
基础
比较两个文件夹
diff -qr /path/to/folder1 /path/to/folder2
复制较大文件显示进度条
确定你已经安装了 pv
,并且使用适当的写入设备或者文件替换了 /dev/rdisk2
。
FILE=/path/to/file.iso pv -s $(du -h $FILE | awk '/.*/ {print $1}') $FILE | sudo dd of=/dev/rdisk2 bs=1m
修复疯狂 Shell
如果你的 shell 会话疯狂。(比如某些脚本或应用程序将其变成乱码)。
stty sane
重启
sudo reboot
关机
sudo poweroff
显示 OS 版本信息
sw_vers
开机时间
显示上次开机到现在过去的时间。
uptime
剪贴板
复制数据到剪贴板
cat whatever.txt | pbcopy
将剪贴板数据转换为纯文本
pbpaste | textutil -convert txt -stdin -stdout -encoding 30 | pbcopy
将剪贴板内容中的 Tab 转换为空格
pbpaste | expand | pbcopy
复制剪贴板的数据
pbpaste > whatever.txt
删除剪贴板重复内容以及排序
pbpaste | sort | uniq | pbcopy
文件库
重启自动解锁文件库
如果在当前卷上启用了文件库,则会绕过初始解锁,重新启动系统。 该命令可能无法在所有版本上运行。
sudo fdesetup authrestart
文件库服务
# 查看状态
sudo fdesetup status
# 开启
sudo fdesetup enable
# 禁止 (默认)
sudo fdesetup disable
信息/报告
产生高级系统和性能报告
sudo sysdiagnose -f ~/Desktop/
安装系统
创建安装启动器
# 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
选项以及被废弃。使用该选项会抛出错误。
内核扩展
展示加载的内核扩展
sudo kextstat -l
加载内核扩展
sudo kextload -b com.apple.driver.ExampleBundle
卸载内核扩展
sudo kextunload -b com.apple.driver.ExampleBundle
自启动服务
请看 自启动服务.
自启动服务
重建自启动服务数据库
为了做到与 OS X 版本无关,这个工具依赖 locate
查找 lsregister
。 如果你还没有建立你的 locate
数据库,请先创建。
sudo $(locate lsregister) -kill -seed -r
登录窗口
设置登录窗口文本
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "Your text"
内存管理
清除内存缓存
sudo purge
显示内存统计
# One time
vm_stat
# Table of data, repeat 10 times total, 1 second wait between each poll
vm_stat -c 10 1
通知中心
通知中心服务
# 关闭
launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist && \
killall -9 NotificationCenter
# 启动 (默认)
launchctl load -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist
快速浏览
快速浏览文件
qlmanage -p /path/to/file
远程苹果事件
# 查看状态
sudo systemsetup -getremoteappleevents
# 开启
sudo systemsetup -setremoteappleevents on
# 禁止 (默认)
sudo systemsetup -setremoteappleevents off
Root 用户
# 开启
dsenableroot
# 禁止
dsenableroot -d
安全模式启动
# 查看状态
nvram boot-args
# 开启
sudo nvram boot-args="-x"
# 禁止
sudo nvram boot-args=""
截图
延迟截图
3 秒后截图为 JPEG 文件,并且在预览中展示。
screencapture -T 3 -t jpg -P delayedpic.jpg
保存截图到给定位置
设置保存地址为桌面。
defaults write com.apple.screencapture location ~/Desktop && \
killall SystemUIServer
设置截图文件格式
设置截图文件格式为 png
,可选的格式有 bmp
, gif
, jpg
, jpeg
, pdf
, tiff
。
defaults write com.apple.screencapture type -string "png"
禁止截图阴影
defaults write com.apple.screencapture disable-shadow -bool true && \
killall SystemUIServer
设置截图的默认文件名
截图文件名的时间戳保持不变。
defaults write com.apple.screencapture name "Example name" && \
killall SystemUIServer
软件安装
安装 PKG
installer -pkg /path/to/installer.pkg -target /
软件更新
更新所有可以更新的软件
sudo softwareupdate -ia
设置软件更新检查的时间间隔
将软件更新检查的时间间隔设置为天,而不是默认的周。
defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1
显示所有可以更新的软件
sudo softwareupdate -l
设置软件更新服务器
这仅适用于测试或非托管的客户端。 要在网络范围内使用,请正确设置 DNS 以及 Apple SUS 服务 并通过 OpenDirectory 绑定客户端。 或者,使用 Reposado 正确设置网络 DNS,使分辨率变得透明。 Margarita 看起来也不错。
# 使用自己 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
软件版本
显示系统的版本号
sw_vers -productVersion
聚焦
聚焦索引
# 禁止
mdutil -i off -d /path/to/volume
# 关闭 (默认)
mdutil -i on /path/to/volume
擦除聚焦索引并重建
mdutil -E /path/to/volume
通过聚焦搜索
mdfind -name 'searchterm'
显示聚焦索引元数据
mdls /path/to/file
系统完整性保护
禁止系统完整性保护
按住 Cmd + R 重启,打开终端输入以下命令:
csrutil disable && reboot
开启系统完整性保护
按住 Cmd + R 重启,打开终端输入以下命令:
csrutil enable && reboot
时间和日期
列出所有时区
sudo systemsetup -listtimezones
设置时区
sudo systemsetup -settimezone Europe/Berlin
网络时间设置时钟
# 查看状态
sudo systemsetup getusingnetworktime
# 开启 (默认)
sudo systemsetup setusingnetworktime on
# 关闭
sudo systemsetup setusingnetworktime off
终端
终端响铃
开启终端响铃,并在其上显示徽标数。
tput bel
替代终端
Shells
Bash
安装最新版本的 Bash,并且设置为用户的默认的 shell
brew install bash && \
echo $(brew --prefix)/bin/bash | sudo tee -a /etc/shells && \
chsh -s $(brew --prefix)/bin/bash
fish
安装最新版本的 fish,并且设置为用户的默认的 shell
brew install fish && \
echo $(brew --prefix)/bin/fish | sudo tee -a /etc/shells && \
chsh -s $(brew --prefix)/bin/fish
- Homepage - 一个对 OS X 、Linux 用户友好的智能 shell,支持更多系统。
- The Fishshell Framework - 提供核心基础结构,允许您扩展或修改 shell 外观的软件包。
- Installation & Configuration Tutorial - 怎样通过 Fisherman、Powerline Fonts、 iTerm2 和 Budspencer Theme 安装 Fish Shell。
Zsh
安装最新版本的 Zsh,并且设置为用户的默认的 shell
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) |