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. xcodes(命令行安装 Xcode)
xcodes 是一个命令行工具,可以安装管理不同的 Xcode 版本。下面是它的使用例子:
$ brew install xcodesorg/made/xcodes # Install command line tool `xcodes` $ xcodes uninstall 15.2 # Remove Xcode 15.2 $ xcodes install 15.3 # Install Xcode 15.3
2.3. Sequel Ace(MySQL GUI Client)
Sequel Ace 是 Mac 系统下的一个 MySQL 开源图形客户端。安装方式:
$ brew install --cask sequel-ace
2.4. 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 是修饰键及其符号表示。
Modifier key | Symbol |
---|---|
Command | ⌘ |
Shift | ⇧ |
Option | ⌥ |
Control | ⌃ |
Caps Lock | ⇪ |
Fn |
参考:
Mac keyboard shortcuts: https://support.apple.com/en-us/HT201236
3.1. 剪切、拷贝、粘贴等常用快捷键
Mac 中,剪切、拷贝、粘贴和其他常用快捷键如表 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 所示。
功能 | 快捷键 |
---|---|
全屏截图 | 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
)。
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 所示。
快捷键 | 描述 |
---|---|
⌘ + | 放大字体 |
⌘ - | 缩小字体 |
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 */ }