├── .gitignore ├── .travis.yml ├── README.md ├── functions.md ├── glossary.md ├── launchagents.md └── snippets.md /.gitignore: -------------------------------------------------------------------------------- 1 | # git ls-files --others --exclude-from=.git/info/exclude 2 | # Lines that start with '#' are comments. 3 | # For a project mostly in C, the following would be a good set of 4 | # exclude patterns (uncomment them if you want to use them): 5 | # *.[oa] 6 | # *~ 7 | .DS_Store 8 | .idea 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | 3 | rvm: 4 | - 2.2 5 | 6 | before_script: 7 | - gem install awesome_bot 8 | 9 | script: 10 | - awesome_bot README.md --allow-dupe --allow-redirect --white-list example.com,web.archive.org 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)[![Build Status](https://travis-ci.org/nusr/awesome-macos-command-line-zh.svg?branch=master)](https://travis-ci.org/nusr/awesome-macos-command-line-zh) 2 | 3 | [awesome-macos-command-line](https://github.com/herrbischoff/awesome-macos-command-line) 收集了很多有趣的 Mac 终端命令。 4 | 5 | 看了一遍后,发现帮助很大。 6 | 7 | 见识了许多没有使用过的命令,加深了对 Mac 的认识。 8 | 9 | 所以翻译成中文,分享给其他需要的人查看。 10 | 11 | 翻译不妥的地方,欢迎提 issue 或者 pull request 。 12 | 13 | 喜欢点 **star** ,关注点 **watch**,贡献点 **fork** 。 14 | 15 | 为了获得更好的阅读效果,可以在线预览。[在线预览地址](https://nusr.github.io/post/awesome-macos-command-line-zh/entry/) 16 | 17 | > 精心为 OS X 挑选的 shell 命令和工具。 18 | > 19 | > _“你无需知晓一切。仅仅在你需要的时候,找到它就行了。” (John Brunner)_ 20 | 21 | 中文 | [English](https://github.com/herrbischoff/awesome-macos-command-line) 22 | 23 | - [外形](#%E5%A4%96%E5%BD%A2) 24 | - [透明度](#%E9%80%8F%E6%98%8E%E5%BA%A6) 25 | - [桌面背景](#%E6%A1%8C%E9%9D%A2%E8%83%8C%E6%99%AF) 26 | - [应用](#%E5%BA%94%E7%94%A8) 27 | - [App Store](#app-store) 28 | - [苹果远程桌面](#%E8%8B%B9%E6%9E%9C%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2) 29 | - [通讯录](#%E9%80%9A%E8%AE%AF%E5%BD%95) 30 | - [Google](#google) 31 | - [iTunes](#itunes) 32 | - [邮件](#%E9%82%AE%E4%BB%B6) 33 | - [Safari](#safari) 34 | - [Sketch](#sketch) 35 | - [Skim](#skim) 36 | - [终端](#%E7%BB%88%E7%AB%AF) 37 | - [文本编辑](#%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91) 38 | - [Visual Studio Code](#visual-studio-code) 39 | - [备份](#%E5%A4%87%E4%BB%BD) 40 | - [时间机器](#%E6%97%B6%E9%97%B4%E6%9C%BA%E5%99%A8) 41 | - [开发者](#%E5%BC%80%E5%8F%91%E8%80%85) 42 | - [Vim](#vim) 43 | - [Xcode](#xcode) 44 | - [程序坞](#%E7%A8%8B%E5%BA%8F%E5%9D%9E) 45 | - [文档](#%E6%96%87%E6%A1%A3) 46 | - [文件、磁盘和卷](#%E6%96%87%E4%BB%B6%E7%A3%81%E7%9B%98%E5%92%8C%E5%8D%B7) 47 | - [APFS](#apfs) 48 | - [磁盘映像](#%E7%A3%81%E7%9B%98%E6%98%A0%E5%83%8F) 49 | - [访达](#%E8%AE%BF%E8%BE%BE) 50 | - [桌面](#%E6%A1%8C%E9%9D%A2) 51 | - [文件和文件夹](#%E6%96%87%E4%BB%B6%E5%92%8C%E6%96%87%E4%BB%B6%E5%A4%B9) 52 | - [布局](#%E5%B8%83%E5%B1%80) 53 | - [元数据文件](#%E5%85%83%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6) 54 | - [打开文件](#%E6%89%93%E5%BC%80%E6%96%87%E4%BB%B6) 55 | - [字体](#%E5%AD%97%E4%BD%93) 56 | - [函数](#%E5%87%BD%E6%95%B0) 57 | - [硬件](#%E7%A1%AC%E4%BB%B6) 58 | - [蓝牙](#%E8%93%9D%E7%89%99) 59 | - [硬盘](#%E7%A1%AC%E7%9B%98) 60 | - [硬件信息](#%E7%A1%AC%E4%BB%B6%E4%BF%A1%E6%81%AF) 61 | - [红外传感器](#%E7%BA%A2%E5%A4%96%E4%BC%A0%E6%84%9F%E5%99%A8) 62 | - [电池管理](#%E7%94%B5%E6%B1%A0%E7%AE%A1%E7%90%86) 63 | - [输入设备](#%E8%BE%93%E5%85%A5%E8%AE%BE%E5%A4%87) 64 | - [键盘](#%E9%94%AE%E7%9B%98) 65 | - [启动台](#%E5%90%AF%E5%8A%A8%E5%8F%B0) 66 | - [媒体](#%E5%AA%92%E4%BD%93) 67 | - [音频](#%E9%9F%B3%E9%A2%91) 68 | - [视频](#%E8%A7%86%E9%A2%91) 69 | - [网络](#%E7%BD%91%E7%BB%9C) 70 | - [Bonjour](#bonjour) 71 | - [DHCP](#dhcp) 72 | - [DNS](#dns) 73 | - [域名](#%E5%9F%9F%E5%90%8D) 74 | - [网络设置](#%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AE) 75 | - [网络工具](#%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7) 76 | - [SSH](#ssh) 77 | - [TCP/IP](#tcpip) 78 | - [TFTP](#tftp) 79 | - [Wi-Fi](#wi-fi) 80 | - [包管理器](#%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8) 81 | - [打印](#%E6%89%93%E5%8D%B0) 82 | - [安全](#%E5%AE%89%E5%85%A8) 83 | - [应用防火墙](#%E5%BA%94%E7%94%A8%E9%98%B2%E7%81%AB%E5%A2%99) 84 | - [网关](#%E7%BD%91%E5%85%B3) 85 | - [密码](#%E5%AF%86%E7%A0%81) 86 | - [物理访问](#%E7%89%A9%E7%90%86%E8%AE%BF%E9%97%AE) 87 | - [擦除数据](#%E6%93%A6%E9%99%A4%E6%95%B0%E6%8D%AE) 88 | - [搜索](#%E6%90%9C%E7%B4%A2) 89 | - [查找](#%E6%9F%A5%E6%89%BE) 90 | - [定位](#%E5%AE%9A%E4%BD%8D) 91 | - [系统](#%E7%B3%BB%E7%BB%9F) 92 | - [AirDrop](#airdrop) 93 | - [AppleScript](#applescript) 94 | - [基础](#%E5%9F%BA%E7%A1%80) 95 | - [剪贴板](#%E5%89%AA%E8%B4%B4%E6%9D%BF) 96 | - [文件库](#%E6%96%87%E4%BB%B6%E5%BA%93) 97 | - [信息/报告](#%E4%BF%A1%E6%81%AF%E6%8A%A5%E5%91%8A) 98 | - [安装系统](#%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F) 99 | - [内核扩展](#%E5%86%85%E6%A0%B8%E6%89%A9%E5%B1%95) 100 | - [自启动服务](#%E8%87%AA%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1) 101 | - [自启动服务](#%E8%87%AA%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1-1) 102 | - [登录窗口](#%E7%99%BB%E5%BD%95%E7%AA%97%E5%8F%A3) 103 | - [内存管理](#%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86) 104 | - [通知中心](#%E9%80%9A%E7%9F%A5%E4%B8%AD%E5%BF%83) 105 | - [快速浏览](#%E5%BF%AB%E9%80%9F%E6%B5%8F%E8%A7%88) 106 | - [远程苹果事件](#%E8%BF%9C%E7%A8%8B%E8%8B%B9%E6%9E%9C%E4%BA%8B%E4%BB%B6) 107 | - [Root 用户](#root-%E7%94%A8%E6%88%B7) 108 | - [安全模式启动](#%E5%AE%89%E5%85%A8%E6%A8%A1%E5%BC%8F%E5%90%AF%E5%8A%A8) 109 | - [截图](#%E6%88%AA%E5%9B%BE) 110 | - [软件安装](#%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85) 111 | - [软件更新](#%E8%BD%AF%E4%BB%B6%E6%9B%B4%E6%96%B0) 112 | - [软件版本](#%E8%BD%AF%E4%BB%B6%E7%89%88%E6%9C%AC) 113 | - [聚焦](#%E8%81%9A%E7%84%A6) 114 | - [系统完整性保护](#%E7%B3%BB%E7%BB%9F%E5%AE%8C%E6%95%B4%E6%80%A7%E4%BF%9D%E6%8A%A4) 115 | - [时间和日期](#%E6%97%B6%E9%97%B4%E5%92%8C%E6%97%A5%E6%9C%9F) 116 | - [终端](#%E7%BB%88%E7%AB%AF-1) 117 | - [替代终端](#%E6%9B%BF%E4%BB%A3%E7%BB%88%E7%AB%AF) 118 | - [Shells](#shells) 119 | - [终端字体](#%E7%BB%88%E7%AB%AF%E5%AD%97%E4%BD%93) 120 | - [词汇表](#%E8%AF%8D%E6%B1%87%E8%A1%A8) 121 | - [Mac OS X、OS X 以及 macOS 的版本信息](#mac-os-xos-x-%E4%BB%A5%E5%8F%8A-macos-%E7%9A%84%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF) 122 | 123 | ## 外形 124 | 125 | ### 透明度 126 | 127 | #### 菜单和窗口的透明度设置 128 | 129 | ```bash 130 | # 减小透明度 131 | defaults write com.apple.universalaccess reduceTransparency -bool true 132 | 133 | # 恢复默认透明度 134 | defaults write com.apple.universalaccess reduceTransparency -bool false 135 | ``` 136 | 137 | ### 桌面背景 138 | 139 | #### 设置桌面背景 140 | 141 | ```bash 142 | # Mountain Lion 及之前的版本支持 143 | osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/path/to/picture.jpg"' 144 | 145 | # 从 Mavericks 开始支持 146 | sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/path/to/picture.jpg'" && killall Dock 147 | ``` 148 | 149 | ## 应用 150 | 151 | ### App Store 152 | 153 | #### 列出所有从 App Store 下载的应用 154 | 155 | ```bash 156 | # 通过 find 157 | find /Applications -path '*Contents/_MASReceipt/receipt' -maxdepth 4 -print |\sed 's#.app/Contents/_MASReceipt/receipt#.app#g; s#/Applications/##' 158 | 159 | # 通过 Spotlight 160 | mdfind kMDItemAppStoreHasReceipt=1 161 | ``` 162 | 163 | #### 显示调试菜单 164 | 165 | Yosemite 版本起作用 166 | 167 | ```bash 168 | # 开启 169 | defaults write com.apple.appstore ShowDebugMenu -bool true 170 | 171 | # 关闭 (默认) 172 | defaults write com.apple.appstore ShowDebugMenu -bool false 173 | ``` 174 | 175 | ### 苹果远程桌面 176 | 177 | #### 唤醒手册 178 | 179 | ```bash 180 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -help 181 | ``` 182 | 183 | #### 唤醒和睡眠 ARD Agent 和 Helper 184 | 185 | ```bash 186 | # 激活并且重启 ARD Agent 和 Helper 187 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -restart -agent -console 188 | 189 | # 睡眠并且停止远程管理服务 190 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -stop 191 | ``` 192 | 193 | #### 开启和关闭远程桌面共享 194 | 195 | ```bash 196 | # 给予所有用户完全的接入权限 197 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -allowAccessFor -allUsers -privs -all 198 | 199 | # 关闭 ARD Agent 和删除所有用户的接入权限 200 | sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -configure -access -off 201 | ``` 202 | 203 | #### 删除苹果远程桌面设置 204 | 205 | ```bash 206 | sudo rm -rf /var/db/RemoteManagement ; \ 207 | sudo defaults delete /Library/Preferences/com.apple.RemoteDesktop.plist ; \ 208 | defaults delete ~/Library/Preferences/com.apple.RemoteDesktop.plist ; \ 209 | sudo rm -r /Library/Application\ Support/Apple/Remote\ Desktop/ ; \ 210 | rm -r ~/Library/Application\ Support/Remote\ Desktop/ ; \ 211 | rm -r ~/Library/Containers/com.apple.RemoteDesktop 212 | ``` 213 | 214 | ### 通讯录 215 | 216 | #### 调试模式 217 | 218 | ```bash 219 | # 开启 220 | defaults write com.apple.addressbook ABShowDebugMenu -bool true 221 | 222 | # 关闭 (默认) 223 | defaults write com.apple.addressbook ABShowDebugMenu -bool false 224 | ``` 225 | 226 | ### Google 227 | 228 | #### 卸载 Google 更新 229 | 230 | ```bash 231 | ~/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/ksinstall --nuke 232 | ``` 233 | 234 | ### iTunes 235 | 236 | #### 键盘媒体健 237 | 238 | Yosemite 版本起作用。从 El Capitan 开始引入了系统完整性保护,可防止系统启动代理被卸载。 239 | 240 | ```bash 241 | # 停止响应按键 242 | launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 243 | 244 | # 响应按键 (默认) 245 | launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plist 246 | ``` 247 | 248 | 从 El Capitan 开始,您可以禁用 SIP 或者使用某种黑客手段,这将使任何用户都无法访问 iTunes,从而有效地阻止它自己和它的帮助者启动。 请注意,这将无法安装 iTunes ,并可能与操作系统的更新相冲突。 249 | 250 | ```bash 251 | sudo chmod 0000 /Applications/iTunes.app 252 | ``` 253 | 254 | ### 邮件 255 | 256 | #### 将附件显示为图标 257 | 258 | Mac 10.14.4 测试,纯文本或其他文件会显示为图标,但是图片会直接插入。图片可以右键转换为图标,或者更换邮箱客户端解决。[issue 1](https://github.com/nusr/awesome-macos-command-line-zh/issues/1) 259 | 260 | ```bash 261 | defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes 262 | ``` 263 | 264 | #### 清空邮件索引 265 | 266 | 下面的 AppleScript 代码将关闭邮件,清空 SQLite 索引,然后重新打开 Mail。在一个没有优化的大型电子邮件数据库中,可以显着提高响应速度。 267 | 268 | ```applescript 269 | (* 270 | 加快邮件索引。 271 | 代码来源: http://web.archive.org/web/20071008123746/http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/ 272 | 最初由 pmbuko 改编,Romulo 修改。Brett Terpstra 在 2012 年更新,Mathias Törnblom 在 2013 更新到 V3 支持 El Capitan。Andrei Miclaus 在 2017 年更新到 V4,支持 Sierra。 273 | *) 274 | 275 | tell application "Mail" to quit 276 | set os_version to do shell script "sw_vers -productVersion" 277 | set mail_version to "V2" 278 | considering numeric strings 279 | if "10.10" <= os_version then set mail_version to "V3" 280 | if "10.12" <= os_version then set mail_version to "V4" 281 | if "10.13" <= os_version then set mail_version to "V5" 282 | if "10.14" <= os_version then set mail_version to "V6" 283 | end considering 284 | 285 | set sizeBefore to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}" 286 | do shell script "/usr/bin/sqlite3 ~/Library/Mail/" & mail_version & "/MailData/Envelope\\ Index vacuum" 287 | 288 | set sizeAfter to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}" 289 | 290 | display dialog ("Mail index before: " & sizeBefore & return & "Mail index after: " & sizeAfter & return & return & "Enjoy the new speed!") 291 | 292 | tell application "Mail" to activate 293 | ``` 294 | 295 | ### Safari 296 | 297 | #### 改变默认字体 298 | 299 | ```bash 300 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2StandardFontFamily Georgia 301 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFontSize 16 302 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2FixedFontFamily Menlo 303 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFixedFontSize 14 304 | ``` 305 | 306 | #### 开启开发者菜单以及网络检查 307 | 308 | ```bash 309 | defaults write com.apple.Safari IncludeInternalDebugMenu -bool true && \ 310 | defaults write com.apple.Safari IncludeDevelopMenu -bool true && \ 311 | defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true && \ 312 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true && \ 313 | defaults write -g WebKitDeveloperExtras -bool true 314 | ``` 315 | 316 | #### 获取当前网页数据 317 | 318 | 其他选项: `get source`, `get text`. 319 | 320 | ```bash 321 | osascript -e 'tell application "Safari" to get URL of current tab of front window' 322 | ``` 323 | 324 | #### 使用 Backspace/Delete 返回上一页 325 | 326 | ```bash 327 | # 开启 328 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool YES 329 | 330 | # 关闭 331 | defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool NO 332 | ``` 333 | 334 | ### Sketch 335 | 336 | #### 导出压缩 SVG 337 | 338 | ```bash 339 | defaults write com.bohemiancoding.sketch3 exportCompactSVG -bool yes 340 | ``` 341 | 342 | ### Skim 343 | 344 | #### 关闭自动加载弹窗 345 | 346 | 去掉弹窗并设置默认自动加载 347 | 348 | ```bash 349 | defaults write -app Skim SKAutoReloadFileUpdate -boolean true 350 | ``` 351 | 352 | ### 终端 353 | 354 | #### 焦点跟随鼠标 355 | 356 | ```bash 357 | # 开启 358 | defaults write com.apple.Terminal FocusFollowsMouse -string YES 359 | 360 | # 关闭 361 | defaults write com.apple.Terminal FocusFollowsMouse -string NO 362 | ``` 363 | 364 | ### 文本编辑 365 | 366 | #### 将文本编辑设置为纯文本的默认打开方式 367 | 368 | ```bash 369 | defaults write com.apple.TextEdit RichText -int 0 370 | ``` 371 | 372 | ### Visual Studio Code 373 | 374 | #### 解决 VSCode Vim 按键重复 375 | 376 | ```bash 377 | defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false 378 | ``` 379 | 380 | ## 备份 381 | 382 | ### 时间机器 383 | 384 | #### 改变备份间隔 385 | 386 | 备份间隔改为 30 分钟,单位是秒。 387 | 388 | ```bash 389 | sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 1800 390 | ``` 391 | 392 | #### 本地备份 393 | 394 | 本地备份时,时间机器备份卷不可用。 395 | 396 | ```bash 397 | # 查看状态 398 | defaults read /Library/Preferences/com.apple.TimeMachine MobileBackups 399 | 400 | # 开启 (默认) 401 | sudo tmutil enablelocal 402 | 403 | # 关闭 404 | sudo tmutil disablelocal 405 | ``` 406 | 407 | 从 High Sierra 开始,你无法禁用本地快照。 时间机器始终会创建本地 APFS 快照,并使用该快照作为创建常规备份的数据源,而不是使用活动磁盘作为数据源,就像 HFS 格式化磁盘一样。 408 | 409 | #### 防止时间机器提示将新的硬盘启动器作为本分卷 410 | 411 | ```bash 412 | sudo defaults write /Library/Preferences/com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true 413 | ``` 414 | 415 | #### 显示时间机器的日志 416 | 417 | 这个脚本将输出过去 12 个小时时间机器的备份活动。 418 | 419 | ```bash 420 | #!/bin/sh 421 | 422 | filter='processImagePath contains "backupd" and subsystem beginswith "com.apple.TimeMachine"' 423 | 424 | # show the last 12 hours 425 | start="$(date -j -v-12H +'%Y-%m-%d %H:%M:%S')" 426 | 427 | echo "" 428 | echo "[History (from $start)]" 429 | echo "" 430 | 431 | log show --style syslog --info --start "$start" --predicate "$filter" 432 | 433 | echo "" 434 | echo "[Following]" 435 | echo "" 436 | 437 | log stream --style syslog --info --predicate "$filter" 438 | ``` 439 | 440 | #### 充电时切换备份 441 | 442 | ```bash 443 | # 查看状态 444 | sudo defaults read /Library/Preferences/com.apple.TimeMachine RequiresACPower 445 | 446 | # 开启 (默认) 447 | sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool true 448 | 449 | # 关闭 450 | sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool false 451 | ``` 452 | 453 | #### 验证备份 454 | 455 | 从 OS X 10.11 开始,时间机器记录文件校验和,并且复制到快照。 对于早期版本的 OS X,校验和不会复制到快照。 456 | 457 | ```bash 458 | sudo tmutil verifychecksums /path/to/backup 459 | ``` 460 | 461 | ## 开发者 462 | 463 | ### Vim 464 | 465 | #### 编译 Sane Vim 466 | 467 | 通过 Homebrew 编译出完整 Mac Vim,包括覆盖系统的 Vim。 468 | 469 | ```bash 470 | brew install macvim --HEAD --with-cscope --with-lua --with-override-system-vim --with-luajit --with-python 471 | ``` 472 | 473 | #### Neovim 474 | 475 | 通过 Homebrew 安装现代化的 Vim 替代品。 476 | 477 | ```bash 478 | brew install neovim 479 | ``` 480 | 481 | ### Xcode 482 | 483 | #### 安装没有命令行工具的 Xcode 484 | 485 | ```bash 486 | xcode-select --install 487 | ``` 488 | 489 | #### 删除所有不可用的模拟器 490 | 491 | ```bash 492 | xcrun simctl delete unavailable 493 | ``` 494 | 495 | ## 程序坞 496 | 497 | #### 将最近使用的程序添加到程序坞 498 | 499 | ```bash 500 | defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }' && \ 501 | killall Dock 502 | ``` 503 | 504 | #### 添加间隔符的无名文件夹 505 | 506 | ```bash 507 | defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = {}; "tile-type"="small-spacer-tile"; }' && \ 508 | killall Dock 509 | ``` 510 | 511 | #### 添加空格 512 | 513 | ```bash 514 | defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}' && \ 515 | killall Dock 516 | ``` 517 | 518 | #### 添加小空格 519 | 520 | ```bash 521 | defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="small-spacer-tile";}' && \ 522 | killall Dock 523 | ``` 524 | 525 | #### 根据用户最近的使用自动重排 526 | 527 | ```bash 528 | # 开启 (默认) 529 | defaults write com.apple.dock mru-spaces -bool true && \ 530 | killall Dock 531 | 532 | # 关闭 533 | defaults write com.apple.dock mru-spaces -bool false && \ 534 | killall Dock 535 | ``` 536 | 537 | #### 图标弹跳 538 | 539 | 全局设置当唤醒应用时,是否弹跳图标。 540 | 541 | ```bash 542 | # 开启 (默认) 543 | defaults write com.apple.dock no-bouncing -bool true && \ 544 | killall Dock 545 | 546 | # 关闭 547 | defaults write com.apple.dock no-bouncing -bool false && \ 548 | killall Dock 549 | ``` 550 | 551 | #### 锁住程序坞大小 552 | 553 | ```bash 554 | # 开启 555 | defaults write com.apple.Dock size-immutable -bool yes && \ 556 | killall Dock 557 | 558 | # 关闭 (默认) 559 | defaults write com.apple.Dock size-immutable -bool no && \ 560 | killall Dock 561 | ``` 562 | 563 | #### 重置程序坞 564 | 565 | ```bash 566 | defaults delete com.apple.dock && \ 567 | killall Dock 568 | ``` 569 | 570 | #### 改变程序坞大小 571 | 572 | 完全改变程序坞主体大小。要调整大小,将 **0** 改为整数 573 | 574 | ```bash 575 | defaults write com.apple.dock tilesize -int 0 && \ 576 | killall Dock 577 | ``` 578 | 579 | #### 滚动手势 580 | 581 | 使用触摸板或鼠标滚轮与程序坞进行交互,允许您使用向上滚动手势打开应用。正在运行的程序也可以使用相同的手势调用程序窗口管理。 582 | 583 | ```bash 584 | # 开启 585 | defaults write com.apple.dock scroll-to-open -bool true && \ 586 | killall Dock 587 | 588 | # 关闭 (默认) 589 | defaults write com.apple.dock scroll-to-open -bool false && \ 590 | killall Dock 591 | ``` 592 | 593 | #### 启用自动掩藏 594 | 595 | ```bash 596 | defaults write com.apple.dock autohide -bool true && \ 597 | killall Dock 598 | ``` 599 | 600 | #### 设置自动显示和掩藏的延迟时间 601 | 602 | 浮点数定义了显示和掩藏的延迟时间(单位毫秒)。 603 | 604 | ```bash 605 | defaults write com.apple.dock autohide-time-modifier -float 0.4 && \ 606 | defaults write com.apple.dock autohide-delay -float 0 && \ 607 | killall Dock 608 | ``` 609 | 610 | #### 显示掩藏 APP 的图标 611 | 612 | ```bash 613 | # 开启 614 | defaults write com.apple.dock showhidden -bool true && \ 615 | killall Dock 616 | 617 | # 关闭 (默认) 618 | defaults write com.apple.dock showhidden -bool false && \ 619 | killall Dock 620 | ``` 621 | 622 | #### 仅显示启动的应用程序图标 623 | 624 | ```bash 625 | # 开启 626 | defaults write com.apple.dock static-only -bool true && \ 627 | killall Dock 628 | 629 | # 关闭 (默认) 630 | defaults write com.apple.dock static-only -bool false && \ 631 | killall Dock 632 | ``` 633 | 634 | ## 文档 635 | 636 | #### 将文件转换为 HTML 637 | 638 | 支持的格式有纯文本、富文本(rtf)以及微软的 Word(doc/docx)。 639 | 640 | ```bash 641 | textutil -convert html file.ext 642 | ``` 643 | 644 | ## 文件、磁盘和卷 645 | 646 | #### 创建一个空文件 647 | 648 | 创建一个 10 GB 的空文件。 649 | 650 | ```bash 651 | mkfile 10g /path/to/file 652 | ``` 653 | 654 | #### 禁止突发动作感应 655 | 656 | 当你使用的是 SSD 时,这个设置是无用的。 657 | 658 | ```bash 659 | sudo pmset -a sms 0 660 | ``` 661 | 662 | #### 弹出所有可安装的卷 663 | 664 | 唯一可以向访达发送 AppleScript 命令的方法。 665 | 666 | ```bash 667 | osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)' 668 | ``` 669 | 670 | #### 修复文件权限 671 | 672 | 不依赖图形化磁盘工具修复文件权限。 673 | 674 | ```bash 675 | sudo diskutil repairPermissions / 676 | ``` 677 | 678 | > 从 OS X El Capitan 开始,系统文件权限将自动受到保护。 不再需要使用磁盘工具验证或修复权限。([来源](https://support.apple.com/en-us/HT201560)) 679 | 680 | #### 设置启动卷 681 | 682 | ```bash 683 | # Up to Yosemite 684 | bless --mount "/path/to/mounted/volume" --setBoot 685 | 686 | # From El Capitan 687 | sudo systemsetup -setstartupdisk /System/Library/CoreServices 688 | ``` 689 | 690 | #### 示所有附加的磁盘和分区 691 | 692 | ```bash 693 | diskutil list 694 | ``` 695 | 696 | #### 查看文件系统的使用率 697 | 698 | 连续显示文件使用信息。 699 | 700 | ```bash 701 | sudo fs_usage 702 | ``` 703 | 704 | ### APFS 705 | 706 | 从 High Sierra 开启,没有中央程序,并且使用不一致,因为大多数功能都被卷入到 `tmutil`。 707 | 708 | #### 将卷从 HFS+ 转换为 APFS 709 | 710 | ```bash 711 | /System/Library/Filesystems/apfs.fs/Contents/Resources/hfs_convert /path/to/file/system 712 | ``` 713 | 714 | #### 创建新的 APFS 文件系统 715 | 716 | ```bash 717 | /System/Library/Filesystems/apfs.fs/Contents/Resources/newfs_apfs /path/to/device 718 | ``` 719 | 720 | #### 创建快照 721 | 722 | ```bash 723 | tmutil localsnapshot 724 | ``` 725 | 726 | #### 删除快照 727 | 728 | ```bash 729 | tmutil deletelocalsnapshots com.apple.TimeMachine.2018-01-26-044042 730 | ``` 731 | 732 | #### 列出所有快照 733 | 734 | ```bash 735 | tmutil listlocalsnapshots / 736 | ``` 737 | 738 | #### 挂载快照 739 | 740 | 快照是只读的。 741 | 742 | ```bash 743 | mkdir ~/mnt 744 | /System/Library/Filesystems/apfs.fs/Contents/Resources/mount_apfs -s com.apple.TimeMachine.2018-01-26-044042 / ~/mnt 745 | ``` 746 | 747 | ### 磁盘映像 748 | 749 | #### 从文件内容创建磁盘映像 750 | 751 | 将安装的应用程序转换为二进制包。 752 | 753 | ```bash 754 | hdiutil create -volname "Volume Name" -srcfolder /path/to/folder -ov diskimage.dmg 755 | ``` 756 | 757 | 如果你想加密磁盘映像: 758 | 759 | ```bash 760 | hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg 761 | ``` 762 | 763 | 打包前,你要输入密码。为了直接输入密码不弹窗: 764 | 765 | ```bash 766 | echo -n YourPassword | hdiutil create -encryption -stdinpass -volname "Volume Name" -srcfolder /path/to/folder -ov encrypted.dmg 767 | ``` 768 | 769 | #### 将磁盘映像刻录为 DVD 770 | 771 | 这个命令可以应用在 .iso 、.img 和 .dmg 文件上。 772 | 773 | ```bash 774 | hdiutil burn /path/to/image_file 775 | ``` 776 | 777 | #### 禁止磁盘映像验证 778 | 779 | ```bash 780 | defaults write com.apple.frameworks.diskimages skip-verify -bool true && \ 781 | defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true && \ 782 | defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true 783 | ``` 784 | 785 | #### 制作 OS X 启动卷 786 | 787 | ```bash 788 | bless --folder "/path/to/mounted/volume/System/Library/CoreServices" --bootinfo --bootefi 789 | ``` 790 | 791 | #### 挂载磁盘映像 792 | 793 | ```bash 794 | hdiutil attach /path/to/diskimage.dmg 795 | ``` 796 | 797 | #### 卸载磁盘映像 798 | 799 | ```bash 800 | hdiutil detach /dev/disk2s1 801 | ``` 802 | 803 | #### 将磁盘映像写入到卷中 804 | 805 | 就像磁盘工具的恢复功能。 806 | 807 | ```bash 808 | sudo asr -restore -noverify -source /path/to/diskimage.dmg -target /Volumes/VolumeToRestoreTo 809 | ``` 810 | 811 | ## 访达 812 | 813 | ### 桌面 814 | 815 | #### 显示外部媒体 816 | 817 | 外部的 HDs 、thumb drives 等等。 818 | 819 | ```bash 820 | # 开启 821 | defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true && \ 822 | killall Finder 823 | 824 | # 关闭 (默认) 825 | defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool false && \ 826 | killall Finder 827 | ``` 828 | 829 | #### 显示内部媒体 830 | 831 | 自建的 HDs 或者 SSDs。 832 | 833 | ```bash 834 | # 开启 835 | defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true && \ 836 | killall Finder 837 | 838 | # 关闭 (默认) 839 | defaults write com.apple.finder ShowHardDrivesOnDesktop -bool false && \ 840 | killall Finder 841 | ``` 842 | 843 | #### 显示可移动媒体 844 | 845 | CDs 、DVDs 、iPods 等等。 846 | 847 | ```bash 848 | # 开启 849 | defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true && \ 850 | killall Finder 851 | 852 | # 关闭 (默认) 853 | defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool false && \ 854 | killall Finder 855 | ``` 856 | 857 | #### 显示网络卷 858 | 859 | AFP 、SMB、 NFS、 WebDAV 等等。 860 | 861 | ```bash 862 | # 开启 863 | defaults write com.apple.finder ShowMountedServersOnDesktop -bool true && \ 864 | killall Finder 865 | 866 | # 关闭 (默认) 867 | defaults write com.apple.finder ShowMountedServersOnDesktop -bool false && \ 868 | killall Finder 869 | ``` 870 | 871 | ### 文件和文件夹 872 | 873 | #### 清除所有访问控制列表(ACLs) 874 | 875 | ```bash 876 | sudo chmod -RN /path/to/folder 877 | ``` 878 | 879 | #### 在访达掩藏文件夹 880 | 881 | ```bash 882 | chflags hidden /path/to/folder/ 883 | ``` 884 | 885 | #### 显示所有文件的扩展名 886 | 887 | ```bash 888 | defaults write -g AppleShowAllExtensions -bool true 889 | ``` 890 | 891 | #### 显示掩藏文件 892 | 893 | ```bash 894 | # 显示所有 895 | defaults write com.apple.finder AppleShowAllFiles true 896 | 897 | # 恢复文件的默认显示 898 | defaults write com.apple.finder AppleShowAllFiles false 899 | ``` 900 | 901 | #### 删除保护标签 902 | 903 | ```bash 904 | sudo chflags -R nouchg /path/to/file/or/folder 905 | ``` 906 | 907 | #### 在访达中显示全路径 908 | 909 | ```bash 910 | defaults write com.apple.finder _FXShowPosixPathInTitle -bool true 911 | ``` 912 | 913 | #### 取消隐藏用户文件夹 914 | 915 | ```bash 916 | chflags nohidden ~/Library 917 | ``` 918 | 919 | #### 增加最近访问文件数量 920 | 921 | ```bash 922 | defaults write -g NSNavRecentPlacesLimit -int 10 && \ 923 | killall Finder 924 | ``` 925 | 926 | ### 布局 927 | 928 | #### 显示退出访达按钮 929 | 930 | 显示 退出访达的默认快捷键是 Cmd + Q 。 931 | 932 | ```bash 933 | # 开启 934 | defaults write com.apple.finder QuitMenuItem -bool true && \ 935 | killall Finder 936 | 937 | # 关闭 (默认) 938 | defaults write com.apple.finder QuitMenuItem -bool false && \ 939 | killall Finder 940 | ``` 941 | 942 | #### 平滑滚动 943 | 944 | 对旧 Mac 会弄乱动画很有用。 945 | 946 | ```bash 947 | # 开启 948 | defaults write -g NSScrollAnimationEnabled -bool false 949 | 950 | # 关闭 (默认) 951 | defaults write -g NSScrollAnimationEnabled -bool true 952 | ``` 953 | 954 | #### 橡皮筋滚动 955 | 956 | ```bash 957 | # 禁止 958 | defaults write -g NSScrollViewRubberbanding -bool false 959 | 960 | # 关闭 (默认) 961 | defaults write -g NSScrollViewRubberbanding -bool true 962 | ``` 963 | 964 | #### 展开默认保存面板 965 | 966 | ```bash 967 | defaults write -g NSNavPanelExpandedStateForSaveMode -bool true && \ 968 | defaults write -g NSNavPanelExpandedStateForSaveMode2 -bool true 969 | ``` 970 | 971 | #### 桌面图标可见性 972 | 973 | ```bash 974 | # 掩藏图标 975 | defaults write com.apple.finder CreateDesktop -bool false && \ 976 | killall Finder 977 | 978 | # 显示图标(默认) 979 | defaults write com.apple.finder CreateDesktop -bool true && \ 980 | killall Finder 981 | ``` 982 | 983 | #### 路径栏 984 | 985 | ```bash 986 | # 显示 987 | defaults write com.apple.finder ShowPathbar -bool true 988 | 989 | # 掩藏 (默认) 990 | defaults write com.apple.finder ShowPathbar -bool false 991 | ``` 992 | 993 | #### 滚动条可见性 994 | 995 | 可选的选项: `WhenScrolling` 、`Automatic` 和 `Always`。 996 | 997 | ```bash 998 | defaults write -g AppleShowScrollBars -string "Always" 999 | ``` 1000 | 1001 | #### 状态栏 1002 | 1003 | ```bash 1004 | # 显示 1005 | defaults write com.apple.finder ShowStatusBar -bool true 1006 | 1007 | # 掩藏 (默认) 1008 | defaults write com.apple.finder ShowStatusBar -bool false 1009 | ``` 1010 | 1011 | #### 默认保存到磁盘 1012 | 1013 | 设置默认保存地址是本地磁盘,而不是 iCloud 。 1014 | 1015 | ```bash 1016 | defaults write -g NSDocumentSaveNewDocumentsToCloud -bool false 1017 | ``` 1018 | 1019 | #### 当当前文件夹设置为默认搜索范围 1020 | 1021 | ```bash 1022 | defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" 1023 | ``` 1024 | 1025 | #### 设置访达的默认文件夹 1026 | 1027 | ```bash 1028 | defaults write com.apple.finder NewWindowTarget -string "PfLo" && \ 1029 | defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}" 1030 | ``` 1031 | 1032 | #### 设置侧边栏图标大小 1033 | 1034 | 将大小设置为中等大小。 1035 | 1036 | ```bash 1037 | defaults write -g NSTableViewDefaultSizeMode -int 2 1038 | ``` 1039 | 1040 | ### 元数据文件 1041 | 1042 | #### 禁止在网络卷创建元数据文件 1043 | 1044 | 避免创建 `.DS_Store` 以及 AppleDouble 文件。 1045 | 1046 | ```bash 1047 | defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true 1048 | ``` 1049 | 1050 | #### 禁止在 USB 卷创建元数据文件 1051 | 1052 | 避免创建 `.DS_Store` 以及 AppleDouble 文件。 1053 | 1054 | ```bash 1055 | defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true 1056 | ``` 1057 | 1058 | ### 打开文件 1059 | 1060 | #### 改变访达的工作文件夹 1061 | 1062 | 如果同时打开了多个窗口,选择最上面。 1063 | 1064 | ```bash 1065 | cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')" 1066 | ``` 1067 | 1068 | #### 打开 URL 1069 | 1070 | ```bash 1071 | open https://github.com 1072 | ``` 1073 | 1074 | #### 打开文件 1075 | 1076 | ```bash 1077 | open README.md 1078 | ``` 1079 | 1080 | #### 打开应用程序 1081 | 1082 | 你可以加上 `-a` 打开应用程序。 1083 | 1084 | ```bash 1085 | open -a "Google Chrome" https://github.com 1086 | ``` 1087 | 1088 | #### 打开文件夹 1089 | 1090 | ```bash 1091 | open /path/to/folder/ 1092 | ``` 1093 | 1094 | #### 打开当前文件夹 1095 | 1096 | ```bash 1097 | open . 1098 | ``` 1099 | 1100 | ## 字体 1101 | 1102 | #### 清空当前用户字体缓存 1103 | 1104 | 为了清除所有用户的字体缓存,在命令前加上 `sudo`。 1105 | 1106 | ```bash 1107 | atsutil databases -removeUser && \ 1108 | atsutil server -shutdown && \ 1109 | atsutil server -ping 1110 | ``` 1111 | 1112 | #### 获取 SF Mono 字体 1113 | 1114 | 你需要先下载和安装 Xcode 8 beta,之后所有应用都可以使用。 1115 | 1116 | ```bash 1117 | cp -v /Applications/Xcode-beta.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Fonts/SFMono-* ~/Library/Fonts 1118 | ``` 1119 | 1120 | 对于 Sierra 之前的版本,它们包含 Terminal.app 中。 1121 | 1122 | ```bash 1123 | cp -v /Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SFMono-* ~/Library/Fonts 1124 | ``` 1125 | 1126 | ## 函数 1127 | 1128 | 请看 [这个文件](functions.md). 1129 | 1130 | ## 硬件 1131 | 1132 | ### 蓝牙 1133 | 1134 | ```bash 1135 | # 查看状态 1136 | defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 1137 | 1138 | # 开启 (默认) 1139 | sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1 1140 | 1141 | # 禁止 1142 | sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0 && \ 1143 | sudo killall -HUP blued 1144 | ``` 1145 | 1146 | ### 硬盘 1147 | 1148 | #### 强制启用修剪 1149 | 1150 | 从 Yosemite 开始,可以开启非苹果 SSD 的修剪。 1151 | 1152 | ```bash 1153 | forcetrim 1154 | ``` 1155 | 1156 | ### 硬件信息 1157 | 1158 | #### 列出所有硬件端口 1159 | 1160 | ```bash 1161 | networksetup -listallhardwareports 1162 | ``` 1163 | 1164 | #### 剩余电池百分比 1165 | 1166 | ```bash 1167 | pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f1 -d';' 1168 | ``` 1169 | 1170 | #### 剩余电池时间 1171 | 1172 | ```bash 1173 | pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f3 -d';' 1174 | ``` 1175 | 1176 | #### 显示已连接设备的 UDID 1177 | 1178 | ```bash 1179 | system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' 1180 | ``` 1181 | 1182 | #### 显示当前屏幕分辨率 1183 | 1184 | ```bash 1185 | system_profiler SPDisplaysDataType | grep Resolution 1186 | ``` 1187 | 1188 | #### 显示 CPU 品牌信息 1189 | 1190 | ```bash 1191 | sysctl -n machdep.cpu.brand_string 1192 | ``` 1193 | 1194 | ### 红外传感器 1195 | 1196 | ```bash 1197 | # 查看状态 1198 | defaults read /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled 1199 | 1200 | # 开启 (默认) 1201 | defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 1 1202 | 1203 | # 关闭 1204 | defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 0 1205 | ``` 1206 | 1207 | ### 电池管理 1208 | 1209 | #### 禁止电脑休眠 1210 | 1211 | 一小时内不使用不睡眠。 1212 | 1213 | ```bash 1214 | caffeinate -u -t 3600 1215 | ``` 1216 | 1217 | #### 显示所有电池设置 1218 | 1219 | ```bash 1220 | sudo pmset -g 1221 | ``` 1222 | 1223 | #### 15 分钟无活动后显示器睡眠 1224 | 1225 | ```bash 1226 | sudo pmset displaysleep 15 1227 | ``` 1228 | 1229 | #### 30 分钟无活动后显示器睡眠 1230 | 1231 | ```bash 1232 | sudo pmset sleep 30 1233 | ``` 1234 | 1235 | #### 检查系统睡眠剩余时间 1236 | 1237 | ```bash 1238 | sudo systemsetup -getcomputersleep 1239 | ``` 1240 | 1241 | #### 将系统睡眠剩余时间设置为 60 分钟 1242 | 1243 | ```bash 1244 | sudo systemsetup -setcomputersleep 60 1245 | ``` 1246 | 1247 | #### 完全关闭系统睡眠 1248 | 1249 | ```bash 1250 | sudo systemsetup -setcomputersleep Never 1251 | ``` 1252 | 1253 | #### 系统冻结时自动重启 1254 | 1255 | ```bash 1256 | sudo systemsetup -setrestartfreeze on 1257 | ``` 1258 | 1259 | #### 充电时显示铃声 1260 | 1261 | 当 MagSafe 连接时,播放 IOS 充电声音。 1262 | 1263 | ```bash 1264 | # 开启 1265 | defaults write com.apple.PowerChime ChimeOnAllHardware -bool true && \ 1266 | open /System/Library/CoreServices/PowerChime.app 1267 | 1268 | # 关闭 (默认) 1269 | defaults write com.apple.PowerChime ChimeOnAllHardware -bool false && \ 1270 | killall PowerChime 1271 | ``` 1272 | 1273 | ## 输入设备 1274 | 1275 | ### 键盘 1276 | 1277 | #### 自动纠正 1278 | 1279 | ```bash 1280 | # 禁止 1281 | defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false 1282 | 1283 | # 开启 (默认) 1284 | defaults write -g NSAutomaticSpellingCorrectionEnabled -bool true 1285 | 1286 | # 显示状态 1287 | defaults read -g NSAutomaticSpellingCorrectionEnabled 1288 | ``` 1289 | 1290 | #### 全键盘访问 1291 | 1292 | 对话框启用 Tab 。 1293 | 1294 | ```bash 1295 | # 仅限文本框和列表 (默认) 1296 | defaults write NSGlobalDomain AppleKeyboardUIMode -int 0 1297 | 1298 | # 所有控件 1299 | defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 1300 | ``` 1301 | 1302 | #### 按键重复 1303 | 1304 | 禁止默认的 "press and hold" 行为。 1305 | 1306 | ```bash 1307 | # 开启按键重复 1308 | defaults write -g ApplePressAndHoldEnabled -bool false 1309 | 1310 | # 禁止按键重复 1311 | defaults write -g ApplePressAndHoldEnabled -bool true 1312 | ``` 1313 | 1314 | #### 按键重复频率 1315 | 1316 | 设置非常快的按键频率,根据个人品味调整。 1317 | 1318 | ```bash 1319 | defaults write -g KeyRepeat -int 0.02 1320 | ``` 1321 | 1322 | ## 启动台 1323 | 1324 | #### 重设启动台布局 1325 | 1326 | 你需要重启程序坞,因为启动台与它紧密相连。 1327 | 1328 | ```bash 1329 | # Yosemite 之前的版本 1330 | rm ~/Library/Application\ Support/Dock/*.db && \ 1331 | killall Dock 1332 | 1333 | # El Capitan及以上的版本 1334 | defaults write com.apple.dock ResetLaunchPad -bool true && \ 1335 | killall Dock 1336 | ``` 1337 | 1338 | #### 删除启动台图标 1339 | 1340 | 长按删除图标以及重设启动台布局后,仍然无法删除的图标,使用下面的命令删除。 1341 | 1342 | **Gitter** 是图标名称,大小写敏感。 1343 | 1344 | ```bash 1345 | 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 1346 | ``` 1347 | 1348 | ## 媒体 1349 | 1350 | ### 音频 1351 | 1352 | #### 将音频文件转换为 iPhone 铃声。 1353 | 1354 | ```bash 1355 | afconvert input.mp3 ringtone.m4r -f m4af 1356 | ``` 1357 | 1358 | #### 从文本创建音频书 1359 | 1360 | 使用 **Alex** 声音,将单纯的 UTF-8 文本文件转换为 AAC。 1361 | 1362 | ```bash 1363 | say -v Alex -f file.txt -o "output.m4a" 1364 | ``` 1365 | 1366 | #### 开机禁用声音 1367 | 1368 | ```bash 1369 | sudo nvram SystemAudioVolume=" " 1370 | ``` 1371 | 1372 | #### 静音音频输出 1373 | 1374 | ```bash 1375 | osascript -e 'set volume output muted true' 1376 | ``` 1377 | 1378 | #### 设置音量 1379 | 1380 | ```bash 1381 | osascript -e 'set volume 4' 1382 | ``` 1383 | 1384 | #### 播放音频文件 1385 | 1386 | 你可以播放所有 QuickTime 支持的音频格式。 1387 | 1388 | ```bash 1389 | afplay -q 1 filename.mp3 1390 | ``` 1391 | 1392 | #### 使用系统默认声音讲述文本 1393 | 1394 | ```bash 1395 | say 'All your base are belong to us!' 1396 | ``` 1397 | 1398 | ### 视频 1399 | 1400 | #### QuickTime 自动播放视频 1401 | 1402 | ```bash 1403 | defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1 1404 | ``` 1405 | 1406 | ## 网络 1407 | 1408 | ### Bonjour 1409 | 1410 | #### Bonjour 服务 1411 | 1412 | ```bash 1413 | # 禁止 1414 | sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "-NoMulticastAdvertisements" 1415 | 1416 | # 开启 (默认) 1417 | sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array "/usr/sbin/mDNSResponder" "-launchd" 1418 | ``` 1419 | 1420 | ### DHCP 1421 | 1422 | #### 更新 DHCP 租约 1423 | 1424 | ```bash 1425 | sudo ipconfig set en0 DHCP 1426 | ``` 1427 | 1428 | #### 显示 DHCP 信息 1429 | 1430 | ```bash 1431 | ipconfig getpacket en0 1432 | ``` 1433 | 1434 | ### DNS 1435 | 1436 | #### 清除 DNS 缓存 1437 | 1438 | ```bash 1439 | sudo dscacheutil -flushcache && \ 1440 | sudo killall -HUP mDNSResponder 1441 | ``` 1442 | 1443 | ### 域名 1444 | 1445 | #### 设置电脑域名 1446 | 1447 | ```bash 1448 | sudo scutil --set ComputerName "newhostname" && \ 1449 | sudo scutil --set HostName "newhostname" && \ 1450 | sudo scutil --set LocalHostName "newhostname" && \ 1451 | sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "newhostname" 1452 | ``` 1453 | 1454 | ### 网络设置 1455 | 1456 | #### 网络位置 1457 | 1458 | 在网络设置中切换网络位置。 1459 | 1460 | ```bash 1461 | # 查看状态 1462 | scselect 1463 | 1464 | # 切换网络位置 1465 | scselect LocationNameFromStatus 1466 | ``` 1467 | 1468 | #### 设置静态 IP 地址 1469 | 1470 | ```bash 1471 | networksetup -setmanual "Ethernet" 192.168.2.100 255.255.255.0 192.168.2.1 1472 | ``` 1473 | 1474 | ### 网络工具 1475 | 1476 | #### 查看网络地址是否可以访问 1477 | 1478 | ```bash 1479 | ping -o github.com 1480 | ``` 1481 | 1482 | #### 解决路由问题 1483 | 1484 | ```bash 1485 | traceroute github.com 1486 | ``` 1487 | 1488 | ### SSH 1489 | 1490 | #### 将私钥密码永久添加到 SSH 代理 1491 | 1492 | > 在 macOS Sierra 之前,ssh 会弹出输入密码的对话框,并提供是否将其存储到钥匙串的选项。 这个功能之后被删除。 1493 | > 1494 | > 在 macOS Sierra 中引入了 **UseKeychain** 选项,允许用户指定是否将密码存储在钥匙串中。 默认情况下,这个选项是开启的,这会导致所有密码都存储在钥匙串中。 1495 | > 1496 | > 这不是预期的默认行为,因此在 macOS 10.12.2 更改过来。([来源](https://developer.apple.com/library/archive/technotes/tn2449/_index.html)) 1497 | 1498 | ```bash 1499 | ssh-add -K /path/to/private_key 1500 | ``` 1501 | 1502 | Then add to `~/.ssh/config`: 1503 | 1504 | ```bash 1505 | Host server.example.com 1506 | IdentityFile /path/to/private_key 1507 | UseKeychain yes 1508 | ``` 1509 | 1510 | #### 远程登录 1511 | 1512 | ```bash 1513 | # 开启远程登录 1514 | sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 1515 | 1516 | # 关闭远程登录 1517 | sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist 1518 | ``` 1519 | 1520 | ### TCP/IP 1521 | 1522 | #### 显示使用特定端口的应用程序 1523 | 1524 | 输出所有使用 80 端口的应用程序。 1525 | 1526 | ```bash 1527 | sudo lsof -i :80 1528 | ``` 1529 | 1530 | #### 显示外部 IP 地址 1531 | 1532 | 仅当你的 ISP 没有替换 DNS 请求(一般不会)。 1533 | 1534 | ```bash 1535 | dig +short myip.opendns.com @resolver1.opendns.com 1536 | ``` 1537 | 1538 | 在所有网络中都可使用的替代方法。 1539 | 1540 | ```bash 1541 | curl -s https://api.ipify.org && echo 1542 | ``` 1543 | 1544 | ### TFTP 1545 | 1546 | #### 启动原生的 TFTP Daemon 1547 | 1548 | 文件将从 `/private/tftpboot` 启动。 1549 | 1550 | ```bash 1551 | sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist && \ 1552 | sudo launchctl start com.apple.tftpd 1553 | ``` 1554 | 1555 | ### Wi-Fi 1556 | 1557 | #### 加入 Wi-Fi 网络 1558 | 1559 | ```bash 1560 | networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD 1561 | ``` 1562 | 1563 | #### 扫描可用的接入点 1564 | 1565 | 创建 airport 轻松接入的符号链接。 1566 | 1567 | ```bash 1568 | sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport 1569 | ``` 1570 | 1571 | 运行无线扫描: 1572 | 1573 | ```bash 1574 | airport -s 1575 | ``` 1576 | 1577 | #### 显示当前的 SSID 1578 | 1579 | ```bash 1580 | /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}' 1581 | ``` 1582 | 1583 | #### 显示本地 IP 地址 1584 | 1585 | ```bash 1586 | ipconfig getifaddr en0 1587 | ``` 1588 | 1589 | #### 显示 Wi-Fi 的连接历史 1590 | 1591 | ```bash 1592 | defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep LastConnected -A 7 1593 | ``` 1594 | 1595 | #### 显示 Wi-Fi 网络密码 1596 | 1597 | 如果你希望使用 SSID 查询密码。 1598 | 1599 | ```bash 1600 | security find-generic-password -D "AirPort network password" -a "SSID" -gw 1601 | ``` 1602 | 1603 | #### 开启 Wi-Fi 适配器 1604 | 1605 | ```bash 1606 | networksetup -setairportpower en0 on 1607 | ``` 1608 | 1609 | ## 包管理器 1610 | 1611 | - [Fink](http://www.finkproject.org) - Unix 开源软件的全部 Darwin 世界,有点过时。 1612 | - [Homebrew](https://brew.sh) - OS X 缺少的包管理器,最流行的选择,我使用这个工具。 1613 | - [MacPorts](https://www.macports.org) - 基于 X11 、Aqua 的开源软件,编译、安装和升级软件包命令行工具。 非常干净的工具,原作者使用它。 1614 | 1615 | ## 打印 1616 | 1617 | #### 清除打印队列 1618 | 1619 | ```bash 1620 | cancel -a - 1621 | ``` 1622 | 1623 | #### 默认展开打印面板 1624 | 1625 | ```bash 1626 | defaults write -g PMPrintingExpandedStateForPrint -bool true && \ 1627 | defaults write -g PMPrintingExpandedStateForPrint2 -bool true 1628 | ``` 1629 | 1630 | #### 打印完成后停止打印机 1631 | 1632 | ```bash 1633 | defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true 1634 | ``` 1635 | 1636 | ## 安全 1637 | 1638 | ### 应用防火墙 1639 | 1640 | #### 防火墙服务 1641 | 1642 | ```bash 1643 | # 查看状态 1644 | sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 1645 | 1646 | # 开启 1647 | sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on 1648 | 1649 | # 关闭 (默认) 1650 | sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off 1651 | ``` 1652 | 1653 | #### 将应用添加到防火墙 1654 | 1655 | ```bash 1656 | sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /path/to/file 1657 | ``` 1658 | 1659 | ### 网关 1660 | 1661 | #### 添加网关异常 1662 | 1663 | ```bash 1664 | spctl --add /path/to/Application.app 1665 | ``` 1666 | 1667 | #### 删除网关异常 1668 | 1669 | ```bash 1670 | spctl --remove /path/to/Application.app 1671 | ``` 1672 | 1673 | #### 管理网关 1674 | 1675 | ```bash 1676 | # 查看状态 1677 | spctl --status 1678 | 1679 | # 开启 (默认) 1680 | sudo spctl --master-enable 1681 | 1682 | # 关闭 1683 | sudo spctl --master-disable 1684 | ``` 1685 | 1686 | ### 密码 1687 | 1688 | #### 产生安全的密码并且复制到剪贴板 1689 | 1690 | ```bash 1691 | LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 20 | pbcopy 1692 | ``` 1693 | 1694 | ### 物理访问 1695 | 1696 | #### 启动屏幕保护程序 1697 | 1698 | ```bash 1699 | # Sierra 之前 1700 | open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app 1701 | 1702 | # Sierra 之后 1703 | /System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine 1704 | ``` 1705 | 1706 | #### 锁屏 1707 | 1708 | ```bash 1709 | /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend 1710 | ``` 1711 | 1712 | #### 屏幕锁定 1713 | 1714 | ```bash 1715 | # 查看状态 1716 | defaults read com.apple.screensaver askForPasswordDelay 1717 | 1718 | # 开启 (默认) 1719 | defaults write com.apple.screensaver askForPasswordDelay -int 0 1720 | 1721 | # 禁止 (Integer = 锁屏的延迟秒数) 1722 | defaults write com.apple.screensaver askForPasswordDelay -int 10 1723 | ``` 1724 | 1725 | #### 屏幕保护密码 1726 | 1727 | ```bash 1728 | # 查看状态 1729 | defaults read com.apple.screensaver askForPassword 1730 | 1731 | # 开启 1732 | defaults write com.apple.screensaver askForPassword -int 1 1733 | 1734 | # 关闭 (默认) 1735 | defaults write com.apple.screensaver askForPassword -int 0 1736 | ``` 1737 | 1738 | ### 擦除数据 1739 | 1740 | 注意:在 MacOS 10.9 之后,**srm** 命令已经被删除了。 [Apple 支持页面](https://support.apple.com/en-us/HT201949)解释了原因。 1741 | 1742 | > 使用 SSD 驱动器时,磁盘工具中不提供安全擦除和擦除可用空间功能。 SSD 驱动器不需要这些选项,因为标准擦除使得难以从 SSD 恢复数据。 1743 | 1744 | #### 安全删除文件 1745 | 1746 | ```bash 1747 | srm /path/to/file 1748 | ``` 1749 | 1750 | #### 安全删除文件夹 1751 | 1752 | ```bash 1753 | srm -r /path/to/folder/ 1754 | ``` 1755 | 1756 | #### 安全强制删除文件夹 1757 | 1758 | ```bash 1759 | srm -rf /path/to/complete/destruction 1760 | ``` 1761 | 1762 | ## 搜索 1763 | 1764 | ### 查找 1765 | 1766 | #### 递归删除 .DS_Store 文件 1767 | 1768 | ```bash 1769 | find . -type f -name '*.DS_Store' -ls -delete 1770 | ``` 1771 | 1772 | ### 定位 1773 | 1774 | #### 建立定位数据库 1775 | 1776 | ```bash 1777 | sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist 1778 | ``` 1779 | 1780 | #### 通过定位查询 1781 | 1782 | `-i`修饰符意味着搜索对大小写敏感。 1783 | 1784 | ```bash 1785 | locate -i *.jpg 1786 | ``` 1787 | 1788 | ## 系统 1789 | 1790 | ### AirDrop 1791 | 1792 | ```bash 1793 | # 在 Ethernet 以上版本以及不支持的 Mac 版本,开启 AirDrop 1794 | defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true 1795 | 1796 | # 开启 (默认) 1797 | defaults remove com.apple.NetworkBrowser DisableAirDrop 1798 | 1799 | # 关闭 1800 | defaults write com.apple.NetworkBrowser DisableAirDrop -bool YES 1801 | ``` 1802 | 1803 | ### AppleScript 1804 | 1805 | #### 执行 AppleScript 1806 | 1807 | ```bash 1808 | osascript /path/to/script.scpt 1809 | ``` 1810 | 1811 | ### 基础 1812 | 1813 | #### 比较两个文件夹 1814 | 1815 | ```bash 1816 | diff -qr /path/to/folder1 /path/to/folder2 1817 | ``` 1818 | 1819 | #### 复制较大文件显示进度条 1820 | 1821 | 确定你已经安装了 `pv`,并且使用适当的写入设备或者文件替换了 `/dev/rdisk2`。 1822 | 1823 | ```bash 1824 | FILE=/path/to/file.iso pv -s $(du -h $FILE | awk '/.*/ {print $1}') $FILE | sudo dd of=/dev/rdisk2 bs=1m 1825 | ``` 1826 | 1827 | #### 修复疯狂 Shell 1828 | 1829 | 如果你的 shell 会话疯狂。(比如某些脚本或应用程序将其变成乱码)。 1830 | 1831 | ```bash 1832 | stty sane 1833 | ``` 1834 | 1835 | #### 重启 1836 | 1837 | ```bash 1838 | sudo reboot 1839 | ``` 1840 | 1841 | #### 关机 1842 | 1843 | ```bash 1844 | sudo poweroff 1845 | ``` 1846 | 1847 | #### 显示 OS 版本信息 1848 | 1849 | ```bash 1850 | sw_vers 1851 | ``` 1852 | 1853 | #### 开机时间 1854 | 1855 | 显示上次开机到现在过去的时间。 1856 | 1857 | ```bash 1858 | uptime 1859 | ``` 1860 | 1861 | ### 剪贴板 1862 | 1863 | #### 复制数据到剪贴板 1864 | 1865 | ```bash 1866 | cat whatever.txt | pbcopy 1867 | ``` 1868 | 1869 | #### 将剪贴板数据转换为纯文本 1870 | 1871 | ```bash 1872 | pbpaste | textutil -convert txt -stdin -stdout -encoding 30 | pbcopy 1873 | ``` 1874 | 1875 | #### 将剪贴板内容中的 Tab 转换为空格 1876 | 1877 | ```bash 1878 | pbpaste | expand | pbcopy 1879 | ``` 1880 | 1881 | #### 复制剪贴板的数据 1882 | 1883 | ```bash 1884 | pbpaste > whatever.txt 1885 | ``` 1886 | 1887 | #### 删除剪贴板重复内容以及排序 1888 | 1889 | ```bash 1890 | pbpaste | sort | uniq | pbcopy 1891 | ``` 1892 | 1893 | ### 文件库 1894 | 1895 | #### 重启自动解锁文件库 1896 | 1897 | 如果在当前卷上启用了文件库,则会绕过初始解锁,重新启动系统。 该命令可能无法在所有版本上运行。 1898 | 1899 | ```bash 1900 | sudo fdesetup authrestart 1901 | ``` 1902 | 1903 | #### 文件库服务 1904 | 1905 | ```bash 1906 | # 查看状态 1907 | sudo fdesetup status 1908 | 1909 | # 开启 1910 | sudo fdesetup enable 1911 | 1912 | # 禁止 (默认) 1913 | sudo fdesetup disable 1914 | ``` 1915 | 1916 | ### 信息/报告 1917 | 1918 | #### 产生高级系统和性能报告 1919 | 1920 | ```bash 1921 | sudo sysdiagnose -f ~/Desktop/ 1922 | ``` 1923 | 1924 | ### 安装系统 1925 | 1926 | #### 创建安装启动器 1927 | 1928 | ```bash 1929 | # Mojave 1930 | sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --nointeraction --downloadassets 1931 | 1932 | # High Sierra 1933 | sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ High\ Sierra.app 1934 | 1935 | # Sierra 1936 | sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ Sierra.app 1937 | 1938 | # El Capitan 1939 | sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app 1940 | 1941 | # Yosemite 1942 | sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ Yosemite.app 1943 | ``` 1944 | 1945 | - 删除驱动器之前进行确认,删去 `--nointeraction` 选项。 1946 | - Mojave 中才可以使用 `--downloadassets` 选项。 安装过程中可能会下载资源,比如更新。 1947 | - 从 Mojave 开始,`--applicationpath` 选项以及被废弃。使用该选项会抛出错误。 1948 | 1949 | ### 内核扩展 1950 | 1951 | #### 展示加载的内核扩展 1952 | 1953 | ```bash 1954 | sudo kextstat -l 1955 | ``` 1956 | 1957 | #### 加载内核扩展 1958 | 1959 | ```bash 1960 | sudo kextload -b com.apple.driver.ExampleBundle 1961 | ``` 1962 | 1963 | #### 卸载内核扩展 1964 | 1965 | ```bash 1966 | sudo kextunload -b com.apple.driver.ExampleBundle 1967 | ``` 1968 | 1969 | ### 自启动服务 1970 | 1971 | 请看 [自启动服务](launchagents.md). 1972 | 1973 | ### 自启动服务 1974 | 1975 | #### 重建自启动服务数据库 1976 | 1977 | 为了做到与 OS X 版本无关,这个工具依赖 `locate` 查找 `lsregister`。 如果你还没有建立你的 `locate` 数据库,[请先创建](#创建定位数据库)。 1978 | 1979 | ```bash 1980 | sudo $(locate lsregister) -kill -seed -r 1981 | ``` 1982 | 1983 | ### 登录窗口 1984 | 1985 | #### 设置登录窗口文本 1986 | 1987 | ```bash 1988 | sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "Your text" 1989 | ``` 1990 | 1991 | ### 内存管理 1992 | 1993 | #### 清除内存缓存 1994 | 1995 | ```bash 1996 | sudo purge 1997 | ``` 1998 | 1999 | #### 显示内存统计 2000 | 2001 | ```bash 2002 | # One time 2003 | vm_stat 2004 | 2005 | # Table of data, repeat 10 times total, 1 second wait between each poll 2006 | vm_stat -c 10 1 2007 | ``` 2008 | 2009 | ### 通知中心 2010 | 2011 | #### 通知中心服务 2012 | 2013 | ```bash 2014 | # 关闭 2015 | launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist && \ 2016 | killall -9 NotificationCenter 2017 | 2018 | # 启动 (默认) 2019 | launchctl load -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 2020 | ``` 2021 | 2022 | ### 快速浏览 2023 | 2024 | #### 快速浏览文件 2025 | 2026 | ```bash 2027 | qlmanage -p /path/to/file 2028 | ``` 2029 | 2030 | ### 远程苹果事件 2031 | 2032 | ```bash 2033 | # 查看状态 2034 | sudo systemsetup -getremoteappleevents 2035 | 2036 | # 开启 2037 | sudo systemsetup -setremoteappleevents on 2038 | 2039 | # 禁止 (默认) 2040 | sudo systemsetup -setremoteappleevents off 2041 | ``` 2042 | 2043 | ### Root 用户 2044 | 2045 | ```bash 2046 | # 开启 2047 | dsenableroot 2048 | 2049 | # 禁止 2050 | dsenableroot -d 2051 | ``` 2052 | 2053 | ### 安全模式启动 2054 | 2055 | ```bash 2056 | # 查看状态 2057 | nvram boot-args 2058 | 2059 | # 开启 2060 | sudo nvram boot-args="-x" 2061 | 2062 | # 禁止 2063 | sudo nvram boot-args="" 2064 | ``` 2065 | 2066 | ### 截图 2067 | 2068 | #### 延迟截图 2069 | 2070 | 3 秒后截图为 JPEG 文件,并且在预览中展示。 2071 | 2072 | ```bash 2073 | screencapture -T 3 -t jpg -P delayedpic.jpg 2074 | ``` 2075 | 2076 | #### 保存截图到给定位置 2077 | 2078 | 设置保存地址为桌面。 2079 | 2080 | ```bash 2081 | defaults write com.apple.screencapture location ~/Desktop && \ 2082 | killall SystemUIServer 2083 | ``` 2084 | 2085 | #### 设置截图文件格式 2086 | 2087 | 设置截图文件格式为 `png`,可选的格式有 `bmp`, `gif`, `jpg`, `jpeg`, `pdf`, `tiff` 。 2088 | 2089 | ```bash 2090 | defaults write com.apple.screencapture type -string "png" 2091 | ``` 2092 | 2093 | #### 禁止截图阴影 2094 | 2095 | ```bash 2096 | defaults write com.apple.screencapture disable-shadow -bool true && \ 2097 | killall SystemUIServer 2098 | ``` 2099 | 2100 | #### 设置截图的默认文件名 2101 | 2102 | 截图文件名的时间戳保持不变。 2103 | 2104 | ```bash 2105 | defaults write com.apple.screencapture name "Example name" && \ 2106 | killall SystemUIServer 2107 | ``` 2108 | 2109 | ### 软件安装 2110 | 2111 | #### 安装 PKG 2112 | 2113 | ```bash 2114 | installer -pkg /path/to/installer.pkg -target / 2115 | ``` 2116 | 2117 | ### 软件更新 2118 | 2119 | #### 更新所有可以更新的软件 2120 | 2121 | ```bash 2122 | sudo softwareupdate -ia 2123 | ``` 2124 | 2125 | #### 设置软件更新检查的时间间隔 2126 | 2127 | 将软件更新检查的时间间隔设置为天,而不是默认的周。 2128 | 2129 | ```bash 2130 | defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 2131 | ``` 2132 | 2133 | #### 显示所有可以更新的软件 2134 | 2135 | ```bash 2136 | sudo softwareupdate -l 2137 | ``` 2138 | 2139 | #### 设置软件更新服务器 2140 | 2141 | 这仅适用于测试或非托管的客户端。 要在网络范围内使用,请正确设置 DNS 以及 [Apple SUS 服务](http://krypted.com/mac-security/using-the-software-update-service-on-mountain-lion-server/) 并通过 OpenDirectory 绑定客户端。 或者,使用 [Reposado](https://github.com/wdas/reposado) 正确设置网络 DNS,使分辨率变得透明。 [Margarita](https://github.com/jessepeterson/margarita) 看起来也不错。 2142 | 2143 | ```bash 2144 | # 使用自己 SUS 2145 | sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://su.example.com:8088/index.sucatalog 2146 | 2147 | # 恢复苹果的默认 SUS 2148 | sudo defaults delete /Library/Preferences/com.apple.SoftwareUpdate CatalogURL 2149 | ``` 2150 | 2151 | ### 软件版本 2152 | 2153 | #### 显示系统的版本号 2154 | 2155 | ```bash 2156 | sw_vers -productVersion 2157 | ``` 2158 | 2159 | ### 聚焦 2160 | 2161 | #### 聚焦索引 2162 | 2163 | ```bash 2164 | # 禁止 2165 | mdutil -i off -d /path/to/volume 2166 | 2167 | # 关闭 (默认) 2168 | mdutil -i on /path/to/volume 2169 | ``` 2170 | 2171 | #### 擦除聚焦索引并重建 2172 | 2173 | ```bash 2174 | mdutil -E /path/to/volume 2175 | ``` 2176 | 2177 | #### 通过聚焦搜索 2178 | 2179 | ```bash 2180 | mdfind -name 'searchterm' 2181 | ``` 2182 | 2183 | #### 显示聚焦索引元数据 2184 | 2185 | ```bash 2186 | mdls /path/to/file 2187 | ``` 2188 | 2189 | ### 系统完整性保护 2190 | 2191 | #### 禁止系统完整性保护 2192 | 2193 | 按住 Cmd + R 重启,打开终端输入以下命令: 2194 | 2195 | ```bash 2196 | csrutil disable && reboot 2197 | ``` 2198 | 2199 | #### 开启系统完整性保护 2200 | 2201 | 按住 Cmd + R 重启,打开终端输入以下命令: 2202 | 2203 | ```bash 2204 | csrutil enable && reboot 2205 | ``` 2206 | 2207 | ### 时间和日期 2208 | 2209 | #### 列出所有时区 2210 | 2211 | ```bash 2212 | sudo systemsetup -listtimezones 2213 | ``` 2214 | 2215 | #### 设置时区 2216 | 2217 | ```bash 2218 | sudo systemsetup -settimezone Europe/Berlin 2219 | ``` 2220 | 2221 | #### 网络时间设置时钟 2222 | 2223 | ```bash 2224 | # 查看状态 2225 | sudo systemsetup getusingnetworktime 2226 | 2227 | # 开启 (默认) 2228 | sudo systemsetup setusingnetworktime on 2229 | 2230 | # 关闭 2231 | sudo systemsetup setusingnetworktime off 2232 | ``` 2233 | 2234 | ## 终端 2235 | 2236 | #### 终端响铃 2237 | 2238 | 开启终端响铃,并在其上显示徽标数。 2239 | 2240 | ```bash 2241 | tput bel 2242 | ``` 2243 | 2244 | ### 替代终端 2245 | 2246 | - [iTerm2](https://iterm2.com) - 更好的终端应用 2247 | - [kitty](https://sw.kovidgoyal.net/kitty/) - 现代化以及 GPU 加速的终端应用。 2248 | 2249 | ### Shells 2250 | 2251 | #### Bash 2252 | 2253 | 安装最新版本的 Bash,并且设置为用户的默认的 shell 2254 | 2255 | ```bash 2256 | brew install bash && \ 2257 | echo $(brew --prefix)/bin/bash | sudo tee -a /etc/shells && \ 2258 | chsh -s $(brew --prefix)/bin/bash 2259 | ``` 2260 | 2261 | - [Homepage](https://www.gnu.org/software/bash/) - OS X 以及 Unix 类似系统的默认 shell 。 2262 | - [Bash-it](https://github.com/Bash-it/bash-it) - 社区驱动 Bash 框架,类似 Oh My Zsh 2263 | 2264 | #### fish 2265 | 2266 | 安装最新版本的 fish,并且设置为用户的默认的 shell 2267 | 2268 | ```bash 2269 | brew install fish && \ 2270 | echo $(brew --prefix)/bin/fish | sudo tee -a /etc/shells && \ 2271 | chsh -s $(brew --prefix)/bin/fish 2272 | ``` 2273 | 2274 | - [Homepage](http://fishshell.com) - 一个对 OS X 、Linux 用户友好的智能 shell,支持更多系统。 2275 | - [The Fishshell Framework](https://github.com/oh-my-fish/oh-my-fish) - 提供核心基础结构,允许您扩展或修改 shell 外观的软件包。 2276 | - [Installation & Configuration Tutorial](https://github.com/ellerbrock/fish-shell-setup-osx) - 怎样通过 Fisherman、Powerline Fonts、 iTerm2 和 Budspencer Theme 安装 Fish Shell。 2277 | 2278 | #### Zsh 2279 | 2280 | 安装最新版本的 Zsh,并且设置为用户的默认的 shell 2281 | 2282 | ```bash 2283 | brew install zsh && \ 2284 | sudo sh -c 'echo $(brew --prefix)/bin/zsh >> /etc/shells' && \ 2285 | chsh -s $(brew --prefix)/bin/zsh 2286 | ``` 2287 | 2288 | - [Homepage](http://www.zsh.org) - 尽管 Zsh 是一种强大的脚本语言,它是专为交互式使用而设计的 shell。 2289 | - [Oh My Zsh](http://ohmyz.sh) - 社区驱动开源框架,用于管理 Zsh 配置。 2290 | - [Prezto](https://github.com/sorin-ionescu/prezto) - 一个快速的 Zsh 框架。 使用默认值,别名,函数,自动完成和主题来丰富命令行界面环境。 2291 | - [zgen](https://github.com/tarjoilija/zgen) - 另一个管理 Zsh 配置的开源框架。 Zgen 可以兼容 oh-my-zsh 的插件和主题,并且具有自动克隆任何插件以及更快的优点。 2292 | 2293 | ### 终端字体 2294 | 2295 | - [Anonymous Pro](http://www.marksimonson.com/fonts/view/anonymous-pro) - 四种固定宽度系列字体,适用于编程。 2296 | - [Codeface](https://github.com/chrissimpkins/codeface) - 用于开发人员的图库和等宽字体库。 2297 | - [DejaVu Sans Mono](https://dejavu-fonts.github.io/) - 基于 Vera Fonts 的字体家族。 2298 | - [Hack](http://sourcefoundry.org/hack/) - Hack 手动整理字体,是你编程字体的首选。 2299 | - [Inconsolata](http://levien.com/type/myfonts/inconsolata.html) - 一种等宽字体,专为编程设计。 2300 | - [Input](http://input.fontbureau.com) - 专为编程响应系统的字体设计。 2301 | - [Meslo](https://github.com/andreberg/Meslo-Font) - Apple's Menlo 字体的自制版本. 2302 | - [Operator Mono](https://www.typography.com/fonts/operator/overview/) - 令人惊讶的商业等宽字体。 2303 | - [Powerline Fonts](https://github.com/powerline/fonts) - Powerline 插件的修补字体仓库 2304 | - [Source Code Pro](https://adobe-fonts.github.io/source-code-pro/) - 专为用户交互以及编程的等宽字体家族。 2305 | 2306 | ## 词汇表 2307 | 2308 | ### Mac OS X、OS X 以及 macOS 的版本信息 2309 | 2310 | | 版本 | 名称 | 发布日期 | 最新版本 | 2311 | | -------------------------- | ------------------ | ------------------ | ------------------------------------- | 2312 | | Rhapsody Developer Release | Grail1Z4 / Titan1U | August 31, 1997 | DR2 (May 14, 1998) | 2313 | | Mac OS X Server 1.0 | Hera | March 16, 1999 | 1.2v3 (October 27, 2000) | 2314 | | Mac OS X Developer Preview | n/a | March 16, 1999 | DP4 (April 5, 2000) | 2315 | | Mac OS X Public Beta | Kodiak | September 13, 2000 | n/a | 2316 | | Mac OS X 10.0 | Cheetah | March 24, 2001 | 10.0.4 (June 22, 2001) | 2317 | | Mac OS X 10.1 | Puma | September 25, 2001 | 10.1.5 (June 6, 2002) | 2318 | | Mac OS X 10.2 | Jaguar | August 24, 2002 | 10.2.8 (October 3, 2003) | 2319 | | Mac OS X 10.3 | Panther | October 24, 2003 | 10.3.9 (April 15, 2005) | 2320 | | Mac OS X 10.4 | Tiger | April 29, 2005 | 10.4.11 (November 14, 2007) | 2321 | | Mac OS X 10.5 | Leopard | October 26, 2007 | 10.5.8 (August 5, 2009) | 2322 | | Mac OS X 10.6 | Snow Leopard | August 28, 2009 | 10.6.8 v1.1 (July 25, 2011) | 2323 | | Mac OS X 10.7 | Lion | July 20, 2011 | 10.7.5 (September 19, 2012) | 2324 | | OS X 10.8 | Mountain Lion | July 25, 2012 | 10.8.5 (12F45) (October 3, 2013) | 2325 | | OS X 10.9 | Mavericks | October 22, 2013 | 10.9.5 (13F1112) (September 18, 2014) | 2326 | | OS X 10.10 | Yosemite | October 16, 2014 | 10.10.5 (14F27) (August 13, 2015) | 2327 | | OS X 10.11 | El Capitan | September 30, 2015 | 10.11.6 (15G31) (July 18, 2016) | 2328 | | macOS 10.12 | Sierra | September 20, 2016 | 10.12.6 (16G29) (July 19, 2017) | 2329 | | macOS 10.13 | High Sierra | September 25, 2017 | 10.13.6 (17G65) (July 9, 2018) | 2330 | | macOS 10.14 | Mojave | September 24, 2018 | 10.14 (18A391) (September 24, 2018) | 2331 | -------------------------------------------------------------------------------- /functions.md: -------------------------------------------------------------------------------- 1 | 2 | # 函数 3 | 4 | > OS X 特定 Bash 风格的好用函数集合。[Awesome OS X Command Line](https://github.com/nusr/awesome-macos-command-line-zh) 的一部分。 5 | 6 | - [函数](#%E5%87%BD%E6%95%B0) 7 | - [开发者](#%E5%BC%80%E5%8F%91%E8%80%85) 8 | - [应用图标](#%E5%BA%94%E7%94%A8%E5%9B%BE%E6%A0%87) 9 | - [助手功能](#%E5%8A%A9%E6%89%8B%E5%8A%9F%E8%83%BD) 10 | - [访达](#%E8%AE%BF%E8%BE%BE) 11 | - [获取最前面的访达窗口的路径](#%E8%8E%B7%E5%8F%96%E6%9C%80%E5%89%8D%E9%9D%A2%E7%9A%84%E8%AE%BF%E8%BE%BE%E7%AA%97%E5%8F%A3%E7%9A%84%E8%B7%AF%E5%BE%84) 12 | - [打印访达中选中的文件](#%E6%89%93%E5%8D%B0%E8%AE%BF%E8%BE%BE%E4%B8%AD%E9%80%89%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6) 13 | - [将当前访达文件目录设置为分栏视图](#%E5%B0%86%E5%BD%93%E5%89%8D%E8%AE%BF%E8%BE%BE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%88%86%E6%A0%8F%E8%A7%86%E5%9B%BE) 14 | - [将当前访达文件目录设置为图标视图](#%E5%B0%86%E5%BD%93%E5%89%8D%E8%AE%BF%E8%BE%BE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%9B%BE%E6%A0%87%E8%A7%86%E5%9B%BE) 15 | - [将当前访达文件目录设置为列表视图](#%E5%B0%86%E5%BD%93%E5%89%8D%E8%AE%BF%E8%BE%BE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%88%97%E8%A1%A8%E8%A7%86%E5%9B%BE) 16 | 17 | ## 开发者 18 | 19 | ### 应用图标 20 | 21 | #### 创建应用图标 22 | 23 | 由 1024 x 1024 图片快速创建应用图标的函数。 24 | 25 | ```bash 26 | function mkicns() { 27 | if [[ -z "$@" ]]; then 28 | echo "Input file missing" 29 | else 30 | filename=${1%.*} 31 | mkdir $filename.iconset 32 | sips -z 16 16 $1 --out $filename.iconset/icon_16x16.png 33 | sips -z 32 32 $1 --out $filename.iconset/icon_16x16@2x.png 34 | sips -z 32 32 $1 --out $filename.iconset/icon_32x32.png 35 | sips -z 64 64 $1 --out $filename.iconset/icon_32x32@2x.png 36 | sips -z 128 128 $1 --out $filename.iconset/icon_128x128.png 37 | sips -z 256 256 $1 --out $filename.iconset/icon_128x128@2x.png 38 | sips -z 256 256 $1 --out $filename.iconset/icon_256x256.png 39 | sips -z 512 512 $1 --out $filename.iconset/icon_256x256@2x.png 40 | sips -z 512 512 $1 --out $filename.iconset/icon_512x512.png 41 | cp $1 $filename.iconset/icon_512x512@2x.png 42 | iconutil -c icns $filename.iconset 43 | rm -r $filename.iconset 44 | fi 45 | } 46 | ``` 47 | 48 | ### 助手功能 49 | 50 | #### 向用户询问密码 51 | 52 | 使用 AppleScript 创建密码输入框,对用户更友好。 53 | 54 | ```bash 55 | function gui_password { 56 | if [[ -z $1 ]]; then 57 | gui_prompt="Password:" 58 | else 59 | gui_prompt="$1" 60 | fi 61 | PW=$(osascript <