第 32 章 · 按方向的可用资源
一句话:按七个方向给出系统学下去的路线:先看哪个、再练哪个、去哪里提问,以及看到一份旧资料时怎么认出它已经过时。 和“深入阅读”的分工:各章末尾的“深入阅读”给的是那个工具的官方文档,查一条命令、一个配置项时去翻;本章跨工具按方向排,给教程、书、练习场、社区和工具清单,想把一个方向整体学扎实时从这里开始。 核对日期:2026-10,表中网址都在这个月在线检查过。
七个方向对应本书第一到第七部分。不必七个都学:先把编辑器与终端、代码管理打牢,再按手上的项目挑后面几个方向。下图是建议的先后顺序:箭头左边的先学;中间三个方向按需挑,互不依赖,只是缓存与队列最好在数据库之后学。
每节的表格四列:资源、类型、适合谁、一句话。类型只有六种:官方文档、书、课程或系列教程、交互练习场、社区或问答、工具清单。没标“付费”的都能免费看;标了“中文版”的,中文页面内容可能比英文滞后,版本以英文原版为准。
32.1 编辑器与终端
Section titled “32.1 编辑器与终端”先看哪个:先用一个下午把 VS Code 的入门视频看完,再花一周跟着 MIT 的 Missing Semester 把 Shell、编辑器和 SSH 那几讲做一遍,之后遇到不认识的命令就丢进 explainshell 拆开看。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| VS Code 入门视频 | 课程或系列教程 | 刚装好 VS Code | 官方的系列短视频,编辑、调试、版本控制、扩展各一集,每集几分钟 |
| The Missing Semester of Your CS Education | 课程或系列教程 | 会写代码但终端用得少 | MIT 开的课,讲 Shell、脚本、编辑器、版本控制、远程机器,每讲带练习题 |
| PowerShell 101 | 书 | Windows 用户 | 微软官方的入门小书,从帮助系统、管道讲到函数和脚本;中文版(机器翻译) |
| The Linux Command Line | 书 | 想系统学 bash | 讲 Linux 命令行和 Shell 脚本的整本书,官方页面提供免费 PDF |
| explainshell | 交互练习场 | 看不懂别人的命令时 | 贴进一整条命令,逐段标出每个参数在 man 页里的解释 |
| ShellCheck | 交互练习场 | 开始写 Shell 脚本 | 在线贴脚本,指出引号、变量、条件判断里的常见错误,也有命令行版本 |
| Unix & Linux Stack Exchange | 社区或问答 | 遇到 Shell 和命令行问题 | 问答社区,搜报错原文常能直接找到答案 |
| awesome-shell | 工具清单 | 想换更好用的命令行工具 | 按用途分类的 Shell 工具和框架清单,第 5 章那些小工具大多能在这里找到同类 |
怎么判断过时:
- PowerShell 资料先看它说的是 5.1 还是 7。程序名是
powershell的是系统自带的 5.1,pwsh才是 7;5.1 里的curl是另一条命令的别名,照旧资料敲会得到完全不同的结果(见第 4 章)。 - VS Code 每月发一个版本,设置项会改名。本书核对的 1.138 里,
typescript.tsdk已标为弃用,换成js/ts.tsdk.path(见第 3 章)。设置里出现灰色删除线、悬停提示 deprecated 的,就是旧名字。 - SSH 教程里生成密钥写
ssh-keygen -t rsa的多半是旧资料,本书一律用-t ed25519(见第 6 章)。OpenSSH 8.8 起默认不再接受用 SHA-1 签名的ssh-rsa,老服务器和老教程在这里最容易对不上。
32.2 代码管理
Section titled “32.2 代码管理”先看哪个:先把 Pro Git 中文版前三章读完,再去 Learn Git Branching 练一小时,然后在 GitHub Skills 里做一遍“提一个 PR”“写第一个 Actions 工作流”两门课。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| Pro Git | 书 | 所有用 Git 的人 | Git 官网上的整本书,前三章是日常够用的部分,第 7 章讲储藏、改写历史、reset、二分查找这些工具;中文版 |
| Learn Git Branching | 交互练习场 | 分支和变基总是搞不清 | 在网页里敲命令,提交图实时变化,从提交讲到变基和远程;中文版 |
| GitHub Skills | 课程或系列教程 | 刚开始用 GitHub | 官方的交互课程,每门课是一个仓库,由机器人一步步检查你的操作,Actions、PR、Pages 都有 |
| Atlassian Git 教程 | 课程或系列教程 | 想理解团队协作流程 | 按主题讲合并与变基、各种分支模型、reset 和 revert 的区别,配图清楚 |
| GitHub Community 讨论区 | 社区或问答 | Actions、PR、账号问题 | GitHub 官方论坛,按产品分类,工作人员会回复 |
| awesome-actions | 工具清单 | 写 CI 工作流 | 常用 Action 和示例工作流的分类清单 |
| pre-commit 钩子列表 | 工具清单 | 给仓库加提交检查 | pre-commit 官方收录的钩子仓库,按语言和用途找现成的检查 |
怎么判断过时:
- 讲切换分支只用
git checkout、讲撤销改动用git checkout -- <文件>的资料写于 2.23 之前,现在分别用git switch和git restore(见第 8 章)。 - 默认分支叫
master的截图多半是 2020 年以前的,GitHub 新仓库默认是main;本地git init没设init.defaultBranch时仍叫master(第 7 章 7.4)。 - Actions 示例里写
actions/checkout@v2、用::set-output往下一步传值的是旧写法,本书核对的是@v7,传值写进$GITHUB_OUTPUT文件(见第 10 章)。 - ESLint 资料里配置文件叫
.eslintrc.json、.eslintrc.js的,是 ESLint 9 之前的写法;现在默认读eslint.config.js(见第 11 章)。
32.3 容器与部署
Section titled “32.3 容器与部署”先看哪个:先跟着 Docker 官方 Get started 把“打镜像、跑容器、用 Compose 起多个服务”走一遍,本机还没装 Docker 的先在 Play with Docker 里试,再读一遍 Dockerfile 最佳实践对照自己的镜像改。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| Docker Get started | 课程或系列教程 | 第一次用 Docker | 官方入门路线:概念、打镜像、多容器应用、持久化数据,每步有可运行的示例 |
| Play with Docker | 交互练习场 | 本机暂时装不了 Docker | 浏览器里开一台带 Docker 的临时机器,用 Docker 账号登录,时间到了自动回收 |
| Dockerfile 最佳实践 | 官方文档 | 已经能写 Dockerfile | 多阶段构建、减少层、选基础镜像、利用缓存,镜像又大又慢时对照着改 |
| Compose 文件参考 | 官方文档 | 写 compose.yaml |
每个顶层字段和服务字段的完整说明,查 depends_on、healthcheck 的写法 |
| The Twelve-Factor App | 书 | 准备把应用部署上线 | 十二条云上应用的写法:配置放环境变量、日志写标准输出、进程无状态;中文版 |
| Docker 社区论坛 | 社区或问答 | 遇到 Docker Desktop、网络、卷的问题 | 官方论坛,按 Desktop、Engine、Compose 分区 |
| awesome-docker | 工具清单 | 想找周边工具 | 镜像分析、安全扫描、监控、开发环境等工具的分类清单 |
怎么判断过时:
- 命令写成带横杠的
docker-compose up的是 v1 时代的资料,v1 早已停止维护,一律改成docker compose up(见第 13 章)。本书核对的是 Compose v5。 - compose 文件第一行写
version: "3.8"的,现在每条命令都会打出the attribute `version` is obsolete警告,删掉那一行即可。 - Linux 上装 Docker 的教程如果还在单独下载
docker-compose二进制,是旧做法;现在从 Docker 官方 apt 源装docker-compose-plugin(见第 12 章)。 - 部署教程里用
nohup或screen把服务挂在后台的,换成第 30 章的 systemd 单元或 Compose 的restart:。
32.4 Web 服务器与 HTTP
Section titled “32.4 Web 服务器与 HTTP”先看哪个:先读 MDN 的 HTTP 概述把请求、响应、状态码、缓存几页读完,再按第 16 章的反向代理配置在本机跑一次 Nginx,用 httpbin 对照着看每个请求头到底发了什么。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| MDN HTTP | 官方文档 | 所有做 Web 的人 | HTTP 的概念、每个首部和状态码的说明,缓存、CORS、Cookie 都有专页;中文版 |
| Nginx 新手指南 | 官方文档 | 第一次配 Nginx | 启停、配置文件结构、静态文件和简单代理,一页读完 |
| NGINX 管理指南 | 官方文档 | 要配负载均衡、缓存、限流 | 按任务组织的长篇指南,比指令参考好查;标了 NGINX Plus 的段落开源版没有 |
| Let’s Encrypt 文档 | 官方文档 | 要给网站上 HTTPS | 证书怎么签发、有效期和续期、速率限制,申请失败时先看这里;中文版 |
| httpbin | 交互练习场 | 调试客户端和代理 | 一个把请求原样回显的服务,/headers、/status/404、/delay/3 之类的路径造各种响应 |
| web.dev Learn | 课程或系列教程 | 关心页面性能 | Google 的系列课程,性能、图片、可访问性各一门,配合第 19 章的开发者工具用 |
| Caddy 社区 | 社区或问答 | 用 Caddy 遇到问题 | 官方论坛,维护者常在,提问时贴上完整的 Caddyfile 和日志 |
| Server Fault | 社区或问答 | Nginx 和服务器配置问题 | 面向运维的问答社区,搜 502、证书、反向代理的报错原文 |
怎么判断过时:
- Nginx 配置里写
listen 443 ssl http2;的是 1.25.1 之前的写法,新版会提示这个参数已弃用,改成单独一行http2 on;。本书核对的是 Nginx 1.30。 - Caddy 资料里用
proxy指令做反向代理的(Caddy 2 叫reverse_proxy),是 Caddy 1 的 Caddyfile,和 Caddy 2 不兼容,整份不要照抄(本书是 Caddy 2.11)。 - curl 发 JSON 还要手写
-H "Content-Type: application/json"的是旧版本习惯,curl 7.82 起直接用--json(见第 18 章)。 - 浏览器开发者工具的菜单项会改名,旧截图里的 Preserve log 在本书核对的版本里叫 Keep log(见第 19 章);对不上时按
Ctrl+Shift+P用英文名搜。
32.5 数据库
Section titled “32.5 数据库”先看哪个:先在 SQLBolt 把基础查询练一遍,再跟着 PostgreSQL 官方教程(用 MySQL 就换成 MySQL 8.4 入门教程)在随书 compose 起的库里建表、联表,之后去 PostgreSQL Exercises 做连接和聚合的题,最后读 Use The Index, Luke 搞懂索引。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| SQLBolt | 交互练习场 | 刚学 SQL | 网页里一节一节写查询,从 SELECT 到 JOIN 和聚合,每节有即时检查的练习 |
| PostgreSQL 官方教程 | 官方文档 | 开始用 PostgreSQL | 官方手册的第一部分,建库、建表、查询、视图、事务,短而完整 |
| MySQL 8.4 入门教程 | 官方文档 | 开始用 MySQL | 官方手册的入门一章:连接、建库建表、查询、批量导入,示例能在随书 MySQL 8.4 里跑 |
| PostgreSQL Exercises | 交互练习场 | 会写简单 SQL 想进阶 | 围绕一个俱乐部订场的库出题,连接、子查询、窗口函数分章练 |
| Use The Index, Luke | 书 | 查询慢、不懂索引 | 一本讲索引和执行计划的在线书,各数据库的例子对照着写 |
| MongoDB University | 课程或系列教程 | 用 MongoDB | 官方课程,增删改查、聚合、索引、数据建模,学完可选考认证(认证付费) |
| CMU 15-445 数据库系统 | 课程或系列教程 | 想懂数据库内部原理 | 卡内基梅隆大学的课,讲存储、索引、查询执行、并发控制、恢复,课程视频公开 |
| Designing Data-Intensive Applications | 书 | 设计多库多服务的系统 | 讲复制、分区、事务、一致性和流处理的取舍;付费;中文版《数据密集型应用系统设计》(第一版) |
| Database Administrators Stack Exchange | 社区或问答 | 遇到性能、锁、备份问题 | 面向数据库管理的问答社区,按 postgresql、mysql、mongodb 标签找 |
怎么判断过时:
- MySQL 资料里建库只写
utf8的,存不了表情符号,现在要写utf8mb4;8.0 起服务端默认就是utf8mb4(见第 22 章)。 - MySQL 建账号写
IDENTIFIED WITH mysql_native_password的是旧资料,MySQL 8.4 默认认证插件是caching_sha2_password,旧插件默认不启用;旧客户端和驱动连不上时要升级它们(本书核对的是 MySQL 8.4)。 - PostgreSQL 教程里普通用户直接在
public模式建表的,在 15 以后会报permission denied for schema public(见第 21 章)。 - MongoDB 资料里用
mongo命令进 shell、用db.collection.update()改文档的是旧写法:旧的mongoshell 在 6.0 移除,现在用mongosh,改字段用updateOne加$set(见第 24 章)。
32.6 缓存与队列
Section titled “32.6 缓存与队列”先看哪个:先在 Redis University 学完 Redis 入门课,再把 RabbitMQ 官方前三个教程用 Python 跑通,要用 Kafka 的再去 Confluent Developer 学 Kafka 入门课,最后读第 26 章的选型表决定用哪个。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| Redis University | 课程或系列教程 | 开始用 Redis | 官方的免费在线课程,从入门到数据结构和常见用法,按主题分门 |
| Redis ACL | 官方文档 | 要给 Redis 分账号 | 用户、权限规则和 ACL SETUSER 的写法,比只设一个 requirepass 细得多 |
| RabbitMQ 教程 | 课程或系列教程 | 第一次用消息队列 | 官方七个教程,从一发一收到路由、主题、发布确认,多种语言各一份代码 |
| Confluent Developer 课程 | 课程或系列教程 | 要用 Kafka | Kafka 入门、Kafka Streams、Schema Registry 等系列视频课,带动手练习 |
| Enterprise Integration Patterns | 书 | 设计消息流转 | 消息系统的经典模式目录:死信、幂等接收者、请求应答,名字和图在业内通用 |
| RabbitMQ 讨论区 | 社区或问答 | 遇到 RabbitMQ 问题 | 官方仓库的讨论区,维护团队在这里答疑,提问前先说明版本 |
| Redis 讨论区 | 社区或问答 | 遇到 Redis 问题 | 官方仓库的讨论区,用法、性能、配置的问题都在这里问 |
怎么判断过时:
- Redis 资料讲安全只有
requirepass一个密码的,是 Redis 6 之前的思路;6 起有 ACL,可以建多个用户、按命令和键名授权,登录写AUTH <用户名> <密码>。本书核对的是 Redis 8。 - Kafka 资料里先起 ZooKeeper、命令带
--zookeeper localhost:2181的,在 Kafka 4.0 上都不能用:4.0 起只支持 KRaft 模式,命令一律写--bootstrap-server(见第 28 章)。 - RabbitMQ 资料讲高可用用“镜像队列”(classic mirrored queue)的,在 RabbitMQ 4 里这个功能已经移除,要复制就用仲裁队列(quorum queue,见第 27 章)。
32.7 Linux 运维
Section titled “32.7 Linux 运维”先看哪个:先在 OverTheWire 的 Bandit 关卡里把文件、权限、管道、SSH 练熟,再照 DigitalOcean 的初始化教程把一台 Ubuntu 服务器从 root 登录做到防火墙开好,同时对照第 29、30 章的命令。
| 资源 | 类型 | 适合谁 | 一句话 |
|---|---|---|---|
| OverTheWire Bandit | 交互练习场 | 刚开始登服务器 | 用 SSH 一关关登录,每关用一两条命令找出下一关的口令,练的正是查文件、权限和管道 |
| Introduction to Linux | 课程或系列教程 | 想系统学 Linux | Linux 基金会的免费课,文件系统、进程、用户权限、网络、Shell 脚本一路讲完 |
| Ubuntu Server 文档 | 官方文档 | 管 Ubuntu 服务器 | 按任务组织的官方指南,软件包、网络、安全、备份都有 |
| DigitalOcean 教程 | 课程或系列教程 | 照步骤做具体任务 | 长期维护的教程库,装 Nginx、配防火墙、设 swap 都有分发行版、分版本的一篇 |
| ArchWiki:systemd | 社区或问答 | 写单元文件、查启动问题 | Arch 社区维护的 wiki,发行版无关地讲清 systemd 的单元、定时器和日志,比手册页好读;中文版 |
| Site Reliability Engineering | 书 | 负责线上服务 | Google 的运维书,监控、告警、事故处理、复盘怎么做,官网免费在线读 |
| Ask Ubuntu | 社区或问答 | Ubuntu 上的具体问题 | 问答社区,搜 apt、网络、启动报错的原文 |
| awesome-sysadmin | 工具清单 | 想找监控、备份、部署工具 | 开源运维工具的分类清单,监控、备份、配置管理分门列出 |
怎么判断过时:
- Ubuntu 资料让你改
/etc/apt/sources.list的,在 24.04 上找不到要改的内容:软件源换成了/etc/apt/sources.list.d/ubuntu.sources(见第 29 章)。加第三方源时用apt-key add的也是旧做法,apt-key已弃用,现在把密钥放进/etc/apt/keyrings/并在源里用signed-by指向它。 - 用
ifconfig、netstat的教程在新装的 Ubuntu 上会提示命令不存在,它们所在的 net-tools 不再默认安装,换成ip addr和ss -ltnp(见第 29、31 章)。 - 用
service <服务> start、往/etc/init.d/放脚本的是 systemd 之前的做法,现在写单元文件、用systemctl(见第 30 章)。
32.8 怎么跟上更新
Section titled “32.8 怎么跟上更新”前言说过,每章题记第三行的“核对版本”是作者核对那一章命令时用的版本和年月。它的意思是:书上的命令在这个版本上跑过或对过官方文档;你手里的版本比它新,绝大多数命令照样能用,个别对不上的,到下表的更新记录里搜那条命令或那个配置项,看是哪个版本改的。
| 工具 | 更新记录 |
|---|---|
| VS Code | 每月更新说明 |
| PowerShell | GitHub Releases |
| Git | 各版本发布说明 |
| GitHub、GitHub Actions | GitHub Changelog |
| Docker Desktop | 发布说明 |
| Docker Compose | GitHub Releases |
| Nginx | CHANGES |
| Caddy | GitHub Releases |
| PostgreSQL | 发布说明 |
| MySQL 8.4 | 发布说明 |
| SQLite | 版本变更 |
| MongoDB | 发布说明 |
| Redis | GitHub Releases |
| RabbitMQ | 版本与支持期 |
| Kafka | 下载页,每个版本附发布说明 |
| Ubuntu 24.04 | 发布说明 |
| systemd | NEWS |
不用每个都追。值得订阅的只有两个:
- GitHub 的 Watch → Custom → Releases。在上表里放在 GitHub 上的项目页点 Watch,只勾 Releases,发新版时会收到通知,不会被议题和 PR 淹没。日常用的工具挑三五个订上就够。
- endoflife.date。按产品列出每个版本的发布日期和支持截止日期,升级前先查一次:服务器上的 Ubuntu、PostgreSQL、Node 版本还在不在支持期,一眼就能看到。
升级大版本前,先读那个版本发布说明里标着 breaking、removed、deprecated 的条目,再对照本书相应章节的“注意事项”,一般就能知道哪几条命令和配置要改。