文章

你离开 Linux 这些年,它发生了什么?—— 2016-2025 Linux 开发与部署的十年变革

面向有 CentOS 6 时代经验的开发者,梳理 2016 年以来 Linux 发行版格局、容器化、systemd、内核、包管理、安全等方面的重大变化与革新

你离开 Linux 这些年,它发生了什么?—— 2016-2025 Linux 开发与部署的十年变革

如果你在 2013-2016 年间用过 Linux,熟悉 CentOS 6、yum installservice httpd start、手动编译 Nginx、写 init.d 脚本这些操作,然后离开了 Linux 世界一段时间——当你再回来时,会发现很多东西已经面目全非了。

这篇文章帮你补上这些年的”课”,聚焦在开发和部署层面的变化。


时间线速览

在详细展开之前,先看一张全景时间线:

1
2
3
4
5
6
7
8
9
10
11
12
13
2013 ── Docker 发布,容器革命开始
2014 ── systemd 成为主流 init 系统(CentOS 7)
2015 ── Let's Encrypt 发布,HTTPS 免费普及
2016 ── CentOS 7 成为主流 │ Snap 包格式发布
2017 ── Kubernetes 赢得容器编排之战
2018 ── GitHub 被微软收购 │ Flatpak 成熟
2019 ── CentOS 8 发布 │ WSL 2 发布 │ Podman 崛起
2020 ── CentOS 8 宣布停止维护(炸裂消息)│ eBPF 进入主流
2021 ── Rocky Linux / AlmaLinux 诞生 │ CentOS Stream 转型
2022 ── Ubuntu 22.04 LTS │ 内核 5.x → 6.x
2023 ── Fedora/RHEL 源码政策争议 │ 不可变发行版兴起
2024 ── systemd 功能持续扩展 │ AI 开发环境 Linux 化
2025 ── Linux 6.x 内核成熟 │ 容器原生开发成为标配

一、发行版格局大洗牌

1.1 CentOS 的”暴死”—— 最大的震动

这是你离开后发生的最大事件。如果你只看一段,看这段。

你记忆中的 CentOS:

1
2
3
4
5
6
7
RHEL(红帽企业版,收费)
  │
  └── CentOS(社区重新编译,免费)
       完全兼容 RHEL,生产环境的首选
       CentOS 6 支持到 2020
       CentOS 7 支持到 2024
       CentOS 8 支持到 2029(原计划)

2020 年 12 月,Red Hat 宣布:CentOS 8 提前终止,2021 年底停止更新。

这意味着 CentOS 不再是 RHEL 的”免费下游复制品”,而是变成了 CentOS Stream——一个 RHEL 的”上游测试版”。

1
2
3
4
5
以前:RHEL → CentOS(稳定的免费复制品)
现在:CentOS Stream → RHEL(CentOS 变成了试验田)

以前:RHEL 先发布,CentOS 跟着出稳定版
现在:CentOS Stream 先跑,然后 RHEL 从中挑选稳定内容

社区反应:愤怒 + 行动

几乎一夜之间,两个替代品诞生:

替代品发起者定位
Rocky LinuxCentOS 创始人 Gregory KurtzerCentOS 的精神续作,1:1 兼容 RHEL
AlmaLinuxCloudLinux 公司同样 1:1 兼容 RHEL,企业背书

现状(2025 年):

1
2
3
4
5
6
7
生产服务器 Linux 选择:

企业客户(有预算)  → RHEL(付费,有官方支持)
企业客户(省钱)    → Rocky Linux / AlmaLinux(免费,兼容 RHEL)
云服务器/个人       → Ubuntu Server(最流行)
容器/云原生         → Alpine Linux / Debian(轻量)
前沿技术尝鲜        → Fedora

1.2 Ubuntu 成为”默认 Linux”

在你离开的这些年,Ubuntu 在服务器领域的地位不断上升:

  • 云平台默认镜像:AWS、Azure、GCP 的默认 Linux 镜像都是 Ubuntu
  • Docker Hub 基础镜像:大量容器以 Ubuntu 为基础
  • WSL 默认发行版:Windows 上跑 Linux,默认就是 Ubuntu
  • AI/ML 生态:NVIDIA 驱动、CUDA、PyTorch 等首先支持 Ubuntu
