Mac Tips

Table of Contents

1. Mac 内置工具

1.1. sips(图片处理工具)

sips (scriptable image processing system) 是 Mac 下内置的图片处理工具。

如,指定 -g key 可查看图片的相关属性:

$ sips -g dpiWidth file.png
/Users/cig01/file.png
  dpiWidth: 200.000

如,指定 -g all 可查看图片的所有属性:

$ sips -g all file.png
/Users/cig01/file.png
  pixelWidth: 2750
  pixelHeight: 1638
  typeIdentifier: public.png
  format: png
  formatOptions: default
  dpiWidth: 200.000
  dpiHeight: 200.000
  samplesPerPixel: 4
  bitsPerSample: 8
  hasAlpha: yes
  space: RGB
  software: matplotlib version3.1.3, http://matplotlib.org/

如,图片格式的相互转换:

$ sips -s format png test.jpg --out test.png    # test.jpg  ->  test.png
$ sips -s format jpeg test.png --out test.jpg   # test.png  ->  test.jpg
$ sips -s format pdf test.gif --out test.pdf    # test.gif  ->  test.pdf
$ sips -s format jpeg test.gif --out test.jpg   # test.gif  ->  test.jpg

1.2. pkgutil

Mac 中,使用工具 pkgutil 可以查询以 pkg 方式安装的包。

1.2.1. 查询系统中安装的所有 pkg

使用 pkgutil --pkgs 可以查询系统中安装的所有 pkg,输出它们的 package-id 。如:

$ pkgutil --pkgs # list all installed packages
......
org.tukaani.xz
PDFReaderX
com.apple.pkg.GarageBand_AppStore
com.apple.pkg.iMovie_AppStore
......

1.2.2. 查询某个 pkg 安装了哪些文件

使用 pkgutil --files package-id 可以查询 package-id 对应的包安装了哪些文件到系统中。如:

$ pkgutil --files org.tukaani.xz
bin
bin/lzcat
bin/lzcmp
bin/lzdiff
bin/lzegrep
bin/lzfgrep
bin/lzgrep
bin/lzless
bin/lzma
bin/lzmadec
bin/lzmainfo
bin/lzmore
bin/unlzma
bin/unxz
bin/xz
......

1.2.3. 删除 pkg 安装的文件

如何删除安装的 pkg 包(下面以包 org.tukaani.xz 为例进行说明)?查询到 pkg 安装了哪些文件到系统后,手动删除它们即可。

$ cd /usr/local/                   # 假设包的安装根目录/usr/local/,有些包的安装根目录可能为/
$ pkgutil --only-files --files org.tukaani.xz | tr '\n' '\0' | xargs -n 1 -0 sudo rm -f           # 删除包org.tukaani.xz安装的文件
$ pkgutil --only-dirs --files org.tukaani.xz | tail -r | tr '\n' '\0' | xargs -n 1 -0 sudo rmdir  # 删除包org.tukaani.xz安装的目录(rmdir只会删除空目录,不用担心会删除整个bin/等目录)

一旦你删除了 pkg 包,你可以用命令 pkgutil --forget 把它的相关记录信息也删除。如:

$ sudo pkgutil --forget org.tukaani.xz       # 需要sudo权限

这样,再通过 pkgutil --pkgs 命令就查询不到它的信息了。

参考:
https://superuser.com/questions/36567/how-do-i-uninstall-any-apple-pkg-package-file

1.2.4. 使用 pkgutil 解压 pkg 文件

如果你想查看 pkg 安装文件中的某个文件,但你又不想安装它,你可以使用 pkgutil 命令完成。下面的命令会将 filename.pkg 文件解压至桌面:

$ pkgutil --expand filename.pkg ~/Desktop/

1.3. sw_vers(查看操作系统版本)

内置工具 sw_vers 可以打印出 Mac 操作系统的版本信息。如:

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12
BuildVersion:	16A323

1.4. VNC Client

Mac 自带了 VNC Client。打开 Finder,点击 Go,然后点击 Connect to Server,输入 vnc://ip:port 即可。

2. Mac 第三方实用工具

2.1. brew

brew 是 Mac 的第三方包管理工具。

brew 常用命令:

$ brew search ripgrep             # 搜索名字中包含 ripgrep的软件包
$ brew info ripgrep               # 查看 ripgrep 相关信息
$ brew install ripgrep            # 安装 ripgrep
$ brew uninstall ripgrep          # 卸载 ripgrep
$ brew list                       # 查看所有安装软件
$ brew leaves                     # 查看已经安装的,但没有被其它软件包所依赖的软件包
$ brew deps --tree --installed    # 查看依赖,以树型结构展示
$ brew cleanup                    # 删除旧版本的软件

