跳转到内容

附录 A 按任务反查

手里有一件要做的事、却不知道该用哪个工具时查这里。先找任务所属的部分,再在表里找最接近的一行。命令照抄正文,<…> 里的换成自己的值;bash(Linux、macOS)和 PowerShell 写法不同时两种都列,先 bash,后“PowerShell:…”。“详见”指向讲这件事的小节,前后步骤、要改的配置和常见的坑都在那里。

我想…… 命令或操作 详见
执行一个记不住快捷键的命令 Ctrl+Shift+P,输入命令名 第 1 章 1.3
在整个项目里搜一段文字 Ctrl+Shift+F 第 1 章 1.3
用 VS Code 打开终端所在的项目 code . 第 1 章 1.4
给脚本下断点调试 在那一行按 F9,再按 F5 第 1 章 1.4
核对本机装了哪些扩展 code --list-extensions 第 2 章 2.4
在 VS Code 里直接改服务器上的代码 命令面板运行“Remote-SSH: Connect to Host…” 第 2 章 2.4
给 Python 项目建虚拟环境 python -m venv .venv 第 3 章 3.4
让 VS Code 用项目的虚拟环境 点状态栏右下角的 Python 版本,选 .venv 第 3 章 3.4
按 PID 结束一个进程 kill <PID>;PowerShell:Stop-Process -Id <PID> 第 4 章 4.3
实时跟踪日志 tail -f app.log;PowerShell:Get-Content app.log -Wait -Tail 20 第 4 章 4.3
把 Windows Terminal 的默认 Shell 换成 PowerShell 7 winget install Microsoft.PowerShell,再在设置里改“默认配置文件” 第 4 章 4.4
把一个目录永久加进 PATH(bash) echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc 第 4 章 4.4
找出调用某个函数的所有文件 rg -l -t py <函数名> 第 5 章 5.4
模糊搜索历史命令 装好 fzf 的 Shell 集成后按 Ctrl+R 第 5 章 5.3
生成 SSH 密钥 ssh-keygen -t ed25519 -C "<邮箱>" 第 6 章 6.3
配置免密登录服务器 ssh-copy-id <用户>@<主机> 第 6 章 6.4
给服务器起个别名,以后不用记地址 在 ~/.ssh/config 里写别名(写法见 6.5),再 ssh <别名> 第 6 章 6.4
把文件传到服务器 scp <本地文件> <别名>:<远程目录>/ 第 6 章 6.3
在本机连服务器上只听 127.0.0.1 的数据库 ssh -N -L 5433:127.0.0.1:5432 <别名> 第 6 章 6.4
在服务器上跑长任务,断线也不停 tmux new -s job,回来时 tmux attach -t job 第 6 章 6.4
我想…… 命令或操作 详见
装完 Git 设置名字和邮箱 git config --global user.name "<名字>",git config --global user.email "<邮箱>" 第 7 章 7.4
下载一个仓库 git clone <url> 第 7 章 7.3
把本地项目推到新建的远程仓库 git remote add origin <url>,再 git push -u origin main 第 7 章 7.4
新建分支并切过去 git switch -c <名> 第 7 章 7.3
拉取远程的新提交 git pull 第 7 章 7.3
看提交历史和分支走向 git log --oneline --graph --all 第 7 章 7.3
只提交一部分改动 git add -p 第 7 章 7.3
先收起改动去切分支,回来再放回 git stash,回来后 git stash pop 第 7 章 7.3
解决合并冲突 改好冲突文件后 git add <文件>,再 git commit;不想合了 git merge --abort 第 7 章 7.4
丢掉还没 add 的改动 git restore <文件>(改动找不回) 第 8 章 8.4
取消暂存,改动留着 git restore --staged <文件> 第 8 章 8.4
改上一次提交的说明(还没 push) git commit --amend -m "<新说明>" 第 8 章 8.4
撤销还没 push 的提交,保留改动 git reset --soft HEAD~1 第 8 章 8.4
撤销已经 push 的提交 git revert <提交> 第 8 章 8.4
reset --hard 之后后悔 git reflog 找到位置,git reset --hard HEAD@{1}(没提交的改动会丢) 第 8 章 8.4
提 PR 前把零碎提交合并整理 git rebase -i HEAD~5,整理后推送用 git push --force-with-lease 第 8 章 8.4
找出哪个提交引入了 bug git bisect start,git bisect bad,git bisect good v1.0 第 8 章 8.4
把本地已有项目建成 GitHub 仓库并推送 gh repo create <名> --private --source=. --push 第 9 章 9.3
用提交说明建 PR gh pr create --fill 第 9 章 9.3
把别人的 PR 拉到本地试 gh pr checkout <编号> 第 9 章 9.3
只在推送到 main 时跑 CI on: { push: { branches: [main] } } 第 10 章 10.3
在工作流里读机密 env: { API_KEY: '${{ secrets.API_KEY }}' } 第 10 章 10.3
只看 CI 失败步骤的日志 gh run view <运行编号> --log-failed 第 10 章 10.3
格式化 Python 代码 ruff format . 第 11 章 11.3
lint JS、TS 并自动修 npx eslint . --fix 第 11 章 11.3
提交前自动检查 pre-commit install 第 11 章 11.4
我想…… 命令或操作 详见
跑别人的镜像,只让本机访问 docker run -d --name web -p 127.0.0.1:8088:80 nginx:stable-alpine 第 12 章 12.4
看有哪些容器在跑 docker ps 第 12 章 12.3
进运行中的容器看一眼 docker exec -it <容器> sh 第 12 章 12.3
看容器日志 docker logs -f <容器> 第 12 章 12.3
构建自己的镜像 docker build -t myapp:1.0 . 第 12 章 12.3
查 Docker 占了多少磁盘并清理 docker system df,再 docker system prune(会删已停止的容器) 第 12 章 12.3
用随书 compose 起数据库 docker compose --profile db up -d 第 13 章 13.4
停掉全部服务,数据留着 docker compose --profile all down 第 13 章 13.3
看随书 compose 起的服务状态和端口 docker compose ps 第 13 章 13.3
跟踪一个服务的日志 docker compose logs -f redis 第 13 章 13.3
改了代码后重新构建并启动 docker compose up -d --build 第 13 章 13.3
拿到别人的项目,按锁文件装依赖 npm ci(Node)、uv sync --locked(Python)、dotnet restore --locked-mode(.NET)、go mod download(Go) 第 14 章 14.3
列出可升级的包 npm outdated(Node)、uv tree --outdated --depth 1(Python) 第 14 章 14.3
给项目固定一个 Python 版本 uv python install 3.14,再 uv python pin 3.14 第 14 章 14.4
让 .env 不进仓库 echo ".env" >> .gitignore,再 git check-ignore -v .env 确认 第 15 章 15.4
让 Node 程序启动时读 .env node --env-file=.env app.js 第 15 章 15.3
永久设一个环境变量 echo 'export FOO=1' >> ~/.bashrc;PowerShell:[Environment]::SetEnvironmentVariable('FOO', '1', 'User') 第 15 章 15.3
我想…… 命令或操作 详见
改完 Nginx 配置后检查并重载 sudo nginx -t,再 sudo nginx -s reload 第 16 章 16.3
给本机 3000 端口的应用加反向代理 在 server 块里加 location /api/,再 docker compose exec nginx nginx -s reload 第 16 章 16.4
用 Certbot 给站点配 HTTPS sudo certbot --nginx -d example.com -d www.example.com 第 16 章 16.4
一行命令开反向代理 caddy reverse-proxy --from :8090 --to :3000 第 17 章 17.3
改完 Caddyfile 后检查并重载 caddy validate,再 caddy reload 第 17 章 17.3
看一次请求完整的来回 curl -v <url> 第 18 章 18.3
发一个 JSON 请求 curl --json '{"name":"a"}' <url> 第 18 章 18.3
把本机开发的网页临时给别人看 ngrok http 3000 第 18 章 18.3
把浏览器里的请求复制到终端重放 Network 里右键请求,Copy,Copy as cURL (bash) 第 19 章 19.3
跳过缓存刷新页面 Ctrl+Shift+R 或 Ctrl+F5 第 19 章 19.3
我想…… 命令或操作 详见
看一条查询走没走索引 EXPLAIN QUERY PLAN SELECT * FROM orders WHERE user_id = 1;;PostgreSQL、MySQL 用 EXPLAIN 第 20 章 20.3
在四种客户端里列出表 \dt、SHOW TABLES;、.tables、show collections 第 20 章 20.3
给应用建 PostgreSQL 专用的库和用户 CREATE ROLE app LOGIN PASSWORD 'app_pw';,再 CREATE DATABASE app OWNER app; 第 21 章 21.4
进随书容器里的 PostgreSQL docker compose exec postgres psql -U postgres 第 21 章 21.4
备份一个 PostgreSQL 库 pg_dump -U postgres -Fc -f app.dump app 第 21 章 21.3
把备份恢复成另一个库 pg_restore -U postgres -d app_copy app.dump(目标库要先建好) 第 21 章 21.3
给应用建 MySQL 用户并授权 CREATE USER 'app'@'%' IDENTIFIED BY 'app_pw';,再 GRANT ALL PRIVILEGES ON app.* TO 'app'@'%'; 第 22 章 22.4
导出一个 MySQL 库 mysqldump -uroot -p --single-transaction app > app.sql 第 22 章 22.3
把导出的 SQL 恢复进 MySQL mysql -uroot -p app_copy < app.sql(目标库要先建好) 第 22 章 22.3
排查 MySQL 中文乱码 SHOW VARIABLES LIKE 'character_set%';,再 SHOW CREATE TABLE notes\G 第 22 章 22.4
把 CSV 导入 SQLite .import --csv --skip 1 orders.csv orders 第 23 章 23.3
备份一个正在用的 SQLite 库 sqlite3 app.db ".backup app-2026-10-08.db" 第 23 章 23.4
在 MongoDB 里按条件查并只取几个字段 db.orders.find({ amount: { $gte: 50 } }, { _id: 0, name: 1, amount: 1 }) 第 24 章 24.3
备份和恢复一个 MongoDB 库 mongodump --db=shop --archive=/tmp/shop.archive --gzip,mongorestore --archive=/tmp/shop.archive --gzip 第 24 章 24.3
我想…… 命令或操作 详见
写一个会自动过期的缓存 SET k v EX 60 第 25 章 25.3
做一把分布式锁 SET lock:job1 8f14e45f NX PX 30000 第 25 章 25.4
取排行榜前十名 ZRANGE board 0 9 REV WITHSCORES 第 25 章 25.3
选一个消息队列 看 26.4 的选型表:任务队列用 RabbitMQ,事件流与回放用 Kafka,已有 Redis 且量不大用 Redis Streams 第 26 章 26.4
消息重投时不重复处理 INSERT INTO processed VALUES ('1001', CURRENT_TIMESTAMP) ON CONFLICT DO NOTHING; 第 26 章 26.4
看 RabbitMQ 队列积压和消费者数 rabbitmqctl list_queues name messages consumers 第 27 章 27.3
处理失败的消息转进死信队列 建队列时在 Arguments 里加 x-dead-letter-exchange 第 27 章 27.4
建 Kafka 主题 kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders --partitions 3 第 28 章 28.3
看 Kafka 消费者组的积压 kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group g1 第 28 章 28.3
让 Kafka 消费者组从头重新消费 kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group g1 --topic orders --reset-offsets --to-earliest --execute,组内消费者先全部停掉 第 28 章 28.3
我想…… 命令或操作 详见
改文件权限 chmod 750 deploy.sh 第 29 章 29.3
看磁盘还剩多少、目录占多少 df -h,du -sh /var/log 第 29 章 29.3
看某个服务的日志 journalctl -u nginx -n 50 第 29 章 29.3
每天凌晨跑一次备份 crontab -e,加一行 30 3 * * * /home/deploy/bin/backup.sh 第 29 章 29.3
防火墙放行网站端口 sudo ufw allow 80,443/tcp 第 29 章 29.3
把程序做成开机自启的服务 sudo systemctl daemon-reload,再 sudo systemctl enable --now myapp 第 30 章 30.4
发版后重启服务 sudo systemctl restart <服务> 第 30 章 30.3
服务起不来,看状态和日志 systemctl status <服务>,journalctl -u <服务> -f 第 30 章 30.3
用 pm2 管 Node 程序并开机自启 pm2 start server.js --name web,再 pm2 startup 然后 pm2 save 第 30 章 30.3
启动报端口被占用,找出占用的进程 sudo lsof -i :8080;PowerShell:netstat -ano | findstr :8080 第 31 章 31.2
确认是自己的程序后结束它,释放端口 kill <PID>;PowerShell:Stop-Process -Id <PID> 第 31 章 31.2
连不上服务,先测端口通不通 nc -zv -w 3 <主机> <端口>;PowerShell:Test-NetConnection <主机> -Port <端口> 第 31 章 31.3
磁盘满了,找最大的目录 du -xh --max-depth=1 <目录> | sort -h 第 31 章 31.5
找出最占内存的进程 ps aux --sort=-%mem | head;PowerShell:Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Id,ProcessName,WorkingSet64 第 31 章 31.6