1
2
3
4
5
6
7
8
9
10
11
12
2016 年生产服务器:
CentOS ████████████████████  约 50%
Ubuntu ████████████          约 30%
Debian ██████                约 15%
其他   ██                    约 5%

2025 年生产服务器:
Ubuntu ████████████████████  约 45%
RHEL系 ████████████          约 30%
Debian █████                 约 12%
Alpine ████                  约 8%(容器场景)
其他   ██                    约 5%

1.3 LTS 版本节奏

现在选 Linux 发行版,LTS(Long Term Support)版本是关键:

1
2
3
4
5
6
7
8
Ubuntu LTS(每 2 年一个,支持 5 年 + ESM 扩展 5 年):
  16.04 → 18.04 → 20.04 → 22.04 → 24.04

RHEL(支持 10 年):
  RHEL 7 (2014-2024) → RHEL 8 (2019-2029) → RHEL 9 (2022-2032)

Debian(支持约 5 年):
  9 Stretch → 10 Buster → 11 Bullseye → 12 Bookworm

二、systemd —— 你记忆中的 init 脚本已经消亡

2.1 从 SysVinit 到 systemd

这是你会感受最直接的变化。CentOS 6 用的是 SysVinit/etc/init.d/ 脚本),CentOS 7 开始全面切换到 systemd

1
2
3
4
5
6
7
8
9
10
11
12
13
你记忆中的操作(CentOS 6):
  service httpd start
  service httpd stop
  chkconfig httpd on
  /etc/init.d/nginx restart
  编写 init.d 启动脚本(几十行 shell)

现在的操作(systemd):
  systemctl start httpd
  systemctl stop httpd
  systemctl enable httpd
  systemctl restart nginx
  编写 service 文件(十几行 INI 格式)

2.2 systemd 服务文件:简洁得多

以前写一个 init.d 脚本可能要 50-100 行 shell,现在:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server --port 8080
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

就这么多。相比以前的 init.d 脚本,不需要手动处理 PID 文件、start/stop/status 分支、后台化等逻辑——systemd 全包了。

2.3 systemd 不只是启动服务

systemd 已经变成了一个庞大的系统管理套件:

1
2
3
4
5
6
7
8
9
10
11
systemd 家族(2025 年):

systemctl       ── 服务管理(你最常用的)
journalctl      ── 日志查看(取代了翻 /var/log 文件)
systemd-networkd ── 网络管理
systemd-resolved ── DNS 解析
systemd-timesyncd── 时间同步(取代 ntpd)
systemd-boot     ── 引导管理
loginctl        ── 登录会话管理
timedatectl     ── 时区时间管理
hostnamectl     ── 主机名管理

2.4 journalctl:日志查看革命

以前查日志:tail -f /var/log/messages,在各种日志文件里翻找。

现在:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看某个服务的日志
journalctl -u nginx

# 实时跟踪日志
journalctl -u myapp -f

# 看今天的日志
journalctl --since today

# 看最近 5 分钟的错误日志
journalctl --since "5 min ago" -p err

# 看上次启动以来的内核日志
journalctl -b -k

日志存储在二进制格式的 journal 中,支持结构化查询、自动轮转、按服务/时间/级别过滤。


三、容器化革命 —— 部署方式的根本改变

3.1 从”装软件”到”跑容器”

你记忆中的部署方式:

1
2
3
4
5
6
7
1. 买/租一台服务器
2. 装 CentOS 6
3. yum install 各种依赖
4. 编译安装 Nginx / PHP / MySQL
5. 配置各种 conf 文件
6. 写 init.d 启动脚本
7. 祈祷下次迁移时能复现这个环境

现在的部署方式:

1
2
3
4
5
6
7
8
# Dockerfile - 把整个环境打包
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
1
2
3
4
5
6
7
8
# 一条命令构建
docker build -t myapp .

# 一条命令运行
docker run -d -p 3000:3000 myapp

