├── .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 | [](https://github.com/sindresorhus/awesome)[](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 < 各种有用的自启动服务例子。 [Awesome OS X Command Line](https://github.com/nusr/awesome-macos-command-line-zh) 的一部分
4 |
5 | - [自启动服务](#%E8%87%AA%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1)
6 | - [基本例子](#%E5%9F%BA%E6%9C%AC%E4%BE%8B%E5%AD%90)
7 | - [定时工作模板](#%E5%AE%9A%E6%97%B6%E5%B7%A5%E4%BD%9C%E6%A8%A1%E6%9D%BF)
8 | - [按照日历定期工作模板](#%E6%8C%89%E7%85%A7%E6%97%A5%E5%8E%86%E5%AE%9A%E6%9C%9F%E5%B7%A5%E4%BD%9C%E6%A8%A1%E6%9D%BF)
9 | - [监控文件夹模板](#%E7%9B%91%E6%8E%A7%E6%96%87%E4%BB%B6%E5%A4%B9%E6%A8%A1%E6%9D%BF)
10 | - [Homebrew](#homebrew)
11 | - [定时更新 Homebrew](#%E5%AE%9A%E6%97%B6%E6%9B%B4%E6%96%B0-homebrew)
12 | - [License](#license)
13 |
14 | ## 基本例子
15 |
16 | ### 定时工作模板
17 |
18 | 每5分钟运行一次。
19 |
20 | ```xml
21 |
22 |
23 |
24 |
25 | Label
26 | com.example.touchsomefile
27 | ProgramArguments
28 |
29 | touch
30 | /tmp/helloworld
31 |
32 | StartInterval
33 | 300
34 |
35 |
36 | ```
37 |
38 | ### 按照日历定期工作模板
39 |
40 | ```xml
41 |
42 |
43 |
44 |
45 | Label
46 | com.example.touchsomefile
47 | ProgramArguments
48 |
49 | touch
50 | /tmp/helloworld
51 |
52 | StartCalendarInterval
53 |
54 | Minute
55 | 45
56 | Hour
57 | 13
58 | Day
59 | 7
60 |
61 |
62 |
63 | ```
64 |
65 | ### 监控文件夹模板
66 |
67 | ```xml
68 |
69 |
70 |
71 |
72 | Label
73 | com.example.watchhostconfig
74 | ProgramArguments
75 |
76 | syslog
77 | -s
78 | -l
79 | notice
80 | somebody touched /etc/hostconfig
81 |
82 | WatchPaths
83 |
84 | /etc/hostconfig
85 |
86 |
87 |
88 | ```
89 |
90 | ## Homebrew
91 |
92 | ### 定时更新 Homebrew
93 |
94 | 为了使用通知系统,这个功能需要先安装[terminal-notifier](https://github.com/julienXX/terminal-notifier)。可以通过 `brew install terminal-notifier` 安装 terminal-notifier。
95 | ```xml
96 |
97 |
98 |
99 |
100 | Label
101 | com.example.homebrew-upgrade
102 | ProcessType
103 | Background
104 | ProgramArguments
105 |
106 | /bin/sh
107 | -c
108 | /usr/local/bin/brew update && /usr/local/bin/brew upgrade && /usr/local/bin/terminal-notifier -title 'Homebrew Upgrader' -message 'Homebrew upgraded!' -appIcon http://cdn.curvve.com/wp-content/uploads/2013/09/homebrew_osx_logo.png
109 |
110 | RunAtLoad
111 |
112 | StandardErrorPath
113 | /tmp/com.example.homebrew-upgrade.stderr
114 | StandardOutPath
115 | /tmp/com.example.homebrew-upgrade.stdout
116 | StartCalendarInterval
117 |
118 |
119 | Hour
120 | 8
121 |
122 |
123 |
124 |
125 | ```
126 |
127 | ## License
128 |
129 | 
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
130 |
--------------------------------------------------------------------------------
/snippets.md:
--------------------------------------------------------------------------------
1 | # 片段
2 |
3 | > 各种有用的 Bash 风格命令,可随时复制、粘贴。
4 | > [Awesome OS X Command Line](https://github.com/nusr/awesome-macos-command-line-zh) 的一部分。
5 |
6 | - [片段](#%E7%89%87%E6%AE%B5)
7 | - [文本操作](#%E6%96%87%E6%9C%AC%E6%93%8D%E4%BD%9C)
8 | - [从文本中提取唯一单词](#%E4%BB%8E%E6%96%87%E6%9C%AC%E4%B8%AD%E6%8F%90%E5%8F%96%E5%94%AF%E4%B8%80%E5%8D%95%E8%AF%8D)
9 |
10 | ## 文本操作
11 |
12 | ### 从文本中提取唯一单词
13 |
14 | ```bash
15 | grep -o -E '\w+' | sort -u -f
16 | ```
17 |
--------------------------------------------------------------------------------