brew 管理服务的相关命令:

$ brew services start redis    # 启动 redis 服务
==> Successfully started `redis` (label: homebrew.mxcl.redis)
$ brew services stop redis     # 停止 redis 服务
Stopping `redis`... (might take a while)
==> Successfully stopped `redis` (label: homebrew.mxcl.redis)
$ brew services list           # 列出所有服务
Name  Status  User Plist
etcd  stopped
mysql stopped
redis stopped

2.2. Sequel Ace(MySQL GUI Client)

Sequel Ace 是 Mac 系统下的一个 MySQL 开源图形客户端。安装方式:

$ brew install --cask sequel-ace

2.3. sshfs

sshfs 的原理是可以通过 SFTP 机制挂载远程文件系统。

Mac 中安装 sshfs 的步骤:

$ brew install --cask osxfuse   # 安装完 osxfuse 后,需要重启电脑
$ sudo reboot
$ brew install sshfs

挂载文件系统:

$ sshfs [user@]host:[dir] yourmountpoint

卸载文件系统:

$ fusermount -u yourmountpoint       # Linux 中卸载 sshfs 文件系统
$ diskutil unmount yourmountpoint    # Mac 中卸载 sshfs 文件系统

3. Mac 快捷键

Mac 中使用键盘快捷键,一般同时按住一个或多个修饰键(Modifier key)。

1 是修饰键及其符号表示。

Table 1: Modifier key and its symbol
Modifier key Symbol
Command
Shift
Option
Control
Caps Lock
Fn  

参考:
Mac keyboard shortcuts: https://support.apple.com/en-us/HT201236

3.1. 剪切、拷贝、粘贴等常用快捷键

Mac 中,剪切、拷贝、粘贴和其他常用快捷键如表 2 所示。

Table 2: 剪切、拷贝、粘贴和其他常用快捷键
快捷键 描述
Command-X 剪切:删除所选项并将其拷贝到剪贴板。
Command-C 将所选项拷贝到剪贴板。这同样适用于 Finder 中的文件。
Command-V 将剪贴板的内容粘贴到当前文稿或 app 中。这同样适用于 Finder 中的文件。
Command-Z 撤销前一个命令。随后您可以按 Command-Shift-Z 来重做,从而反向执行撤销命令。在某些 app 中,您可以撤销和重做多个命令。
Command-A 全选各项。
Command-F 查找:打开“查找”窗口,或在文稿中查找项目。
Command-G 再次查找:查找之前所找到项目出现的下一个位置。要查找出现的上一个位置,请按 Command-Shift-G。
Command-H 隐藏最前面的 app 的窗口。 要查看最前面的 app 但隐藏所有其他 app,请按 Command-Option-H。
Command-M 将最前面的窗口最小化至 Dock。 要最小化最前面的 app 的所有窗口,请按 Command-Option-M。
Command-N 新建:打开一个新文稿或窗口。
Command-O 打开所选项,或打开一个对话框以选择要打开的文件。
Command-P 打印当前文稿。
Command-S 存储当前文稿。
Command-W 关闭最前面的窗口。要关闭该 app 的所有窗口,请按 Command-Option-W。
Command-Q 退出 app。
Option-Command-Esc 强制退出:选择要强制退出的 app。或者,按住 Command-Shift-Option-Esc 3 秒钟来仅强制最前面的 app 退出。
Command-Tab 切换 app:在打开的 app 中切换到下一个最近使用的 app。
Shift-Command-波浪号 (~) 切换窗口:切换到最前端应用中下一个最近使用的窗口。
Command-逗号(,) 偏好设置:打开最前面的 app 的偏好设置。

3.2. 屏幕截图快捷键

Mac 中,屏幕截图快捷键如表 3 所示。

Table 3: Mac 屏幕截图快捷键
功能 快捷键
全屏截图 Shift-Command-3
区域截图:选区 Shift-Command-4
区域截图:窗口 Shift-Command-4 + 空格键
全屏截图(保存到剪贴板) Shift-Command-Control-3
区域截图:选区(保存到剪贴板) Shift-Command-Control-4
区域截图:窗口(保存到剪贴板) Shift-Command-Control-4 + 空格键

说明 1:使用快捷键“Shift-Command-4”对选区进行截图时,当用鼠标选择区域后不释放鼠标,可以接着按某些键实现其它功能,比如:

  • Shift 键 - 重新定义截图区域的纵向高度或横向长度,不能同时实现。
  • Option 键 - 重新定义截图区域的尺寸,可以同时实现纵向和横向的改变,但只能围绕中心区域展开。
  • 空格键 - 按住并拖动鼠标,可以移动截图选框位置。
  • Escape 键 - 退出截图模式。