# 在任何一台装了 Docker 的机器上都能跑
# 不再有"在我机器上能跑"的问题

3.2 Docker:从新玩意到基础设施

1
2
3
4
5
6
7
8
9
10
Docker 发展线:

2013 ── Docker 诞生(基于 Linux 内核的 cgroups + namespace)
2014 ── Docker Hub 上线(容器镜像的"应用商店")
2015 ── Docker Compose(多容器编排)
2016 ── Docker 成为生产环境标配
2017 ── Kubernetes 赢得编排战争
2019 ── Podman 出现(无守护进程的替代品)
2020 ── Docker Desktop 开始收费(企业用户)
2025 ── 容器已是部署的"水和电",不再是新闻

3.3 Docker 背后的 Linux 技术

Docker 并不是魔法,它利用的全是 Linux 内核特性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Docker 容器 = Linux 内核功能的组合:

┌─────────────────────────────────────┐
│  Namespace(命名空间)—— 隔离       │
│  ├── PID namespace  → 进程隔离     │
│  ├── NET namespace  → 网络隔离     │
│  ├── MNT namespace  → 文件系统隔离 │
│  ├── UTS namespace  → 主机名隔离   │
│  └── USER namespace → 用户隔离     │
│                                     │
│  cgroups(控制组)—— 资源限制       │
│  ├── CPU 限制                      │
│  ├── 内存限制                      │
│  └── IO 限制                       │
│                                     │
│  UnionFS(联合文件系统)—— 分层镜像 │
│  └── OverlayFS(现在的默认)       │
└─────────────────────────────────────┘

容器 ≠ 虚拟机!
容器共享宿主机内核,没有额外的操作系统开销
启动时间:秒级(vs 虚拟机的分钟级)

3.4 Docker Compose:多容器编排

一个典型的 Web 应用现在这样部署:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# docker-compose.yml
services:
  web:
    build: .
    ports:
      - "80:3000"
    depends_on:
      - db
      - redis
    environment:
      - DATABASE_URL=postgres://db:5432/myapp

  db:
    image: postgres:16
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:7-alpine

volumes:
  pgdata:
1
2
3
4
5
# 一条命令启动整个应用栈
docker compose up -d

# 以前你需要:分别安装 Node/Postgres/Redis,
# 配置各自的端口、用户、权限、启动脚本...

3.5 Kubernetes (K8s):大规模容器编排

当你有几十、几百个容器需要管理时,就需要 Kubernetes:

1
2
3
4
5
6
7
8
9
Kubernetes 解决的问题:

以前(手动管理):                现在(K8s 自动管理):
├── 这个容器放哪台机器?          ├── K8s 自动调度到合适的机器
├── 挂了怎么办?                  ├── 自动重启、自动迁移
├── 流量大了怎么扩容?            ├── 自动水平扩展(多跑几个副本)
├── 怎么做滚动更新?              ├── 零停机滚动部署
├── 服务之间怎么发现?            ├── 内置服务发现和负载均衡
└── 配置和密钥怎么管理?          └── ConfigMap 和 Secret

不过 K8s 学习曲线陡峭,小团队通常不需要。Docker Compose 或云平台的容器服务(如 AWS ECS、阿里云 ACK)就够了。

3.6 Podman:Docker 的”继任者”?

RHEL 系现在默认推荐 Podman 而非 Docker:

1
2
3
4
5
6
7
8
9
10
Docker:
  需要一个后台守护进程(dockerd)以 root 运行
  所有容器操作都通过这个守护进程
  安全隐患:守护进程崩了,所有容器都受影响

Podman:
  无守护进程(daemonless)
  每个容器是独立进程
  可以完全以普通用户运行(rootless)
  命令兼容 Docker:alias docker=podman 就行

四、包管理的进化

4.1 你熟悉的 yum 变成了 dnf

1
2
3
4
5
6
7
8
CentOS 6/7:yum install nginx
CentOS 8+:  dnf install nginx   ← yum 的下一代

