Linux 入门
前言
- 这篇解决三个问题:Linux 到底是什么(内核和发行版不是一回事)、它是怎么启动起来的、你现在怎么立刻弄到一个能敲命令的 Linux。
- 环境说明:本文所有「实测」输出都在 Ubuntu 26.04.1 LTS(Resolute Raccoon)+ WSL2 上跑出来的,宿主机是 Windows 11 专业版 26H2(
winver里显示「操作系统版本 26300.9711」),WSL 引擎版本 3.0.3.0、Linux 内核 6.18.54.1-microsoft-standard-WSL2,日期 2026-11-03。服务器上的 Debian/Ubuntu 与它同族,命令基本一致;RHEL 系(CentOS/Rocky/AlmaLinux/TencentOS)的差异在「发行版怎么选」那节单独列了表。 - 这里有个容易看错的地方,顺手说清:
wsl --version会打印Windows 版本: 10.0.26300.9711,开头那个10.0是 NT 内核版本号,Windows 10 和 Windows 11 共用,不代表这台是 Windows 10(注册表里的ProductName甚至还写着Windows 10 Pro,那是历史遗留字段)。
学 Linux 到底学什么
原笔记给的三句话方向没错,我把它拆成可执行清单:
| 学什么 | 具体到能做什么 | 熟练标准 |
|---|---|---|
| 常用命令 | 定位文件、看进程、改权限、打包解压、看日志、远程登录 | 不用查资料能把一个服务从「装好」折腾到「跑起来 + 出问题能查日志」 |
| 软件安装 | 会用发行版自带的包管理器(apt / dnf / yum),知道 .deb、.rpm、源码编译、snap/flatpak 各自什么时候用 |
能看懂「这个包为什么装不上」的报错 |
| 服务端架构 | 知道一台服务器上 nginx → 应用进程 → 数据库怎么串起来,端口、防火墙、systemd 服务、日志分别在哪一层 | 拿到一个陌生报错知道往哪一层去查 |
Linux 不是用来「背」的,是用来「试」的。同一个 chmod,你在真系统上把某个用户的目录权限改错、然后发现连不上了,这一下比背十遍都牢。所以本文后面专门讲怎么低成本弄一个可以随时搞坏的 Linux 环境。
什么是操作系统:内核 ≠ 发行版
- 内核(kernel):真正管理 CPU、内存、进程、文件系统、设备驱动的那一层软件。它是操作系统的核心,但光有内核你什么也干不了——没有 shell、没有包管理器、没有编辑器、没有网络配置工具。
- 发行版(distribution,简称 distro):内核 + 一整套配套软件(shell、coreutils、包管理器、systemd、桌面环境、常用工具),由某个组织打包、测试、发布,并负责安全更新。我们平时说「我装的是 Ubuntu」,指的是发行版。
这两层在系统里能直接看出来,实测:
1 | # 内核:由 Linux 那边发布,版本号在这里 |
顺带把两个容易混的说法钉死:
- 「Linux 内核」和「GNU/Linux」:内核只提供系统调用,shell、
ls、gcc、bash这些用户态工具绝大多数来自 GNU 计划,所以严格叫 GNU/Linux 更准确(GNU 的说明)。日常说 Linux 没问题,知道这层关系就行。 - 内核版本和发行版版本毫无关系:
6.18.54是内核版本,26.04是 Ubuntu 的发布日期编号(2026 年 4 月)。同一个 Ubuntu 26.04 里内核会因为安全更新从小版本往上跳,别拿它当「系统新旧」的依据。
常见的操作系统分类
| 场景 | 常见选择 | 说明 |
|---|---|---|
| 桌面 | Windows、macOS、Linux 桌面版(Ubuntu Desktop、Fedora Workstation、deepin、麒麟) | Linux 桌面份额小,但开发者用得多 |
| 服务器 | Linux(Debian/Ubuntu Server、Rocky/AlmaLinux、TencentOS、Huawei Cloud EulerOS 等)、Windows Server、各类 Unix | 云上绝大多数是 Linux |
| 移动端 | Android(内核就是 Linux)、iOS | 手机数量上 Android 占大头 |
| 嵌入式/物联网 | 各种裁剪过的 Linux、FreeRTOS、Zephyr | 路由器、摄像头、车机 |
一个值得记住的事实:Android 的内核就是 Linux,所以「Linux 只有服务器在用」是错的;反过来说,Android 上没有 GNU 用户态那一套,也别把它的操作经验往服务器 Linux 上套。
32 位与 64 位
本质区别是寄存器宽度和地址能表示的数量:
- 32 位:地址 32 位宽,理论能寻址
2^32 = 4 GiB。而且这 4 GiB 还要分一部分给设备映射内存(MMIO),所以老 32 位系统上装 4 GB 内存通常只能看到 3.2–3.5 GB。 - 64 位:地址 64 位宽,理论
2^64。但没有任何实现真的用满 64 位——做满宽地址译码太贵,实际只取其中若干位。
这一台机器的真实上限,lscpu 直接告诉你:
1 | $ lscpu | grep "Address sizes" |
读法:物理地址 46 位 → 最多能编址 2^46 = 64 TiB 内存;虚拟地址 48 位 → 每个进程理论上可用 2^48 = 256 TiB 虚拟地址空间(Linux 默认对半分成用户态 128 TiB + 内核 128 TiB)。
怎么判断自己系统是不是 64 位(三个角度,实测值都列出来):
1 | $ uname -m |
顺带一个容易踩的坑:64 位系统可以装 32 位程序,反过来不行。所以下载软件时一律选 64 位(x86_64 / amd64 / x64 三种写法指的是同一类)。这台机器上 dpkg --print-foreign-architectures 返回空,说明没启用 i386 跨架构支持——真要跑 32 位老程序,得先 dpkg --add-architecture i386 再装对应的库。
Linux 从哪来:五大支柱
1991 年 Linus Torvalds 把内核发出来,能长成今天这个样子,靠的是这五件事:
| 支柱 | 它解决了什么 |
|---|---|
| 基于 Unix 的思想 | 一切皆文件、小工具组合、shell 与程序分离——这套设计范式是 Unix 留下的 |
| 参考 Minix | Minix 是一个教学用的小 Unix,Linus 最初就是在它的启发(和不满)上写的内核 |
| GNU 计划 | 提供了 shell、coreutils、gcc、glibc 等用户态工具,让内核「有用」;GPL 许可证保证这些工具能被自由再分发 |
| POSIX 标准 | 规定了「符合 Unix 的系统该提供哪些接口」,程序才能在不同发行版之间迁移 |
| 互联网 | 内核靠全球协作者开发、靠网络分发源码,这在 1991 年前是不可想象的 |
版本号要看懂:现代 Linux 内核不再用奇偶区分稳定/开发,6.18.54 是「主版本 6、次版本 18、稳定补丁 54」,主版本大约每 2-3 个月出一个。发行版的编号规则各家不同:Ubuntu 的 26.04 是「年.月」,Debian 用 13 这种纯数字加代号,RHEL 系用大版本号。
发行版怎么选(2026 年的现实)
先纠正原笔记里已经过时的部分:CentOS 作为「RHEL 的免费重编译版」已经不存在了。2020 年 12 月 Red Hat 宣布 CentOS 转向 CentOS Stream——它变成 RHEL 的上游(比 RHEL 先动,不再等于 RHEL),CentOS 8 在 2021 年底停更、CentOS 7 在 2024 年 6 月停更。现在要「RHEL 兼容且免费」,实际选择是 Rocky Linux 或 AlmaLinux;云厂商自己的镜像(如 TencentOS Server)也属于这一族。
| 家族 | 代表发行版 | 包管理器 / 包格式 | 谁在用 |
|---|---|---|---|
| Debian 系 | Debian、Ubuntu(含 WSL 版)、麒麟、deepin | apt + .deb |
云上很常见,桌面/开发环境主流 |
| RHEL 系 | RHEL、CentOS Stream、Rocky、AlmaLinux、TencentOS Server、openEuler | dnf/yum + .rpm |
企业、国内云主机镜像 |
| SUSE 系 | openSUSE、SLES | zypper + .rpm |
欧洲企业、SAP 场景 |
| Arch 系 | Arch、Manjaro | pacman |
想要最新软件包的个人用户 |
| 其他 | Alpine(apk,容器基础镜像常用)、Fedora(RHEL 的上游试验田) |
— | — |
选型建议:
- 学习阶段:Ubuntu LTS(本文实测用的就是它),资料最多、
apt最好用,而且 Windows 上一条命令就能跑起来。 - 跟着公司走:公司服务器是 TencentOS/Rocky 就用 dnf 那一套,别只在本地练 Ubuntu 命令,上服务器会一脸懵。
- 容器里:Alpine 体积小但用的是 musl libc,和 glibc 有行为差异,别默认「和 Ubuntu 一样」。
两大阵营的命令差异(这份建议直接收藏,比记单个命令有用):
| 要做的事 | Debian/Ubuntu(apt) | RHEL/Rocky/TencentOS(dnf / yum) |
|---|---|---|
| 更新索引 | apt update |
dnf makecache(dnf update 会顺带升级) |
| 装一个包 | apt install nginx |
dnf install nginx |
| 删包 | apt remove nginx |
dnf remove nginx |
| 升级全部 | apt full-upgrade |
dnf update / dnf upgrade |
| 查已装的包 | dpkg -l / apt list --installed |
rpm -qa / dnf list installed |
| 查文件属于哪个包 | dpkg -S /usr/bin/ls |
rpm -qf /usr/bin/ls |
| 查谁依赖它 | apt rdepends 包名 |
dnf repoquery --reverserequires 包名 |
| 清理缓存 | apt clean |
dnf clean all |
| 防火墙命令 | ufw(Ubuntu 上默认装) |
firewalld / firewall-cmd |
| SELinux | 一般没启用 | 默认开启,权限诡异时先查它 |
| 网卡配置 | /etc/netplan/*.yaml |
/etc/sysconfig/network-scripts/ 或 NetworkManager |
先说清 dnf 和 yum 的关系,不然对着老教程会找不到命令:
yum(Yellowdog Updater, Modified)是 RHEL/CentOS 5-7 时代的包管理器,用 Python 写的。- RHEL 8、CentOS 8 起底层换成了
dnf(Dandified YUM),换掉了 yum 那个又慢又吃内存的依赖求解器。 - 但
yum这个命令没有被删掉:Red Hat 把它保留成 dnf 的兼容入口,所以在 RHEL 8/9、Rocky、AlmaLinux、TencentOS Server 3 上,yum install nginx和dnf install nginx是同一回事,选项也通用(-y、remove、makecache、clean all)。腾讯云文档里也明确写着 TencentOS Server 3 同时支持yum和dnf。 - 真正的分水岭是老系统:RHEL/CentOS 7(以及 TencentOS Server 2.4)只有
yum,敲dnf会提示命令不存在。
所以这张表里的 dnf 列,你可以理解成「dnf,老系统上叫 yum」。本机(Ubuntu)实测两个都没有,判断自己站在哪一边就靠这一条:
1 | $ for c in dnf yum rpm; do printf '%-6s %s |
在 RHEL 8/9、Rocky、AlmaLinux、TencentOS Server 3 上,command -v yum 和 command -v dnf 会同时有结果,而且 ls -l $(command -v yum) 通常显示 yum 是指向 dnf 的软链接——这台 Ubuntu 上没有 RHEL 系环境,这一条是官方文档的说法,不是我实测的。
判断自己站在哪个家族,最快的办法是看两个文件(实测本机结果):
1 | $ ls /etc/debian_version /etc/redhat-release 2>&1 |
这台是 Ubuntu 26.04,所以只有 apt 那一套;apt 版本实测是 apt 3.2.0 (amd64)。
系统启动流程
传统物理机的顺序,五步:
| 阶段 | 干什么 | 关键名词 |
|---|---|---|
| 上电自检 | 固件跑起来,检查 CPU/内存/设备 | BIOS(老)或 UEFI(现在都是它) |
| 找引导程序 | 固件按启动顺序读盘上的引导记录 | MBR(BIOS + 老分区表)/ GPT + ESP 分区(UEFI) |
| 引导加载器 | 显示菜单、加载内核和 initramfs | GRUB(Linux 上最常见) |
| 内核启动 | 解压内核、初始化驱动、挂载 initramfs 里的临时根 | vmlinuz-*、initramfs |
| 第一个用户态进程 | 内核启动 PID 1,由它把所有服务拉起来 | PID 1 = systemd(/sbin/init 是它的符号链接) |
原笔记写的是 BIOS + MBR 那条老路,现在新机器基本是 UEFI + GPT(区别见 Arch Wiki 的 UEFI 条目):MBR 只有 512 字节引导区、最多 4 个主分区、支持不了 2 TB 以上的盘;GPT 用独立分区表 + 备份表,UEFI 直接读 FAT 格式的 ESP 分区里的 .efi 引导文件。概念上还是那五步,只是「引导记录」换成了「ESP 里的引导程序」。
在真系统里能验证到这条链的尾巴——PID 1 到底是什么:
1 | $ ls -l /sbin/init |
也就是说:/sbin/init 这个名字是历史包袱(早期确实是这个程序),现在它只是个指向 systemd 的软链接,PID 1 的一切行为由 systemd 决定。
WSL2 是个例外,别把启动流程硬套上去
我这台是 WSL2:没有 BIOS、没有 MBR/GPT、没有 GRUB——Windows 通过轻量级虚拟机直接拉起内核,再执行一个 /init。内核命令行把这件事写得很清楚:
1 | $ cat /proc/cmdline |
能读出来的信息:
initrd=\initrd.img+WSL_ROOT_INIT=1:由 WSL 自己的 init 接管,再切到发行版的根文件系统。console=hvc0:控制台是虚拟机串口,不是物理 tty。nr_cpus=8:内核只看到 8 个 CPU——这正是我在 WSL 设置里把处理器数限成 8 的结果(nproc实测也是 8)。hv_storvsc/hv_utils:Hyper-V 的驱动,说明底下是虚拟机。
所以「WSL 里为什么看不到 GRUB」「systemd-analyze 为什么只报 userspace 时间」都有了解释:它的启动不是从固件开始的。
启动耗时怎么看
1 | $ systemd-analyze |
物理机上这条还会带 kernel 和 initrd 两段。想知道是哪个服务慢,用 systemd-analyze blame(按耗时排序)和 systemd-analyze critical-chain 服务名(看依赖链)。
运行级别 → systemd target
老 SysV init 用「运行级别 0-6」表示系统状态,/etc/rcN.d/ 下放对应级别的脚本。systemd 用 target 取代它,但为了兼容留了一层映射:
| 旧运行级别 | 对应 target | 含义 |
|---|---|---|
| 0 | poweroff.target |
关机 |
| 1 | rescue.target |
单用户/救援(挂载文件系统) |
| 2 | multi-user.target |
多用户、无图形界面 |
| 3 | multi-user.target |
同上(Debian/Ubuntu 里 2 和 3 本来就等价) |
| 4 | multi-user.target |
保留给自定义 |
| 5 | graphical.target |
多用户 + 图形界面 |
| 6 | reboot.target |
重启 |
原笔记教的查法是 runlevel 或 who -r。实测这两条在 Ubuntu 26.04 上都不好用:
1 | $ runlevel |
原因有两层,都能验证:
runlevel、telinit、last属于 sysvinit-utils,现代 Ubuntu 镜像默认没装(command -v逐个查,结果就是「未安装」)。- systemd 编译时关掉了 utmp 支持——
systemctl --version第二行的特性列表里明确写着-UTMP,/run/utmp这个文件也确实不存在。所有依赖 utmp 的老命令(who -r、last)自然拿不到数据。
正确的查法(实测):
1 | $ systemctl get-default |
改默认启动目标(等价于以前改 inittab 里的运行级别):
1 | # 让下次启动进入「多用户无图形」——服务器上很常用 |
至于「/etc/rc5.d 还在不在」:还在,但只是兼容层。实测这台机器上 /etc/init.d 下有 12 个脚本、/etc/rc5.d 下有 7 个(S01apport、S01chrony、S01console-setup.sh……),systemd 通过 systemd-sysv-generator 把它们包装成临时 unit 来跑。而原笔记提到的 Upstart 配置文件 /etc/init/rc-sysinit.conf 不存在——Upstart 早被 systemd 取代了(Ubuntu 6.10 到 14.10 用过它,之后全面转向 systemd)。
一句话总结:新系统里忘掉 runlevel,用 systemctl get-default / set-default / isolate + target。参考 Arch Wiki 的 systemd 条目 和 systemd.special 手册页。
弄一个能随便折腾的 Linux 环境
三条路,按上手成本从低到高:WSL2 → 虚拟机 → 云服务器。
方式一:Windows 上装 WSL2(最省事,本文实测环境就是这么来的)
WSL2 不是传统虚拟机:微软用一个轻量级 Hyper-V 虚拟机跑真正的 Linux 内核(实测 uname -r = 6.18.54.1-microsoft-standard-WSL2),命令行敲 wsl 就进去,Windows 和 Linux 的文件互相能访问。Ubuntu 官方也把它列为正式安装方式(ubuntu.com/wsl)。
完整流程(管理员 PowerShell):
1 | # 1) 只装 WSL 引擎,先不装发行版 |
几个真实细节,踩过一次就记住了:
Ubuntu和Ubuntu-26.04是两个不同的名字。前者指向「当前最新 LTS」,将来商店更新可能把你的环境换成下一代;后者锁死在 26.04。学习环境建议锁版本,资料才不会突然对不上。- 密码输入时屏幕完全不显示字符,连星号都没有,不是卡住了,盲打完回车即可。
- 首次启动会问你是否参与 Ubuntu 的遥测上报(
platform metrics collection),选n就行;已经选了y也能用ubuntu-report -f send no撤回。 --location只对新建的发行版生效。已经建好的想挪盘,用wsl --manage Ubuntu-26.04 --move D:\wsl\newpath(这个选项在wsl --help里能查到)。- 磁盘实际多大?
D:\wsl\Ubuntu-26.04\ext4.vhdx初始只有 1.39 GB;设置里那个「默认 VHD 大小 1 TB」是上限、稀疏增长,不会真占 1 TB。但 vhdx 只增不减,删了大量文件后要用wsl --manage Ubuntu-26.04 --compact压缩,或--set-sparse true打开自动回收。 - 资源上限写在
C:\Users\你\.wslconfig(图形界面的「Windows 子系统设置」改的就是它),改完要wsl --shutdown才生效。我这台的配置与实测效果:
1 | [wsl2] |
- systemd 在 WSL2 里默认开启(Ubuntu 26.04 实测),这也是为什么能在里面正常用
systemctl:
1 | $ cat /etc/wsl.conf |
- 文件互通:Windows 的盘在 Linux 里挂成
/mnt/c、/mnt/d……(实测/mnt下有c d e f wsl wslg),Linux 家目录从 Windows 侧走\\wsl.localhost\Ubuntu-26.04\home\loong访问。但别把工程放在/mnt/...下面编译:跨系统文件 IO 慢一个数量级,权限位也会失真,学习实验一律放在 Linux 自己的家目录里。 - 官方文档:Install WSL、WSL 配置文件说明、Ubuntu on WSL。
方式二:虚拟机装 Ubuntu 桌面(要完整图形桌面、要练网络/磁盘时才选)
VMware Workstation Pro 已经免费(Broadcom 收购后从 2024 年起个人和商业使用都免费),版本也早过了 17.x,不存在「14 不支持你的 CPU 就退回 12」这种操作。其他选择:
| 方案 | 平台 | 说明 |
|---|---|---|
| VMware Workstation Pro | Windows/Linux | 功能最全,现在免费 |
| Hyper-V | Windows | 系统自带,和 WSL2 共用底层 |
| VirtualBox | 全平台 | 开源,体积小,够用 |
| UTM / Parallels | macOS | Apple Silicon 上要选 ARM 版镜像 |
安装步骤本身没变,值得补的是几个新手必踩的点:
- 主板固件里先把 Intel VT-x / AMD-V 虚拟化打开,否则创建虚拟机时报「不支持 64 位」或启动直接失败。
- 网络选 NAT 就能上网;桥接是让虚拟机拿到局域网独立 IP,练服务器时才需要。
- 分区方案:
/一个分区 + 一个 swap 分区(内存小于 4 GB 时 swap 很重要);纯练手直接「清除整个磁盘」最省心。 - 装完先做两件事:
sudo apt update && sudo apt upgrade;如果分辨率不对或不能复制粘贴,装open-vm-tools-desktop,别再挂 ISO 跑老的vmware-install.pl。 - 快照是虚拟机最大的价值:装好干净系统立刻打一个快照,玩坏了 10 秒回滚。
方式三:一台云服务器
真要练「服务器」而不是「桌面 Linux」,最贴近生产的做法是拿一台云主机 SSH 上去。
安全提醒(很重要):
- 云主机不要拿 root + 密码当唯一登录方式,改成密钥登录并关掉密码登录。
- 不要把服务器密码或私钥写进会提交到 Git 的配置文件。仓库一旦公开,里面藏着 root 密码等于把服务器公开挂出去——密码要轮换,配置改用环境变量或不入库的本地文件。
- 第一次登录先做三件事:
adduser建普通用户、usermod -aG sudo(RHEL 系是wheel)给它提权、ufw allow OpenSSH之后再ufw enable。
第一次进入 Linux 先确认的几件事
拿到任何一个新 Linux(WSL、虚拟机、云主机都一样),先跑这几条,把「我在哪、有什么、谁在管」搞清楚。下面是我这台的真实输出:
1 | # 1) 我在哪个发行版上 |
第 2 条那个「先判断家族」的习惯很值:apt 和 dnf 混着用是新手最常见的翻车点,而 /etc/debian_version、/etc/redhat-release 这两个文件的存在与否,比看发行版花名靠谱得多。
常见坑速查
- 把「内核版本」当「系统版本」:
uname -r的6.18.54是内核,lsb_release -a的26.04才是发行版。 - 把
wsl --version里的10.0.26300.9711读成 Windows 10:10.0是 NT 内核版本号,Win10/Win11 共用;看产品名要用Win32_OperatingSystem.Caption,看版本要用DisplayVersion(26H2)+CurrentBuild.UBR(26300.9711)。 - 用
runlevel/who -r看运行级别:新系统里可能没装或没数据(实测如此),改systemctl get-default。 - 照着 CentOS 教程在 Rocky/TencentOS 上敲
yum install:RHEL 9/10 上yum只是dnf的软链接,能用但选项不完全一样;而 Ubuntu 上yum/dnf根本没装。 - 以为 WSL 就是普通虚拟机:它没有 BIOS/GRUB/分区表那一套(
/proc/cmdline里有WSL_ROOT_INIT=1),所以「改 GRUB 进单用户模式」这类操作在 WSL 里不适用。 - 工程放在
/mnt/c下:跨系统 IO 慢、权限位失真,编译和 git 操作都会明显变慢。 - WSL 不设资源上限:默认会吃掉一半内存和全部逻辑 CPU,跑大任务时 Windows 侧会卡;用
.wslconfig限一下,改完wsl --shutdown生效。 - vhdx 越用越大不缩:删文件不会还给 Windows,需要
wsl --manage <发行版> --compact或开稀疏模式。 - 在公开仓库里留服务器 root 密码:这不是「不规范」,这是事故。密码轮换 + 改用环境变量或不入库文件。
- 一上来就装桌面环境练服务器:图形服务会把注意力从「命令、进程、服务、日志」上带走,先纯命令行。
练习
- 按本文的 WSL2 流程装一个 Ubuntu-26.04(锁版本、指定
--location),把wsl --version、lsb_release -a、uname -a、nproc、free -h的输出记下来,作为后续所有文章的「环境基线」。 - 用
command -v逐个检查apt、dnf、yum、rpm、systemctl、runlevel、ufw、firewalld在你机器上是否存在,整理成一张「我的系统有什么」的表——这个动作比背命令有用。 - 把
systemctl get-default换成multi-user.target再换回来,然后解释两件事:为什么它等价于旧系统的「运行级别 5 ↔ 3」,以及它实际改的是哪个文件(提示:ls -l /etc/systemd/system/default.target)。 - 从
/proc/cmdline里找出 3 个能说明「这是虚拟机/WSL」的关键词并解释含义(nr_cpus、console=hvc0、WSL_ROOT_INIT都是好例子)。 - 对照本文的 apt/dnf 表,在 Debian 系机器和 RHEL 系机器上各做一次「查包 → 装包 → 查它装了哪些文件 → 删包」,把两边命令并排记下来。
参考
- Ubuntu 官方:在 Windows 上运行 Ubuntu(WSL)
- 微软:Install WSL
- 微软:WSL 配置文件(.wslconfig)说明
- Ubuntu 官方 WSL 文档
- Arch Wiki:systemd(含与 SysV 运行级别的对照)
- systemd.special 手册页(各类 target 的权威定义)
- Arch Wiki:UEFI(与 BIOS/MBR 的区别)
- CentOS 官方博客:The future is CentOS Stream
- Rocky Linux 官网、AlmaLinux 官网
- Red Hat:Using DNF to manage software(RHEL 9,说明 dnf 与 yum 的兼容关系)
- 腾讯云:TencentOS Server 常见问题(写明 Server 3 同时支持 yum 与 dnf,用户态兼容 CentOS 8 / RHEL 8)
- 腾讯云 TencentOS Server 产品页 与 产品文档
- GNU 计划:GNU/Linux 常见问题
- Linux 内核发布页(kernel.org)