Mac相关
记录Mac实用命令及相关内容。
提效工具
Alfred
Snipaste
The Unarchiver
md2card
将 Markdown 文档转换为精美的知识卡片,支持多种风格(小红薯用户推荐)
https://md2card.com/zh
Json序列化网站
https://spidertools.cn/#/
https://www.json.cn/
Sublime Text
cheatsheets
快速查看应用绑定的快捷键
https://cheatsheet-mac.en.softonic.com/mac?ex=RAMP-3406.5&rex=true
好用的插件
thefuck
敲错命令、记不得命令,fuck一下自动纠正
https://github.com/nvbn/thefuck
沉浸式翻译
浏览器翻译插件(非常推荐)
https://immersivetranslate.com/zh-Hans/download/?utm_source=extension&utm_medium=extension&utm_campaign=options_nav
CC Switch
CC Switch 是一款跨平台桌面应用,专为使用 AI 编程工具的开发者设计。它可以统一管理 Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 等 AI 编程工具的配置。
安装:
# 添加第三方源
brew tap farion1231/ccswitch
# 安装
brew install --cask cc-switch
# 升级
brew upgrade --cask cc-switch
工作中用到的命令
打开application.log文件并查找是否包含ERROR字段
cat /path/to/application.log | grep "ERROR" # 可能会将整个文件加载到内存
grep "ERROR" /path/to/application.log # 更省内存
grep -i "error" application.log # 忽略大小写(匹配 `error`, `Error`, `ERROR` 等)
grep -n "ERROR" application.log # 显示行号(方便定位)
grep -c "ERROR" application.log # 统计包含 `ERROR` 的行数
grep -v "ERROR" application.log # 反向查找(显示不包含 `ERROR` 的行)
快捷键
从光标开始向左选中字符
Shift + ←: 向左选中一个字符
- 每按一次,向左多选中一个字符
- 持续按住可以逐字扩大选区
Command + ←: 将光标移动到行首
- 光标直接跳到当前行的最左边
- 不选中任何内容,只是移动光标位置
- 类似于
Home 键的效果
Command + Shift + ←: 从当前光标位置,向左选中至行首
- 光标在哪,就从哪开始,选中到这一行的最开头
- 选中的内容会高亮显示
对比:
| 快捷键 |
移动范围 |
是否选中 |
Shift + ← |
左移一个字符 |
✅ |
Command + ← |
跳到行首 |
❌ |
Command + Shift + ← |
跳到行首 |
✅ |
选中多处同时编辑快捷键
JetBrains IDE:
- 先选中这个词(可用
Shift + ← )
- 按
Control + Command + G
- 所有相同的词同时被选中
- 直接输入新的词,全部同时替换 ✅
VSCode:
- 先选中这个词(可用
Shift + ← )
Command + D: 逐个向下选中下一个相同的词
Command + Shift + L: 一次性选中所有相同的词
- 然后直接输入,所有位置同时替换
程序坞放大快速切换应用
command + tab唤起,然后长按command,使用鼠标切换应用,快速跳转已经打开的应用。
Mac 终端命令与快捷键大全
本文档按分类整理了 macOS 常用终端命令和系统快捷键,便于快速查找。
一、文件与目录操作
1.1 目录浏览与切换
| 命令 |
说明 |
示例 |
pwd |
显示当前工作目录的绝对路径 |
pwd → /Users/username |
ls |
列出当前目录下的文件和文件夹 |
ls |
ls -la |
列出所有文件(含隐藏),显示详细信息 |
ls -la ~/Desktop |
ls -lh |
以人类可读格式显示文件大小 |
ls -lh → 显示 4.0K 而非 4096 |
ls -lS |
按文件大小排序(从大到小) |
ls -lS /var/log |
ls -lt |
按修改时间排序(最新在前) |
ls -lt ~/Downloads |
ls -R |
递归列出所有子目录内容 |
ls -R ~/project |
cd <目录> |
切换到指定目录 |
cd /usr/local/bin |
cd ~ |
切换到用户主目录 |
cd ~ |
cd .. |
切换到上一级目录 |
cd .. |
cd - |
切换到上一次所在的目录 |
cd - |
tree |
以树形结构显示目录(需 brew install tree) |
tree -L 2 → 显示 2 层深度 |
tree -I <目录> |
树形显示但忽略指定目录 |
tree -I 'node_modules|.git' |
1.2 文件与目录创建
| 命令 |
说明 |
示例 |
mkdir <目录名> |
创建目录 |
mkdir my_project |
mkdir -p <路径> |
递归创建多级目录 |
mkdir -p src/main/java/com/example |
touch <文件名> |
创建空文件或更新已有文件的时间戳 |
touch index.html |
touch file{1..5}.txt |
批量创建多个文件 |
touch test{1..5}.txt → 创建 test1~test5.txt |
1.3 复制、移动、重命名
| 命令 |
说明 |
示例 |
cp <源> <目标> |
复制文件 |
cp a.txt b.txt |
cp -r <源目录> <目标目录> |
递归复制整个目录 |
cp -r project/ project_backup/ |
cp -i <源> <目标> |
复制前提示是否覆盖 |
cp -i a.txt b.txt |
mv <源> <目标> |
移动文件或重命名 |
mv old.txt new.txt(重命名) |
mv <文件> <目录> |
将文件移动到指定目录 |
mv report.pdf ~/Documents/ |
ditto <源> <目标> |
macOS 专用复制,保留资源分支和权限 |
ditto ~/src ~/backup |
1.4 删除
| 命令 |
说明 |
示例 |
rm <文件> |
删除文件 |
rm temp.txt |
rm -i <文件> |
删除前逐一确认 |
rm -i *.log |
rm -r <目录> |
递归删除目录及其内容 |
rm -r old_project/ |
rm -rf <目录> |
强制递归删除(危险,慎用) |
rm -rf /tmp/cache/ |
rmdir <目录> |
删除空目录 |
rmdir empty_folder |
1.5 文件查看
| 命令 |
说明 |
示例 |
cat <文件> |
显示文件全部内容 |
cat config.yaml |
cat -n <文件> |
显示内容并带行号 |
cat -n script.sh |
head <文件> |
显示文件前 10 行 |
head README.md |
head -n 20 <文件> |
显示文件前 20 行 |
head -n 20 app.log |
tail <文件> |
显示文件最后 10 行 |
tail error.log |
tail -n 50 <文件> |
显示文件最后 50 行 |
tail -n 50 server.log |
tail -f <文件> |
实时追踪文件新增内容(看日志利器) |
tail -f /var/log/system.log |
less <文件> |
分页查看(支持上下翻页,q 退出) |
less largefile.txt |
more <文件> |
分页查看(只能向下翻) |
more data.csv |
wc <文件> |
统计行数、单词数、字节数 |
wc README.md → 50 200 1500 |
wc -l <文件> |
只统计行数 |
wc -l *.java |
diff <文件1> <文件2> |
比较两个文件的差异 |
diff old.conf new.conf |
diff -u <文件1> <文件2> |
以统一格式显示差异(更易读) |
diff -u v1.txt v2.txt |
二、文件查找与搜索
| 命令 |
说明 |
示例 |
find <路径> -name "<名称>" |
按文件名查找 |
find / -name "*.conf" |
find <路径> -iname "<名称>" |
按文件名查找(忽略大小写) |
find . -iname "readme*" |
find <路径> -type f |
只查找文件 |
find ~/Documents -type f -name "*.pdf" |
find <路径> -type d |
只查找目录 |
find . -type d -name "test" |
find <路径> -size +100M |
查找大于 100MB 的文件 |
find / -size +100M |
find <路径> -mtime -7 |
查找 7 天内修改过的文件 |
find ~/project -mtime -7 |
find <路径> -empty |
查找空文件或空目录 |
find . -empty -type f |
find . -name "*.log" -delete |
查找并删除匹配文件 |
find /tmp -name "*.tmp" -delete |
grep "<关键词>" <文件> |
在文件中搜索关键词 |
grep "error" app.log |
grep -r "<关键词>" <目录> |
递归搜索目录中所有文件 |
grep -r "TODO" src/ |
grep -i "<关键词>" <文件> |
忽略大小写搜索 |
grep -i "warning" server.log |
grep -n "<关键词>" <文件> |
显示匹配行的行号 |
grep -n "function" app.js |
grep -c "<关键词>" <文件> |
统计匹配行数 |
grep -c "error" app.log |
grep -v "<关键词>" <文件> |
显示不包含关键词的行 |
grep -v "debug" app.log |
grep -l "<关键词>" <目录>/* |
只列出包含关键词的文件名 |
grep -l "import" src/*.java |
grep -E "<正则>" <文件> |
使用扩展正则表达式搜索 |
grep -E "error|warn" app.log |
mdfind "<关键词>" |
macOS Spotlight 搜索(全盘索引) |
mdfind "年度报告" |
mdfind -name "<文件名>" |
按文件名进行 Spotlight 搜索 |
mdfind -name "config.yaml" |
mdfind -onlyin <目录> "<关键词>" |
限定目录范围搜索 |
mdfind -onlyin ~/Documents "预算" |
locate <文件名> |
快速定位文件(基于数据库) |
locate httpd.conf |
which <命令> |
查找命令的可执行文件路径 |
which python3 → /usr/bin/python3 |
whereis <命令> |
查找命令的二进制、源码、手册路径 |
whereis java |
三、文件权限与属性
| 命令 |
说明 |
示例 |
chmod 755 <文件> |
所有者读写执行,其他人读执行 |
chmod 755 deploy.sh |
chmod +x <文件> |
给文件添加可执行权限 |
chmod +x start.sh |
chmod -R 644 <目录> |
递归设置目录下所有文件权限 |
chmod -R 644 public/ |
chown <用户>:<组> <文件> |
修改文件的所有者和所属组 |
sudo chown root:admin config.plist |
chown -R <用户> <目录> |
递归修改目录所有者 |
sudo chown -R $(whoami) /usr/local |
chflags hidden <文件> |
在 Finder 中隐藏文件(macOS 专用) |
chflags hidden ~/secret |
chflags nohidden <文件> |
取消隐藏 |
chflags nohidden ~/secret |
xattr -l <文件> |
查看文件的扩展属性 |
xattr -l downloaded.zip |
xattr -d com.apple.quarantine <文件> |
移除"来自互联网"的隔离标记 |
xattr -d com.apple.quarantine app.dmg |
xattr -cr <应用> |
递归清除应用的所有扩展属性 |
xattr -cr /Applications/MyApp.app |
权限数字速查
| 数字 |
权限 |
含义 |
7 |
rwx |
读 + 写 + 执行 |
6 |
rw- |
读 + 写 |
5 |
r-x |
读 + 执行 |
4 |
r-- |
只读 |
0 |
--- |
无权限 |
四、系统信息与监控
4.1 系统信息
| 命令 |
说明 |
示例 |
uname -a |
显示完整系统信息 |
uname -a |
uname -m |
显示 CPU 架构 |
uname -m → arm64(Apple Silicon) |
sw_vers |
显示 macOS 版本信息 |
sw_vers → ProductVersion: 14.x |
system_profiler SPHardwareDataType |
显示硬件详细信息 |
查看 CPU、内存、序列号等 |
system_profiler SPSoftwareDataType |
显示软件详细信息 |
查看系统版本、内核版本等 |
sysctl -n machdep.cpu.brand_string |
显示 CPU 型号 |
sysctl -n machdep.cpu.brand_string |
sysctl hw.memsize |
显示物理内存大小(字节) |
sysctl hw.memsize |
hostname |
显示主机名 |
hostname → MacBook-Pro.local |
whoami |
显示当前登录用户名 |
whoami → chenwenpeng |
id |
显示当前用户的 UID、GID 和所属组 |
id |
uptime |
显示系统运行时间和负载 |
uptime → up 3 days, 2:15 |
date |
显示当前日期和时间 |
date |
cal |
显示当前月份日历 |
cal |
cal 2026 |
显示整年日历 |
cal 2026 |
4.2 进程管理
| 命令 |
说明 |
示例 |
ps aux |
显示所有正在运行的进程 |
ps aux |
ps aux | grep <关键词> |
查找特定进程 |
ps aux | grep java |
top |
实时显示系统资源使用情况 |
top,按 q 退出 |
htop |
增强版 top(需 brew install htop) |
htop |
kill <PID> |
终止指定 PID 的进程 |
kill 12345 |
kill -9 <PID> |
强制终止进程 |
kill -9 12345 |
killall <进程名> |
按名称终止所有匹配进程 |
killall Safari |
pkill <模式> |
按模式匹配终止进程 |
pkill -f "node server" |
lsof -i :<端口> |
查看占用指定端口的进程 |
lsof -i :8080 |
lsof -i -P |
列出所有网络连接 |
lsof -i -P | head -20 |
nohup <命令> & |
后台运行命令,退出终端不中断 |
nohup python3 server.py & |
jobs |
查看当前终端的后台任务 |
jobs |
fg %<编号> |
将后台任务切到前台 |
fg %1 |
bg %<编号> |
将暂停的任务放到后台继续运行 |
bg %1 |
4.3 磁盘与存储
| 命令 |
说明 |
示例 |
df -h |
显示磁盘使用情况(人类可读) |
df -h |
du -sh <目录> |
显示目录总大小 |
du -sh ~/Documents → 15G |
du -sh * |
显示当前目录下各项大小 |
du -sh * |
du -sh * | sort -rh |
按大小排序显示 |
du -sh * | sort -rh | head -10 |
du -d 1 -h <目录> |
显示一级子目录大小 |
du -d 1 -h ~/ |
diskutil list |
列出所有磁盘和分区 |
diskutil list |
diskutil info <磁盘> |
显示磁盘详细信息 |
diskutil info disk0 |
diskutil eraseDisk <格式> <名称> <磁盘> |
格式化磁盘(危险) |
diskutil eraseDisk APFS MyDisk disk2 |
五、网络相关
5.1 网络诊断
| 命令 |
说明 |
示例 |
ping <主机> |
测试网络连通性 |
ping google.com |
ping -c 5 <主机> |
发送 5 个 ping 包后停止 |
ping -c 5 baidu.com |
traceroute <主机> |
追踪数据包到目标的路由路径 |
traceroute google.com |
nslookup <域名> |
查询域名的 DNS 解析 |
nslookup github.com |
dig <域名> |
详细的 DNS 查询 |
dig github.com |
host <域名> |
简洁的 DNS 查询 |
host github.com |
curl <URL> |
发送 HTTP 请求并显示响应 |
curl https://api.github.com |
curl -I <URL> |
只显示 HTTP 响应头 |
curl -I https://google.com |
curl -o <文件> <URL> |
下载文件并保存 |
curl -o file.zip https://example.com/file.zip |
curl -X POST -d '<数据>' <URL> |
发送 POST 请求 |
curl -X POST -d '{"key":"val"}' -H "Content-Type: application/json" http://api.example.com |
wget <URL> |
下载文件(需 brew install wget) |
wget https://example.com/file.tar.gz |
wget -r <URL> |
递归下载整个网站 |
wget -r --no-parent https://example.com/docs/ |
5.2 网络配置
| 命令 |
说明 |
示例 |
ifconfig |
显示网络接口信息 |
ifconfig en0(Wi-Fi 接口) |
ipconfig getifaddr en0 |
获取 Wi-Fi 的本机 IP |
ipconfig getifaddr en0 → 192.168.1.100 |
curl ifconfig.me |
获取公网 IP |
curl ifconfig.me |
networksetup -listallhardwareports |
列出所有网络硬件端口 |
查看 Wi-Fi、以太网等接口名 |
networksetup -getinfo Wi-Fi |
获取 Wi-Fi 网络配置 |
查看 IP、子网掩码、路由器等 |
networksetup -setdnsservers Wi-Fi <DNS> |
设置 DNS 服务器 |
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4 |
networksetup -getdnsservers Wi-Fi |
查看当前 DNS 设置 |
networksetup -getdnsservers Wi-Fi |
arp -a |
显示 ARP 缓存表 |
arp -a |
netstat -an |
显示所有网络连接和端口 |
netstat -an | grep LISTEN |
scutil --dns |
显示 DNS 配置 |
scutil --dns |
dscacheutil -flushcache |
刷新 DNS 缓存 |
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
ssh <用户>@<主机> |
SSH 远程登录 |
ssh root@192.168.1.10 |
scp <文件> <用户>@<主机>:<路径> |
通过 SSH 复制文件到远程 |
scp report.pdf user@server:/home/user/ |
scp <用户>@<主机>:<文件> <本地路径> |
从远程复制文件到本地 |
scp user@server:/var/log/app.log ./ |
scp -r <目录> <用户>@<主机>:<路径> |
递归复制目录到远程 |
scp -r project/ user@server:/opt/ |
六、压缩与解压
| 命令 |
说明 |
示例 |
tar -czf <包名>.tar.gz <目录> |
打包并 gzip 压缩 |
tar -czf backup.tar.gz ~/project |
tar -xzf <包名>.tar.gz |
解压 tar.gz 文件 |
tar -xzf backup.tar.gz |
tar -xzf <包名>.tar.gz -C <目标> |
解压到指定目录 |
tar -xzf backup.tar.gz -C /tmp/ |
tar -cjf <包名>.tar.bz2 <目录> |
打包并 bzip2 压缩 |
tar -cjf archive.tar.bz2 data/ |
tar -xjf <包名>.tar.bz2 |
解压 tar.bz2 文件 |
tar -xjf archive.tar.bz2 |
tar -tf <包名>.tar.gz |
查看压缩包内容(不解压) |
tar -tf backup.tar.gz |
zip -r <包名>.zip <目录> |
压缩为 zip 格式 |
zip -r project.zip project/ |
zip -e <包名>.zip <文件> |
创建加密 zip 文件 |
zip -e secret.zip sensitive.txt |
unzip <包名>.zip |
解压 zip 文件 |
unzip project.zip |
unzip <包名>.zip -d <目标> |
解压到指定目录 |
unzip project.zip -d /tmp/ |
unzip -l <包名>.zip |
查看 zip 内容(不解压) |
unzip -l project.zip |
gzip <文件> |
压缩单个文件(原文件被替换) |
gzip large.log → 生成 large.log.gz |
gunzip <文件>.gz |
解压 gzip 文件 |
gunzip large.log.gz |
七、软件包管理(Homebrew)
| 命令 |
说明 |
示例 |
/bin/bash -c "$(curl -fsSL ...)" |
安装 Homebrew |
见 Homebrew 官网 |
brew install <包名> |
安装软件包 |
brew install git |
brew install --cask <应用名> |
安装 GUI 应用 |
brew install --cask visual-studio-code |
brew uninstall <包名> |
卸载软件包 |
brew uninstall wget |
brew update |
更新 Homebrew 本身和软件源 |
brew update |
brew upgrade |
升级所有已安装的包 |
brew upgrade |
brew upgrade <包名> |
升级指定包 |
brew upgrade node |
brew list |
列出所有已安装的包 |
brew list |
brew list --cask |
列出所有已安装的 GUI 应用 |
brew list --cask |
brew search <关键词> |
搜索可用的包 |
brew search python |
brew info <包名> |
显示包的详细信息 |
brew info node |
brew doctor |
检查 Homebrew 环境问题 |
brew doctor |
brew cleanup |
清理旧版本和缓存 |
brew cleanup |
brew services list |
列出所有通过 brew 管理的服务 |
brew services list |
brew services start <服务> |
启动服务 |
brew services start mysql |
brew services stop <服务> |
停止服务 |
brew services stop mysql |
brew services restart <服务> |
重启服务 |
brew services restart nginx |
brew tap <仓库> |
添加第三方仓库 |
brew tap homebrew/cask-fonts |
八、Git 常用命令
8.1 基础操作
| 命令 |
说明 |
示例 |
git init |
初始化本地仓库 |
git init |
git clone <URL> |
克隆远程仓库 |
git clone https://github.com/user/repo.git |
git clone --depth 1 <URL> |
浅克隆(只拉最新一次提交) |
git clone --depth 1 https://github.com/user/repo.git |
git status |
查看工作区状态 |
git status |
git add <文件> |
将文件添加到暂存区 |
git add index.html |
git add . |
添加所有更改到暂存区 |
git add . |
git commit -m "<信息>" |
提交暂存区的更改 |
git commit -m "feat: add login page" |
git commit --amend |
修改最近一次提交信息 |
git commit --amend -m "fix: typo" |
git push |
推送到远程仓库 |
git push origin main |
git pull |
拉取远程更新并合并 |
git pull origin main |
git fetch |
拉取远程更新(不合并) |
git fetch origin |
8.2 分支操作
| 命令 |
说明 |
示例 |
git branch |
列出本地分支 |
git branch |
git branch -a |
列出所有分支(含远程) |
git branch -a |
git branch <分支名> |
创建新分支 |
git branch feature/login |
git checkout <分支名> |
切换分支 |
git checkout develop |
git checkout -b <分支名> |
创建并切换到新分支 |
git checkout -b feature/login |
git switch <分支名> |
切换分支(新语法) |
git switch main |
git switch -c <分支名> |
创建并切换(新语法) |
git switch -c feature/login |
git merge <分支名> |
合并指定分支到当前分支 |
git merge feature/login |
git rebase <分支名> |
变基到指定分支 |
git rebase main |
git branch -d <分支名> |
删除已合并的分支 |
git branch -d feature/login |
git branch -D <分支名> |
强制删除分支 |
git branch -D experiment |
git push origin --delete <分支名> |
删除远程分支 |
git push origin --delete feature/old |
8.3 查看与回退
| 命令 |
说明 |
示例 |
git log |
查看提交历史 |
git log |
git log --oneline |
简洁模式查看历史 |
git log --oneline -10 |
git log --graph --oneline |
图形化查看分支历史 |
git log --graph --oneline --all |
git diff |
查看工作区与暂存区的差异 |
git diff |
git diff --staged |
查看暂存区与最新提交的差异 |
git diff --staged |
git stash |
暂存当前未提交的更改 |
git stash |
git stash list |
查看暂存列表 |
git stash list |
git stash pop |
恢复最近一次暂存并删除记录 |
git stash pop |
git stash apply stash@{n} |
恢复指定暂存(不删除记录) |
git stash apply stash@{0} |
git reset HEAD <文件> |
取消暂存 |
git reset HEAD index.html |
git reset --soft HEAD~1 |
回退一次提交(保留更改在暂存区) |
git reset --soft HEAD~1 |
git reset --hard HEAD~1 |
回退一次提交(丢弃所有更改) |
git reset --hard HEAD~1 |
git checkout -- <文件> |
丢弃工作区的修改 |
git checkout -- index.html |
git reflog |
查看所有操作记录(可用于恢复) |
git reflog |
九、macOS 专属实用命令
9.1 系统操作
| 命令 |
说明 |
示例 |
open <文件> |
用默认应用打开文件 |
open report.pdf |
open <目录> |
在 Finder 中打开目录 |
open .(打开当前目录) |
open -a "<应用名>" <文件> |
用指定应用打开文件 |
open -a "Visual Studio Code" project/ |
open <URL> |
用默认浏览器打开 URL |
open https://github.com |
pbcopy |
将标准输入复制到剪贴板 |
echo "Hello" | pbcopy |
pbpaste |
将剪贴板内容输出到标准输出 |
pbpaste > clipboard.txt |
pbcopy < <文件> |
将文件内容复制到剪贴板 |
pbcopy < ~/.ssh/id_rsa.pub |
say "<文本>" |
让 Mac 朗读文本 |
say "Hello World" |
say -v Ting-Ting "<文本>" |
用中文语音朗读 |
say -v Ting-Ting "你好世界" |
screencapture <文件> |
截屏保存到文件 |
screencapture screenshot.png |
screencapture -i <文件> |
交互式截屏(选择区域) |
screencapture -i area.png |
screencapture -c |
截屏到剪贴板 |
screencapture -c |
afplay <音频文件> |
在终端播放音频 |
afplay notification.mp3 |
textutil -convert txt <文件> |
转换文档格式 |
textutil -convert txt document.docx |
sips -z <高> <宽> <图片> |
调整图片尺寸 |
sips -z 100 100 icon.png |
sips -s format jpeg <图片> --out <输出> |
转换图片格式 |
sips -s format jpeg photo.png --out photo.jpg |
mdls <文件> |
显示文件的 Spotlight 元数据 |
mdls photo.jpg |
9.2 系统偏好设置(defaults 命令)
| 命令 |
说明 |
示例 |
defaults read |
读取所有偏好设置 |
defaults read com.apple.finder |
defaults write com.apple.finder AppleShowAllFiles -bool true |
显示隐藏文件 |
执行后需 killall Finder |
defaults write com.apple.finder AppleShowAllFiles -bool false |
隐藏隐藏文件 |
执行后需 killall Finder |
defaults write com.apple.screencapture location <路径> |
修改截图保存位置 |
defaults write com.apple.screencapture location ~/Screenshots |
defaults write com.apple.screencapture type jpg |
修改截图格式 |
可选:png、jpg、gif、pdf |
defaults write com.apple.dock autohide -bool true |
自动隐藏 Dock |
执行后需 killall Dock |
defaults write com.apple.dock autohide-delay -float 0 |
去除 Dock 隐藏延迟 |
执行后需 killall Dock |
defaults write com.apple.dock tilesize -int 48 |
设置 Dock 图标大小 |
执行后需 killall Dock |
defaults write NSGlobalDomain AppleShowAllExtensions -bool true |
显示所有文件扩展名 |
执行后需 killall Finder |
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true |
禁止在网络卷上生成 .DS_Store |
立即生效 |
9.3 电源与硬件
| 命令 |
说明 |
示例 |
pmset -g batt |
查看电池状态 |
pmset -g batt |
pmset -g |
查看当前电源管理设置 |
pmset -g |
sudo pmset sleepnow |
立即进入睡眠 |
sudo pmset sleepnow |
caffeinate |
阻止 Mac 进入睡眠 |
caffeinate,按 Ctrl+C 停止 |
caffeinate -t 3600 |
阻止睡眠 1 小时(3600 秒) |
caffeinate -t 3600 |
caffeinate -s |
连接电源时阻止睡眠 |
caffeinate -s |
sudo shutdown -h now |
立即关机 |
sudo shutdown -h now |
sudo shutdown -r now |
立即重启 |
sudo shutdown -r now |
sudo shutdown -h +30 |
30 分钟后关机 |
sudo shutdown -h +30 |
sudo reboot |
重启 |
sudo reboot |
ioreg -l -w 0 | grep Capacity |
查看电池健康信息 |
查看 MaxCapacity 和 DesignCapacity |
十、文本处理与管道
| 命令 |
说明 |
示例 |
echo "<文本>" |
输出文本 |
echo "Hello, Mac!" |
echo "<文本>" > <文件> |
将文本写入文件(覆盖) |
echo "line1" > output.txt |
echo "<文本>" >> <文件> |
将文本追加到文件 |
echo "line2" >> output.txt |
cat <文件1> <文件2> > <合并文件> |
合并多个文件 |
cat part1.txt part2.txt > full.txt |
sort <文件> |
对文件内容排序 |
sort names.txt |
sort -r <文件> |
逆序排序 |
sort -r scores.txt |
sort -n <文件> |
按数字排序 |
sort -n numbers.txt |
sort -u <文件> |
排序并去重 |
sort -u emails.txt |
uniq <文件> |
去除相邻重复行 |
sort data.txt | uniq |
uniq -c <文件> |
去重并统计出现次数 |
sort data.txt | uniq -c |
cut -d'<分隔符>' -f<列号> <文件> |
按分隔符提取指定列 |
cut -d',' -f1,3 data.csv |
awk '{print $1}' <文件> | 提取第一列 | awk '{print $1}' access.log |
|
|
awk -F',' '{print $2}' <文件> | 以逗号为分隔符提取第二列 | awk -F',' '{print $2}' data.csv |
|
|
sed 's/旧/新/g' <文件> |
全局替换文本 |
sed 's/foo/bar/g' config.txt |
sed -i '' 's/旧/新/g' <文件> |
原地替换(macOS 语法) |
sed -i '' 's/http/https/g' urls.txt |
sed -n '5,10p' <文件> |
打印第 5 到 10 行 |
sed -n '5,10p' data.txt |
tr '<字符集1>' '<字符集2>' |
字符替换/转换 |
echo "hello" | tr 'a-z' 'A-Z' → HELLO |
tr -d '<字符>' |
删除指定字符 |
echo "a1b2c3" | tr -d '0-9' → abc |
tee <文件> |
同时输出到屏幕和文件 |
ls | tee filelist.txt |
xargs <命令> |
将标准输入转为命令参数 |
find . -name "*.tmp" | xargs rm |
| |
管道:前一个命令的输出作为后一个的输入 |
cat log.txt | grep "error" | wc -l |
> |
重定向输出到文件(覆盖) |
ls > files.txt |
>> |
重定向输出到文件(追加) |
date >> log.txt |
2> |
重定向错误输出 |
command 2> error.log |
2>&1 |
将错误输出合并到标准输出 |
command > all.log 2>&1 |
十一、环境变量与 Shell 配置
| 命令 |
说明 |
示例 |
echo $PATH | 查看 PATH 环境变量 | echo $PATH |
|
|
echo $HOME | 查看用户主目录 | echo $HOME → /Users/chenwenpeng |
|
|
echo $SHELL | 查看当前使用的 Shell | echo $SHELL → /bin/zsh |
|
|
export <变量>=<值> |
设置临时环境变量(当前会话有效) |
export JAVA_HOME=/Library/Java/Home |
env |
显示所有环境变量 |
env |
printenv <变量> |
显示指定环境变量的值 |
printenv PATH |
source ~/.zshrc |
重新加载 zsh 配置文件 |
source ~/.zshrc |
alias <别名>='<命令>' |
创建命令别名(当前会话) |
alias ll='ls -la' |
unalias <别名> |
删除别名 |
unalias ll |
alias |
查看所有已定义的别名 |
alias |
常用配置文件
| 文件 |
说明 |
用途 |
~/.zshrc |
Zsh 配置文件 |
添加别名、环境变量、插件等 |
~/.bash_profile |
Bash 登录 Shell 配置 |
旧版 macOS 默认 Shell 配置 |
~/.bashrc |
Bash 非登录 Shell 配置 |
交互式 Shell 配置 |
~/.ssh/config |
SSH 客户端配置 |
配置 SSH 别名、密钥等 |
~/.gitconfig |
Git 全局配置 |
用户名、邮箱、别名等 |
/etc/hosts |
主机名映射文件 |
自定义域名解析 |
十二、macOS 键盘快捷键大全
12.1 通用快捷键
| 快捷键 |
说明 |
Cmd + C |
复制 |
Cmd + V |
粘贴 |
Cmd + X |
剪切 |
Cmd + Z |
撤销 |
Cmd + Shift + Z |
重做 |
Cmd + A |
全选 |
Cmd + S |
保存 |
Cmd + Shift + S |
另存为 |
Cmd + F |
查找 |
Cmd + G |
查找下一个 |
Cmd + Shift + G |
查找上一个 |
Cmd + H |
隐藏当前窗口 |
Cmd + Option + H |
隐藏其他所有窗口 |
Cmd + M |
最小化窗口 |
Cmd + W |
关闭当前窗口/标签页 |
Cmd + Q |
退出当前应用 |
Cmd + N |
新建窗口/文件 |
Cmd + T |
新建标签页 |
Cmd + P |
打印 |
Cmd + , |
打开当前应用的偏好设置 |
12.2 系统级快捷键
| 快捷键 |
说明 |
Cmd + Space |
打开 Spotlight 搜索 |
Cmd + Tab |
切换应用 |
Cmd + ~ |
在同一应用的窗口间切换 |
Cmd + Option + Esc |
强制退出应用 |
Ctrl + Cmd + Q |
锁定屏幕 |
Ctrl + Cmd + F |
全屏/退出全屏 |
Cmd + Shift + 3 |
全屏截图 |
Cmd + Shift + 4 |
区域截图 |
Cmd + Shift + 4 + Space |
窗口截图 |
Cmd + Shift + 5 |
打开截图工具栏(含录屏) |
Ctrl + Up |
调度中心(Mission Control) |
Ctrl + Down |
应用程序窗口 |
F11 |
显示桌面 |
Cmd + Shift + . |
显示/隐藏隐藏文件(Finder 中) |
12.3 Finder 快捷键
| 快捷键 |
说明 |
Cmd + Shift + N |
新建文件夹 |
Cmd + Delete |
移到废纸篓 |
Cmd + Shift + Delete |
清空废纸篓 |
Cmd + D |
复制文件 |
Cmd + I |
显示简介(查看文件信息) |
Cmd + Shift + C |
打开"电脑"目录 |
Cmd + Shift + H |
打开用户主目录 |
Cmd + Shift + D |
打开桌面目录 |
Cmd + Shift + A |
打开应用程序目录 |
Cmd + Shift + U |
打开实用工具目录 |
Cmd + Shift + G |
前往文件夹(输入路径) |
Cmd + Up |
前往上级目录 |
Cmd + Down |
打开选中项 |
Space |
快速预览(Quick Look) |
Cmd + 1/2/3/4 |
切换视图(图标/列表/分栏/画廊) |
Cmd + Option + V |
移动文件(先 Cmd+C 复制,再用此粘贴) |
12.4 终端快捷键
| 快捷键 |
说明 |
Ctrl + A |
光标移到行首 |
Ctrl + E |
光标移到行尾 |
Ctrl + U |
删除光标前的所有内容 |
Ctrl + K |
删除光标后的所有内容 |
Ctrl + W |
删除光标前的一个单词 |
Ctrl + L |
清屏(等同 clear) |
Ctrl + C |
中断当前命令 |
Ctrl + D |
退出当前 Shell(等同 exit) |
Ctrl + Z |
将当前进程挂起到后台 |
Ctrl + R |
反向搜索历史命令 |
Tab |
自动补全命令/路径 |
Up / Down |
浏览历史命令 |
!! |
执行上一条命令 |
sudo !! |
以 sudo 重新执行上一条命令 |
十三、开发者常用命令
13.1 Python
| 命令 |
说明 |
示例 |
python3 --version |
查看 Python 版本 |
python3 --version → Python 3.11.x |
python3 <脚本> |
运行 Python 脚本 |
python3 app.py |
python3 -m venv <目录> |
创建虚拟环境 |
python3 -m venv venv |
source venv/bin/activate |
激活虚拟环境 |
source venv/bin/activate |
deactivate |
退出虚拟环境 |
deactivate |
pip3 install <包> |
安装 Python 包 |
pip3 install requests |
pip3 install -r requirements.txt |
从文件安装依赖 |
pip3 install -r requirements.txt |
pip3 list |
列出已安装的包 |
pip3 list |
pip3 freeze > requirements.txt |
导出依赖列表 |
pip3 freeze > requirements.txt |
13.2 Node.js / npm
| 命令 |
说明 |
示例 |
node --version |
查看 Node.js 版本 |
node --version → v20.x.x |
node <脚本> |
运行 JS 脚本 |
node server.js |
npm init -y |
初始化项目(生成 package.json) |
npm init -y |
npm install <包> |
安装依赖 |
npm install express |
npm install -g <包> |
全局安装 |
npm install -g typescript |
npm run <脚本> |
运行 package.json 中定义的脚本 |
npm run dev |
npm list |
列出已安装的依赖 |
npm list --depth=0 |
npx <命令> |
执行 npm 包命令(无需全局安装) |
npx create-react-app my-app |
nvm install <版本> |
安装指定 Node 版本(需安装 nvm) |
nvm install 20 |
nvm use <版本> |
切换 Node 版本 |
nvm use 18 |
nvm ls |
列出已安装的 Node 版本 |
nvm ls |
13.3 Java / Maven
| 命令 |
说明 |
示例 |
java -version |
查看 Java 版本 |
java -version |
javac <文件>.java |
编译 Java 文件 |
javac Main.java |
java <类名> |
运行 Java 程序 |
java Main |
mvn clean install |
Maven 清理并构建 |
mvn clean install |
mvn clean package -DskipTests |
打包并跳过测试 |
mvn clean package -DskipTests |
mvn dependency:tree |
查看依赖树 |
mvn dependency:tree |
mvn spring-boot:run |
启动 Spring Boot 应用 |
mvn spring-boot:run |
/usr/libexec/java_home -V |
列出所有已安装的 JDK |
/usr/libexec/java_home -V |
export JAVA_HOME=$(/usr/libexec/java_home -v 17) |
切换 JDK 版本 |
切换到 JDK 17 |
13.4 Docker
| 命令 |
说明 |
示例 |
docker ps |
列出运行中的容器 |
docker ps |
docker ps -a |
列出所有容器(含已停止) |
docker ps -a |
docker images |
列出本地镜像 |
docker images |
docker pull <镜像> |
拉取镜像 |
docker pull nginx:latest |
docker run -d -p <主机端口>:<容器端口> <镜像> |
后台运行容器并映射端口 |
docker run -d -p 8080:80 nginx |
docker run -it <镜像> /bin/bash |
交互式运行容器 |
docker run -it ubuntu /bin/bash |
docker stop <容器ID> |
停止容器 |
docker stop abc123 |
docker rm <容器ID> |
删除容器 |
docker rm abc123 |
docker rmi <镜像> |
删除镜像 |
docker rmi nginx:latest |
docker logs <容器ID> |
查看容器日志 |
docker logs -f abc123 |
docker exec -it <容器ID> /bin/bash |
进入运行中的容器 |
docker exec -it abc123 /bin/bash |
docker-compose up -d |
启动 docker-compose 服务 |
docker-compose up -d |
docker-compose down |
停止并移除 docker-compose 服务 |
docker-compose down |
docker system prune -a |
清理所有未使用的资源 |
docker system prune -a |
十四、安全与加密
| 命令 |
说明 |
示例 |
ssh-keygen -t ed25519 -C "<邮箱>" |
生成 SSH 密钥对 |
ssh-keygen -t ed25519 -C "user@example.com" |
ssh-keygen -t rsa -b 4096 |
生成 RSA 密钥对 |
ssh-keygen -t rsa -b 4096 |
cat ~/.ssh/id_ed25519.pub |
查看公钥 |
cat ~/.ssh/id_ed25519.pub |
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 |
将私钥添加到 SSH Agent(macOS) |
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 |
ssh-add -l |
列出 SSH Agent 中的密钥 |
ssh-add -l |
shasum -a 256 <文件> |
计算文件的 SHA-256 校验值 |
shasum -a 256 download.zip |
md5 <文件> |
计算文件的 MD5 值 |
md5 file.iso |
openssl enc -aes-256-cbc -in <文件> -out <加密文件> |
AES 加密文件 |
openssl enc -aes-256-cbc -in secret.txt -out secret.enc |
openssl enc -d -aes-256-cbc -in <加密文件> -out <文件> |
AES 解密文件 |
openssl enc -d -aes-256-cbc -in secret.enc -out secret.txt |
security find-generic-password -s <服务名> |
从钥匙串查找密码 |
security find-generic-password -s "Wi-Fi" |
sudo spctl --master-disable |
允许安装任何来源的应用 |
系统偏好设置中出现"任何来源" |
sudo spctl --master-enable |
恢复 Gatekeeper 默认设置 |
恢复安全限制 |
十五、定时任务与自动化
15.1 Cron 定时任务
| 命令 |
说明 |
示例 |
crontab -e |
编辑当前用户的定时任务 |
crontab -e |
crontab -l |
列出当前用户的定时任务 |
crontab -l |
crontab -r |
删除当前用户的所有定时任务 |
crontab -r |
Cron 表达式速查
* * * * * 命令
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─── 星期几 (0-7, 0和7都是周日)
│ │ │ └──────── 月份 (1-12)
│ │ └───────────── 日期 (1-31)
│ └────────────────── 小时 (0-23)
└─────────────────────── 分钟 (0-59)
| 示例 |
说明 |
0 9 * * * /path/to/script.sh |
每天 9:00 执行 |
*/5 * * * * /path/to/script.sh |
每 5 分钟执行一次 |
0 0 * * 0 /path/to/backup.sh |
每周日午夜执行 |
0 8,12,18 * * * /path/to/check.sh |
每天 8:00、12:00、18:00 执行 |
30 2 1 * * /path/to/monthly.sh |
每月 1 日凌晨 2:30 执行 |
15.2 launchctl(macOS 推荐的任务调度)
| 命令 |
说明 |
示例 |
launchctl list |
列出所有已加载的服务 |
launchctl list |
launchctl load <plist文件> |
加载服务 |
launchctl load ~/Library/LaunchAgents/com.my.task.plist |
launchctl unload <plist文件> |
卸载服务 |
launchctl unload ~/Library/LaunchAgents/com.my.task.plist |
launchctl start <服务名> |
启动服务 |
launchctl start com.my.task |
launchctl stop <服务名> |
停止服务 |
launchctl stop com.my.task |
LaunchAgent plist 文件位置
| 路径 |
说明 |
~/Library/LaunchAgents/ |
当前用户的代理(用户登录时加载) |
/Library/LaunchAgents/ |
所有用户的代理(用户登录时加载) |
/Library/LaunchDaemons/ |
系统级守护进程(系统启动时加载) |
附录
这是以前总结的,作为留存
Mac快捷键
- command + Shift + 3 截全屏
- command + Shift + 4 选区域截屏
- command + Shift + . 显示隐藏文件
- fn + E 或者 control + command + 空格 选择表情
Terminal美化
让Claude帮你安装新的美化方案。
帮我安装以下终端工具并完成配置:
1. Ghostty(终端模拟器)—— brew cask 安装,配置 Catppuccin Mocha 主题
2. Starship(命令提示符)—— brew 安装,应用 gruvbox-rainbow preset,配置到 zshrc
3. Lazygit(Git TUI)—— brew 安装即可
4. Yazi(文件管理器)—— brew 安装,附带 ffmpegthumbnailer 和 poppler
5. Zoxide(智能 cd)—— brew 安装,配置到 zshrc,用 --cmd cd 替换原生 cd
6. JetBrainsMono Nerd Font —— brew cask 安装,配置到终端字体
卸载 Oh My Zsh,zshrc 中补上 history 和 completion 基础配置
我用的终端是 Ghostty(如果还没装就先装),shell 是 zsh。
HomeBrew
# 显示 homebrew 安装的包
brew list
# 显示 homebrew 安装了多少包,占多少内存
brew info
# 显示某个包的详细信息
brew info xxx
# 清除 homebrew 安装的缓存
brew cleanup
# 安装包
brew install xxx
# 删除包
brew uninstall xxx
# 删除未使用的依赖包
brew autoremove
# 显示 homebrew 安装目录
brew --repository
xxx已损坏,无法打开。 你应该将它移到废纸篓
Mac终端命令大全
| 命令名 |
功能描述 |
举例或备注 |
| cd |
进入指定文件夹路径 |
cd ~/Desktop |
| cd Documents/gitkraken |
注意cd后面直接跟Documents,没有/ |
|
| pwd |
显示当前的目录路径 |
/Users/xz/Desktop |
| ls |
显示当前目录下的内容 |
|
| ls -la |
显示当前目录下的详细内容 |
|
| ls -A |
显示当前目录下的内容 |
含点(.)开头的文件 |
| mkdir |
创建目录 |
mkdir dir_name |
| touch file.format |
创建指定格式的文件 |
touch test.txt |
| mvdir |
移动目录 |
mvdir dir1 dir2 |
| mv |
移动/重命名—文件/文件夹 |
mv dir1 dir2MAC没有重命名的命令 |
| rm |
删除文件 或 空目录 |
|
| rm -rf dir |
删除一个 非空 目录 |
rm -rf dir |
| rmdir |
删除 空 目录 |
平时用得少 |
| cp |
复制文件或目录 |
cp file1 file2 |
| file |
显示文件类型 |
file file_name |
| find |
使用匹配表达式查找文件 |
find *.file_format |
| open |
使用默认的程序打开文件 |
open file_name |
| cat |
显示或连接文件内容 |
cat file |
| ln |
为文件创建联接 |
ln -s file1 file2s 表示软联接 |
| head |
显示文件的最初几行 |
head -20 file_name |
| tail |
显示文件的最后几行 |
tail -10 file_name |
| paste |
横向拼接文件内容 |
paste file1 file2 |
| diff |
比较并显示两个文件的内容差异 |
diff file1 file2 |
| wc |
统计文件的字符数、词数和行数 |
wc file_name |
| uniq |
去掉文件中的重复行 |
uniq file_name |
| grep |
通过简单正则表达式搜索文件 |
|
| cd .. |
退回上一级目录 |
|
| open file.format |
打开文件 |
open test.txt |
| vim file.format |
在命令行用vim打开文件 |
vim test.txt |
| :q! |
用vim打开文件后,强制退出vim,并不作任何修改。q退出,!强制 |
|
| esc + :wq |
用vim打开文件后,先保存然后再退出。w写保存 |
|
| :q |
用vim打开文件后,放弃修改不保存。 |
|
| ls zen* |
搜索以zen开头的所有文件 |
|
| cp -r source_dir/ destination_dir/ |
递归复制目录及其内容 |
|
| control+command+空格 / fn+E |
召唤出表情选择框 |
|