dnf 的改进:
├── 依赖解析更快更准确
├── 模块化(同一个包可以选不同版本流)
├── 性能大幅提升
└── yum 命令仍然可用(实际是 dnf 的别名)

4.2 EPEL 依然在,但你可能不需要了

以前装一些软件要先加 EPEL 源。现在容器化之后,大多数软件直接用 Docker 镜像:

1
2
3
4
5
6
7
8
9
10
以前:
  yum install epel-release
  yum install nginx php redis nodejs ...
  各种版本冲突和依赖地狱

现在:
  docker run nginx
  docker run redis
  docker run node
  每个服务在自己的容器里,互不干扰

4.3 通用包格式:Snap / Flatpak / AppImage

传统包管理的问题是:不同发行版格式不同(.rpm vs .deb),依赖关系复杂。新的通用格式试图解决这个问题:

1
2
3
4
5
6
7
8
9
10
Snap(Canonical/Ubuntu 主推):
  snap install code          # 装 VS Code
  snap install node --channel=20  # 指定版本

Flatpak(Red Hat/Fedora 主推):
  flatpak install firefox    # 沙盒化运行

AppImage(社区方案):
  chmod +x app.AppImage      # 下载即用,无需安装
  ./app.AppImage

在服务器端这些不太常用(服务器主要用容器),但在桌面 Linux 上已经很流行。


五、开发工具链的变化

5.1 编译器和语言运行时

1
2
3
4
5
6
7
8
9
你那个时代            →     现在

GCC 4.x               →     GCC 13/14(C++23 支持)
Python 2.7(默认)     →     Python 2 已死(2020 年终止),Python 3.11/3.12
PHP 5.x                →     PHP 8.3(性能翻倍,JIT 编译)
Java 7/8               →     Java 21 LTS(虚拟线程、模式匹配)
Node.js 4/6            →     Node.js 20/22 LTS(ESM 模块、内置测试)
没有 Rust              →     Rust 成为系统编程新贵
没有 Go 生态           →     Go 成为云原生基础设施的标准语言

5.2 Python 2 的死亡

这是你可能需要适应的最大变化之一:

1
2
3
4
5
6
7
8
9
10
11
12
2020 年 1 月 1 日:Python 2 正式终止支持

影响:
├── CentOS 6/7 默认 python 指向 Python 2 → 现在 python3 是标准
├── 很多老脚本需要迁移到 Python 3
├── pip → pip3,print 语句 → print() 函数
└── 新系统上可能根本没有 Python 2

现代 Python 版本管理:
  pyenv install 3.12.0     # 用 pyenv 管理多版本
  python3 -m venv myenv    # 用内置的 venv(不再需要 virtualenv)
  pip install poetry        # 或用 Poetry 管理项目

5.3 版本管理工具普及

以前经常要手动编译安装特定版本的语言运行时,现在:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Node.js 版本管理
nvm install 20       # Node Version Manager
fnm install 20       # 更快的替代品(Rust 写的)

# Python 版本管理
pyenv install 3.12

# Java 版本管理
sdkman install java 21.0.2-tem

# 通用版本管理(一个工具管所有)
mise install node@20 python@3.12 java@21
# mise(前身是 rtx/asdf 的替代)正在成为新标准

5.4 Git 的绝对统治

1
2
3
4
5
6
7
8
9
2013 年:SVN 还有不少企业在用
2025 年:Git 统一了版本控制领域

新增概念:
├── GitHub Actions / GitLab CI  → 代码推送自动触发构建部署
├── Git LFS                     → 大文件管理
├── Monorepo                    → 单仓库管理多项目
├── Conventional Commits        → 提交信息规范化
└── GitHub Codespaces           → 云端开发环境

六、网络和安全的变化

6.1 HTTPS 成为默认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2015 年之前:
  HTTPS 证书要花钱买(几百到几千元/年)
  大部分网站是 HTTP

2015 年之后:
  Let's Encrypt 提供免费 HTTPS 证书
  Certbot 自动申请和续期证书
  各大浏览器开始标记 HTTP 为"不安全"

