跳转到内容

第 32 章 · 按方向的可用资源

一句话:按七个方向给出系统学下去的路线:先看哪个、再练哪个、去哪里提问,以及看到一份旧资料时怎么认出它已经过时。 和“深入阅读”的分工:各章末尾的“深入阅读”给的是那个工具的官方文档,查一条命令、一个配置项时去翻;本章跨工具按方向排,给教程、书、练习场、社区和工具清单,想把一个方向整体学扎实时从这里开始。 核对日期:2026-10,表中网址都在这个月在线检查过。

七个方向对应本书第一到第七部分。不必七个都学:先把编辑器与终端、代码管理打牢,再按手上的项目挑后面几个方向。下图是建议的先后顺序:箭头左边的先学;中间三个方向按需挑,互不依赖,只是缓存与队列最好在数据库之后学。

七个方向的学习顺序:编辑器与终端、代码管理、容器与部署依次在前;之后按需学 Web 服务器与 HTTP、数据库、缓存与队列,缓存与队列最好在数据库之后;三者最后都汇到 Linux 运维

每节的表格四列:资源、类型、适合谁、一句话。类型只有六种:官方文档、书、课程或系列教程、交互练习场、社区或问答、工具清单。没标“付费”的都能免费看;标了“中文版”的,中文页面内容可能比英文滞后,版本以英文原版为准。

先看哪个:先用一个下午把 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,老服务器和老教程在这里最容易对不上。

先看哪个:先把 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 章)。

先看哪个:先跟着 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:。

先看哪个:先读 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 用英文名搜。

先看哪个:先在 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() 改文档的是旧写法:旧的 mongo shell 在 6.0 移除,现在用 mongosh,改字段用 updateOne 加 $set(见第 24 章)。

先看哪个:先在 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 章)。

先看哪个:先在 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 章)。

前言说过,每章题记第三行的“核对版本”是作者核对那一章命令时用的版本和年月。它的意思是:书上的命令在这个版本上跑过或对过官方文档;你手里的版本比它新,绝大多数命令照样能用,个别对不上的,到下表的更新记录里搜那条命令或那个配置项,看是哪个版本改的。

工具 更新记录
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 的条目,再对照本书相应章节的“注意事项”,一般就能知道哪几条命令和配置要改。