为什么世界 95% 的服务器都是 Linux
这是 Linux 系列的第 1 篇。系列目标:把 Linux 学到能"住下来"——不管是 VPS、Docker、WSL、还是树莓派,打开终端就有家的感觉。 完整路线图见仓库
docs/linux-series-plan.md(待补)。
0. 先看一个数字
W3Techs 的最新统计:
互联网公网服务器 OS 占比:
┌─────────────────────────────────┐
│ Linux ████████████ 96.4% │
│ Windows █ 1.9% │
│ FreeBSD ▏ 0.4% │
│ Other ▏ 1.3% │
└─────────────────────────────────┘
你今天刷的每一个网页,访问的每一个 API,下载的每一个包,背后几乎肯定是一台 Linux 在干活。
更有意思的对比:
- 桌面:Windows 70% / macOS 20% / Linux 4%
- 手机:Android 70%(Linux kernel)/ iOS 30%(XNU,类 Unix)
- 服务器:Linux 96%
- 超级计算机 TOP 500:Linux 100%(连续 9 年)
- 航天器、登月车、空间站:基本都跑某种 Linux 变体
桌面输得很惨的 Linux,在你看不见的所有地方都赢了。这篇就讲:为什么。
1. Linux 的来历,用 5 分钟串完
故事起源于一封邮件。1991 年 8 月,芬兰赫尔辛基大学,21 岁的 Linus Torvalds 在 comp.os.minix 这个新闻组发了帖子:
Hello everybody out there using minix — I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
中文意思:"我在做一个免费的操作系统,就是个爱好,不会像 GNU 那样大那么专业"。
这封"自谦"的邮件后来被印在无数 T 恤上。三十几年过去——
1969 Bell Labs · Ken Thompson + Dennis Ritchie 写出 Unix
↓ Unix 商业化、分裂成 BSD / System V / AIX / HP-UX / Solaris……
1983 Richard Stallman 启动 GNU 项目:要写一套"自由"的 Unix
↓ GNU 写出了 gcc / bash / coreutils / emacs,但内核 (Hurd) 难产
1991 Linus 写出 Linux 内核(其实只是个内核)
↓ GNU 的工具 + Linux 内核 = 完整的操作系统,叫 GNU/Linux
1994 Linux 1.0 发布
1996 Apache 跑在 Linux 上,开始统治 Web
2003 Red Hat 上市,Linux 商业化成功
2008 Android 发布(用 Linux 内核)
2016 微软:「Microsoft loves Linux」+ WSL 上线
2025 AI 训练集群、云原生、IoT、车机、空间站,全是 Linux
关键转折点是 Unix 商业化后陷入版权战争——AT&T / SCO / IBM 这帮公司各自分叉、互相起诉,把 Unix 撕成了几十块互不兼容的小生态。这时候自由的、开源的、能跑在便宜 x86 PC 上的 Linux 出现了,成本和生态优势直接碾压。
一句话总结:Unix 是地基,GNU 是地板,Linux 是承重墙,社区把它装修成了所有人的家。
2. 服务器为什么选 Linux,不选 Windows
把感性的"它就是好"翻译成 5 个具体维度:
① 稳定性
Linux 服务器正常情况下开机几年不重启。我见过 uptime 显示 1800 多天的机器——五年没动,Web 服务持续在跑。Windows Server?年度 patch、季度重启、月度蓝屏,被各种"驱动签名"和"许可证服务"折腾。
$ uptime
23:14:08 up 1832 days, 4:21, 1 user, load average: 0.08, 0.12, 0.15
② 资源占用
| 指标 | Linux (Alpine) | Linux (Ubuntu Server) | Windows Server 2022 |
|---|---|---|---|
| 最小内存 | 32 MB | 512 MB | 2 GB |
| 磁盘占用 | 5 MB | 1.5 GB | 30 GB+ |
| 进程数 | 几十 | 一百多 | 数百 |
你那台 1G 内存的 VPS 在 Linux 下还能多塞 5 个服务;换 Windows 直接开机即满。
③ 远程管理是一等公民
Linux 从第一天起就假设"管理员根本不会坐在屏幕前"。SSH 是标配,所有运维操作都能脚本化、可重复执行:
ssh user@server "sudo apt update && sudo apt upgrade -y"
Windows 的远程管理至今还在 RDP(图形)和 PowerShell Remoting 之间反复横跳,自动化体验差出几个量级。
④ 一切可编程
Linux 的设计哲学是 "一切皆文件,配置即文本"。
- 改个 IP?编辑
/etc/network/interfaces - 装个服务?写一个
xxx.service文件到/etc/systemd/system/ - 调内核参数?
echo 1 > /proc/sys/net/ipv4/ip_forward
每一件事都是文本操作——可以 diff、可以 commit、可以 ansible、可以"基础设施即代码"。Windows 的注册表 + 各种 MMC 控制台,每一项都是"打开图形界面点一下",自动化路径非常间接。
⑤ 成本与可控
- License:免费、商用免费
- 内核:开源、出 bug 能自己改
- 生态:Docker / Kubernetes / NGINX / PostgreSQL 全是先支持 Linux
只有一件事 Linux 输了:桌面。原因后面会专门讲(Linus 自己最近也认了:「我们桌面没赢,但其他地方都赢了,可以了」)。
3. Linux 的"形状":一个内核,千万个发行版
新手最容易迷的就是 "Ubuntu / CentOS / Alpine / Debian / Arch ……都是 Linux 吗?"
是。它们共享同一个 kernel(Linus 维护的那个),但在外面套了不同的 userspace(包管理器 + 默认软件 + 配置风格 + 社区文化):
┌─────────────────────────────────────────────────┐
│ 各种发行版("装修") │
│ Ubuntu Debian CentOS Alpine Arch NixOS │
├─────────────────────────────────────────────────┤
│ GNU 工具集 + 系统库("家具") │
│ bash / coreutils / glibc / systemd ... │
├─────────────────────────────────────────────────┤
│ Linux 内核("地基与承重墙") │
│ 进程调度 / 内存 / 文件系统 / 网络协议栈 │
├─────────────────────────────────────────────────┤
│ 硬件 │
└─────────────────────────────────────────────────┘
挑发行版就像挑装修风格:
- Ubuntu / Debian:apt 包管理,新手友好,文档最多
- RHEL / CentOS / Rocky / Alma:dnf/yum,企业生产标准
- Alpine:musl libc + apk,几 MB 起,Docker 镜像首选
- Arch / NixOS:滚动更新 / 声明式,给自虐爱好者
你不用纠结:这个系列里大部分操作在任何主流发行版都通用。
顺便说几个"它是 Linux 吗?"
| 系统 | 内核 | userspace | 算 Linux? |
|---|---|---|---|
| Android | Linux | 自家 + Java VM | ✅ 内核是 |
| ChromeOS | Linux | Chromium + 自家 | ✅ |
| macOS | XNU(Mach + BSD) | BSD 系工具 | ❌ 但 POSIX 兼容 |
| iOS | XNU | 自家 | ❌ |
| WSL2 | Linux | Linux 完整 | ✅ 真的是 |
| Docker 容器 | 宿主机的 Linux | 镜像里的 | ✅ |
重要:你的 Mac 不是 Linux,但绝大部分 shell 操作完全通用。这个系列你在 Mac 上跟着敲也没问题——少数 Linux 专有的地方(systemd / /proc / iptables 等)我会标出来。
4. 学 Linux 到底在学什么
如果你以为学 Linux 是背 1000 个命令——错了,那是搜索引擎的工作。
学 Linux 是学一种思维方式:
"小工具 + 文本流 + 组合 + 可观察"
具体说:
- 一切皆文件:硬盘、网卡、socket、进程信息、内核参数——全是文件树里的某个路径,你用
cat / echo / grep就能读写 - 小工具,做一件事,做对:每个命令只解决一类问题(
cut只切列,sort只排序),但用管道串起来能解决任何问题 - 显式优于隐式:所有状态都在文件里,没有"注册表"这种黑箱
- 可观察:机器现在在干什么?
/proc/<pid>给你看进程的一切。top / strace / iotop让你直接窥视内核 - 可脚本化:能 GUI 做的事,shell 一定能做;能用 shell 做的事,一定可以放进 cron / systemd timer 让它自动跑
学会这套,你就能在任何 Linux 上"住下来"——不管是云 VPS、Docker 容器、WSL、还是别人发给你 root 让你帮忙救服务的陌生机器。
5. 这个系列你会学到什么
按章节速览(25 篇):
Ⅰ. 心智模型 (1-5) why-linux / kernel / 一切皆文件 / shell 哲学 / 目录结构
Ⅱ. 日常 shell 工具 (6-10) find/grep / 文本管道 / 重定向 / 进程控制 / rc 配置
Ⅲ. 文件与权限 (11-14) rwx / 链接 inode / 挂载 / 备份同步
Ⅳ. 进程与并发 (15-17) fork/exec / 信号 / systemd
Ⅴ. 网络 (18-20) ip/ss / 防火墙 / SSH 高阶
Ⅵ. 性能与调试 (21-23) observability / 日志 / 内核调优
Ⅶ. 容器与部署 (24-25) 容器原理 / VPS 上手清单
每篇 8-12 分钟读完,全部带可执行命令,复制粘贴就能跟着跑。
6. 现在做一件事
打开你的终端(Mac 的 Terminal.app、Linux 的任何终端模拟器、Windows 的 WSL),敲:
$ uname -a
你会看到类似这样:
# Linux 上
Linux ubuntu-server 5.15.0-92-generic #102-Ubuntu SMP x86_64 GNU/Linux
# Mac 上
Darwin laptop.local 24.6.0 Darwin Kernel Version 24.6.0 ... arm64
逐字段拆开:
Linux/Darwin:内核名ubuntu-server/laptop.local:机器的 hostname5.15.0-92-generic:内核版本号x86_64/arm64:CPU 架构GNU/Linux:用户空间是 GNU 工具集(Mac 上没有这行)
如果你的输出是 Darwin,欢迎——本系列大部分内容你都通用,差异处我会标注 # macOS:。
如果是 Linux 任意发行版,更欢迎——你已经站在了系列的正中央。
下一篇:内核和用户态到底怎么分工——你敲下一条
ls命令,机器内部发生了什么。