现在的操作:
  # 一条命令搞定 HTTPS
  certbot --nginx -d example.com

  # 或者用 Caddy(自动 HTTPS 的 Web 服务器)
  # Caddy 会自动申请和续期证书,零配置

6.2 防火墙:iptables → nftables / firewalld

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
你记忆中:
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  service iptables save

现在:
  # firewalld(CentOS 7+ 默认,更友好)
  firewall-cmd --add-service=http --permanent
  firewall-cmd --add-service=https --permanent
  firewall-cmd --reload

  # 或 ufw(Ubuntu 默认,更简单)
  ufw allow 80/tcp
  ufw allow 443/tcp
  ufw enable

底层变化:
  iptables → nftables(内核层面的替代)
  nftables 性能更好、语法更统一
  但大多数人通过 firewalld/ufw 操作,不直接碰底层

6.3 SSH 安全加强

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
变化:
├── DSA 密钥已废弃 → 用 Ed25519(更安全、更短)
│     ssh-keygen -t ed25519
├── 密码登录越来越不推荐 → 密钥登录成为标配
├── SSH 跳板机/堡垒机 → 企业标配
└── SSH 证书认证 → 大规模环境替代密钥分发

新实践:
  # 生成现代 SSH 密钥
  ssh-keygen -t ed25519 -C "your@email.com"

  # SSH 配置简化(~/.ssh/config)
  Host myserver
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/id_ed25519

6.4 SELinux 你可能关过,但现在不该关了

1
2
3
4
5
6
7
8
9
10
2013 年的常见操作:
  setenforce 0                    # 临时关闭
  sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久关闭
  # "SELinux 太烦了,直接关掉"

2025 年的态度:
  不要关闭 SELinux!容器安全依赖它。
  学会查看和处理 SELinux 拒绝日志:
  ausearch -m avc --start today
  sealert -a /var/log/audit/audit.log

七、文件系统和存储

7.1 默认文件系统的变迁

1
2
3
4
5
6
7
8
9
CentOS 6 默认:ext4
CentOS 7 默认:XFS(更适合大文件和高并发)
CentOS 8+/RHEL 9:XFS
Ubuntu:ext4(但越来越多人用 Btrfs)

新选手:
├── Btrfs → 快照、压缩、子卷,适合桌面和开发环境
├── ZFS  → 企业级存储,数据完整性极佳
└── bcachefs → 最新内核中的新秀,目标是结合以上所有优点

7.2 LVM + 薄置备

1
2
3
4
5
6
7
以前:
  分区时就要规划好大小,改起来很麻烦

现在(LVM 薄置备 + XFS):
  可以动态扩展分区大小
  支持快照用于备份
  大多数云平台已经帮你配好了

八、Linux 内核的重大进化

8.1 内核版本跳跃

1
2
3
4
5
6
7
8
9
10
11
你那个时代:
  CentOS 6 → 内核 2.6.32
  CentOS 7 → 内核 3.10

现在:
  内核 6.x(2025 年最新主线)

重要里程碑:
  3.x → 4.0 (2015):OverlayFS 合入(Docker 的基石)
  4.x → 5.0 (2019):io_uring、WireGuard
  5.x → 6.0 (2022):Rust 代码进入内核

8.2 值得关注的内核新特性

eBPF —— 内核中的”可编程沙盒”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
eBPF 是什么:
  允许你在内核中安全地运行自定义程序
  不需要修改内核代码或加载内核模块

用途:
├── 网络监控和过滤(替代 iptables 的高性能方案)
├── 性能分析(观测系统调用、函数调用耗时)
├── 安全策略(运行时检测恶意行为)
└── 容器网络(Cilium 项目,K8s 网络层基于 eBPF)

工具:
  bpftrace   → eBPF 的"awk",一行命令观测内核
  bcc        → eBPF 工具集
  Cilium     → 基于 eBPF 的容器网络

io_uring —— 异步 IO 革命

1
2
3
4
5
6
7
8
以前:
  Linux 的高性能 IO 用 epoll(Go、Nginx 等都用它)
  但 epoll 只能处理网络 IO,不能处理磁盘 IO