说明 2:使用快捷键“Shift-Command-4 + 空格键”对窗口进行截图时,默认在窗口边缘有阴影。可以通过命令: defaults write com.apple.screencapture disable-shadow -bool true 来去除边缘的阴影(要使修改马上生效可以执行: killall SystemUIServer )。

参考:OS X是了不起的操作系统:最全的截图方法集锦

3.2.1. Tips: 把截图保存到剪贴板(而不是桌面上)

默认,截图完成后会保存所截图片到桌面上。

方法一:用快捷键:Shift-Command-Control-4(或 Shift-Command-Control-3)
方法二:先按快捷键 Shift-Command-4,在选好区域释放鼠标之前按住 Control 键。

3.2.2. Tips: 修改保存格式为 jpg

默认,截图会保存为 png 格式(相对比 jpg 格式文件更大)。在终端中执行命令 defaults write com.apple.screencapture type jpg 可修改保存图片为 jpg 格式(要使修改马上生效可以执行: killall SystemUIServer )。

3.3. 放大缩小字体快捷键

Mac 中,屏幕截图快捷键如表 4 所示。

Table 4: 放大缩小字体快捷键
快捷键 描述
⌘ + 放大字体
⌘ - 缩小字体

4. Tips

4.1. 删除启动项

通过“System Preferences → Users & Groups → Login Items”可管理用户的启动项。

除此外,在下面几个目录中也有启动项配置,把不需要的删除即可:

${HOME}/Library/LaunchAgents/

/Library/StartupItems/
/Library/LaunchDaemons/
/Library/LaunchAgents/

/System/Library/LaunchDaemons/
/System/Library/LaunchAgents/

4.2. 查看 CPU 型号(sysctl)

使用 sysctl -a | grep machdep.cpu 可以查看 CPU 相关信息:

$ sysctl -a | grep machdep.cpu
......
machdep.cpu.vendor: GenuineIntel
machdep.cpu.brand_string: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
machdep.cpu.family: 6
machdep.cpu.model: 70
......
machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C
machdep.cpu.leaf7_features: RDWRFSGS TSC_THREAD_OFFSET BMI1 AVX2 SMEP BMI2 ERMS INVPCID FPU_CSDS MDCLEAR IBRS STIBP L1DF SSBD
machdep.cpu.extfeatures: SYSCALL XD 1GBPAGE EM64T LAHF LZCNT RDTSCP TSCI
machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
machdep.cpu.microcode_version: 28
machdep.cpu.processor_flag: 5
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8

使用 sysctl -n machdep.cpu.brand_string 可以直接得到 CPU 的具体型号:

$ sysctl -n machdep.cpu.brand_string
Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz

4.3. 挂载 iso 文件(hdiutil)

默认,Mac 无法自动挂载 Linux 下的 iso 文件。

第一步:Use hdiutil attach a disk image as a device:

$ hdiutil attach -nobrowse -nomount file1.iso         # attach,但不挂载它
/dev/disk3

上面命令会输出新创建的设备名称(如/dev/disk3)。

第二步,mount 设备,如:

$ mkdir /tmp/arch-mount
$ mount -t cd9660 /dev/disk3 /tmp/arch-mount

第三步,使用结束后,可 detach 它:

$ hdiutil detach /dev/disk3

参考:
https://discussions.apple.com/thread/7290705?answerId=30019723022#30019723022

4.4. Disable special charater

新建文件“~/Library/KeyBindings/DefaultKeyBinding.dict”,写入下面内容:

/* ~/Library/KeyBindings/DefaultKeyBinding.dict */

{
    /* Additional Emacs bindings */
    "~f" = "moveWordForward:";
    "~b" = "moveWordBackward:";
    "~<" = "moveToBeginningOfDocument:";
    "~>" = "moveToEndOfDocument:";
    "~v" = "pageUp:";
    "~d" = "deleteWordForward:";
    "~^h" = "deleteWordBackward:";
    "~\010" = "deleteWordBackward:";  /* Option-backspace */
    "~\177" = "deleteWordBackward:";  /* Option-delete */

    /* Escape should really be complete: */
    "\033" = "complete:";  /* Escape */
}

参考:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/EventOverview/TextDefaultsBindings/TextDefaultsBindings.html

Author: cig01

Created: <2017-07-30 Sun>

Last updated: <2021-11-07 Sun>

Creator: Emacs 27.1 (Org mode 9.4)