现在:
  io_uring 统一了网络和磁盘的异步 IO
  性能比 epoll 还好
  新版数据库和存储引擎都在适配 io_uring

cgroups v2 —— 容器资源管理升级

1
2
3
4
5
6
7
8
9
cgroups v1(你那个时代):
  多个独立的层级树,管理混乱
  CPU、内存、IO 各自独立控制

cgroups v2(现在的默认):
  统一的层级树
  更精细的资源控制
  更好的容器支持
  systemd 和 Docker/Podman 都已默认使用 v2

九、CI/CD 与 DevOps:部署流程的革命

9.1 从”手动部署”到”自动流水线”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
你记忆中的部署:
  1. SSH 登录服务器
  2. cd /var/www/html
  3. git pull
  4. 重启服务
  5. 祈祷没出问题

现在的部署(CI/CD 流水线):
  1. 开发者 git push 代码
  2. 自动触发 CI 流水线:
     ├── 自动运行测试
     ├── 自动构建 Docker 镜像
     ├── 自动推送镜像到仓库
     └── 自动部署到服务器/K8s
  3. 失败则自动回滚
  4. 全程不需要 SSH 登录服务器

9.2 主流 CI/CD 工具

1
2
3
4
GitHub Actions   ── GitHub 原生,最流行
GitLab CI/CD     ── GitLab 原生,企业用得多
Jenkins          ── 老牌工具,依然活跃
ArgoCD           ── K8s 原生的 GitOps 工具

一个典型的 GitHub Actions 流水线:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build Docker image
        run: docker build -t myapp .

      - name: Push to registry
        run: docker push registry.example.com/myapp

      - name: Deploy to server
        run: ssh deploy@server "docker pull && docker compose up -d"

代码推送到 main 分支 → 自动构建 → 自动部署。整个过程无需人工介入。

9.3 Infrastructure as Code(基础设施即代码)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
以前:
  手动在控制台点点点创建服务器、配置网络、安全组...
  下次复现?全凭记忆和文档

现在:
  Terraform → 用代码定义云基础设施
  Ansible   → 用代码批量配置服务器
  Pulumi    → 用编程语言(而非 DSL)定义基础设施

示例(Terraform 创建一台阿里云服务器):
  resource "alicloud_instance" "web" {
    instance_type = "ecs.t6-c1m1.large"
    image_id      = "ubuntu_22_04"
    ...
  }
  # terraform apply → 自动创建服务器
  # 环境完全可复现

十、云原生与微服务

10.1 从”一台服务器跑所有东西”到”微服务”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2013 年的典型架构(单体):
┌─────────────────────────┐
│  一台 CentOS 服务器       │
│  ├── Nginx               │
│  ├── PHP/Java 应用        │
│  ├── MySQL               │
│  ├── Redis               │
│  └── 定时任务 (crontab)   │
└─────────────────────────┘
  所有东西跑在一台机器上

2025 年的典型架构(微服务 / 容器化):
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│API 网│ │用户  │ │订单  │ │支付  │
│关    │ │服务  │ │服务  │ │服务  │
│Nginx │ │Node  │ │Java  │ │Go    │
└──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘
   │        │        │        │
   └────────┴────┬───┴────────┘
                 │
          ┌──────┴──────┐
          │ Kubernetes  │
          │ 容器编排     │
          └─────────────┘
  每个服务独立容器,独立部署,独立扩容

10.2 云原生关键组件

1
2
3
4
5
6
7
服务网格    → Istio / Linkerd(服务间通信管理)
API 网关    → Kong / APISIX(请求路由和鉴权)
配置中心    → Consul / Nacos(配置统一管理)
消息队列    → Kafka / RabbitMQ / NATS(异步通信)
监控        → Prometheus + Grafana(替代 Nagios/Zabbix)
日志        → ELK Stack / Loki(集中日志管理)
链路追踪    → Jaeger / Zipkin(分布式调用链跟踪)

十一、WSL —— 在 Windows 上跑 Linux

如果你现在在 Windows 上开发,WSL (Windows Subsystem for Linux) 是一个巨大的变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
以前在 Windows 上用 Linux:
├── 装虚拟机(VMware/VirtualBox)—— 重,吃资源
├── 装双系统 —— 切换麻烦
└── 用 Cygwin/MinGW —— 兼容性差

现在:
  wsl --install        # 一条命令安装 WSL 2 + Ubuntu
  wsl                  # 进入 Linux 环境
  code .               # 在 VS Code 中打开(无缝集成)

WSL 2 的本质:
  跑在 Hyper-V 轻量虚拟机里的真正 Linux 内核
  文件系统互通,网络互通
  Docker Desktop 可以直接跑在 WSL 2 里
  性能接近原生 Linux

十二、现代 Linux 服务器搭建速查

把以上所有变化整合成一个对照表,帮你快速对应新旧概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
你记忆中(CentOS 6 时代)          →  现在(2025 年)

─── 系统管理 ───
service httpd start              →  systemctl start httpd
chkconfig httpd on               →  systemctl enable httpd
/var/log/messages                →  journalctl
init.d 脚本(80 行 shell)        →  systemd service 文件(15 行)
iptables                         →  firewalld / ufw / nftables

─── 包管理 ───
yum install                      →  dnf install / apt install
rpm -qa                          →  dnf list installed
手动编译安装                      →  Docker 镜像 / 容器

─── 部署 ───
FTP/SCP 上传代码                  →  Git push + CI/CD 自动部署
手动装依赖                        →  Dockerfile 打包环境
单台服务器                        →  容器集群 / 云服务
crontab 定时任务                  →  systemd timer / K8s CronJob

─── 开发 ───
Python 2.7                       →  Python 3.12
vim + screen                     →  VS Code + tmux(或 SSH 远程开发)
SVN                              →  Git + GitHub/GitLab
手动测试                         →  CI 自动化测试

─── 安全 ───
HTTP                             →  HTTPS(Let's Encrypt 免费证书)
密码登录 SSH                     →  Ed25519 密钥 + 禁用密码登录
关闭 SELinux                     →  保持 SELinux 开启

─── 监控 ───
top / free / df                  →  htop / btop / glances
Nagios / Cacti                   →  Prometheus + Grafana
tail -f /var/log/xxx             →  journalctl -f -u xxx

十三、学习路径建议

如果你想快速跟上这些年的变化,建议按以下顺序学习:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
第一周:基础回血
├── 装一台 Ubuntu 24.04(或 Rocky Linux 9)
├── 熟悉 systemd(systemctl / journalctl)
├── 了解 firewalld/ufw
└── 适应 Python 3

第二周:容器入门
├── 安装 Docker
├── 学会 Dockerfile 编写
├── docker compose 多容器编排
└── 把一个项目容器化

第三周:CI/CD
├── 用 GitHub Actions 搭建自动构建
├── 了解 Git 分支策略(Git Flow / Trunk-based)
└── 实现代码推送自动部署

第四周:进阶
├── 了解 Kubernetes 基本概念
├── 学习 Terraform/Ansible
├── 了解 Prometheus + Grafana 监控
└── 探索 eBPF 和现代内核特性

总结

用一句话概括 2016-2025 年 Linux 开发部署领域的变化:

从”手工打造单台服务器”到”代码定义一切、容器承载一切、流水线自动化一切”。

你那个时代的很多技能(Linux 基础、Shell 编程、网络配置、服务管理)依然有价值——它们是理解现代工具的基础。容器不是魔法,CI/CD 不是黑箱,K8s 不是天书——它们都建立在你已经了解的 Linux 基础之上。

不同的是,现在的趋势是把运维知识编码化——以前记在脑子里的操作步骤,现在写在 Dockerfile、Compose 文件、Terraform 配置和 CI/CD 流水线里。代码可以版本控制、可以复现、可以协作,这就是”基础设施即代码”的核心思想。

欢迎回来。


本文为个人视角的技术趋势总结,不代表全面的行业分析。Linux 生态极其广阔,本文聚焦在与中小型开发团队最相关的变化。如有补充或纠正,欢迎交流。

本文由作者按照 CC BY 4.0 进行授权