目录
-
- 一、先花十秒认清自己在哪台机器上
- 二、文件与目录:两边完全一样
- 三、目录结构:知道东西在哪儿,比会背命令更重要
- 四、文本处理:三剑客与管道
- 五、权限与用户:唯一有用户语义差异的地方
- 六、进程与作业控制
- 七、系统信息与磁盘
- 八、网络:两边差异最大的一节
-
- 8.1 查看网络状态
- 8.2 配静态 IP(最容易翻车的地方)
- 九、软件包管理
- 十、服务与日志:两边完全一致
- 十一、防火墙与强制访问控制:两套完全不同的体系
- 十二、容器与常用组合拳
- 十三、故障排查速查:症状 → 命令
- 十四、一页速查表
- 十五、写在最后
- 参考来源
同样一件事,在 CentOS 上和 Ubuntu 上往往要敲不同的命令。yum 和 apt、firewall-cmd 和 ufw、ifcfg-eth0 和 netplan.yaml——新手最常踩的坑不是命令记不住,而是把一边的东西带到另一边。
这篇文章按"两边通用 / 只有一边有"两条线拆开,把日常真正用得上的命令过一遍,每个都说明它是什么、怎么用、典型场景。

先说版本现状,否则命令对不上号:
| CentOS 7 | 2024-06-30 已停止维护 | 存量机器上还有,但不再有安全补丁,新装机别选 |
| CentOS 8 | 2021-12-31 已停止维护 | 基本淘汰 |
| CentOS Stream 9 / 10 | 持续滚动更新 | CentOS 项目的现役形态;Stream 10 内核 6.12 LTS、Python 3.12、DNF 4.20 |
| Rocky Linux / AlmaLinux | 活跃 | RHEL 1:1 兼容的社区替代,新部署更推荐 |
| Ubuntu 22.04 / 24.04 LTS | 维护中 | 24.04 标准支持到 2029-04 |
| Ubuntu 26.04 LTS | 2026-04-23 发布 | 内核 7.0、Python 3.14 默认,8 月已出 26.04.1 |
一、先花十秒认清自己在哪台机器上
所有后续判断都建立在这一步上。养成习惯:登进任何一台服务器,先跑这三条。
cat /etc/os-release # 发行版名称与版本,两个系统通用
hostnamectl # 主机名、系统版本、内核架构,一次看全
uname -a # 内核版本与硬件架构
| cat /etc/os-release | 读发行版标识文件 | cat /etc/os-release | grep VERSION |
| cat /etc/redhat-release | 只在 CentOS / RHEL 系存在 | CentOS 专有 |
| cat /etc/lsb-release | 只在 Debian / Ubuntu 系存在 | Ubuntu 专有 |
| hostnamectl | 统一管理主机名、时区、locale | hostnamectl set-hostname node-01 |
| uname -a | 内核名与架构 | 判断是 x86_64 还是 aarch64 |
| arch / uname -m | 只看架构 | 装包前先确认 |
看到 ID="centos" 就知道后面要用 dnf/yum,看到 ID="ubuntu" 就用 apt。
二、文件与目录:两边完全一样
这一层没有发行版差异,都是 GNU coreutils。核心就几条:
ls -lah /var/log # 列出全部文件,含隐藏项、大小、时间
cd /etc && pwd # 进入目录并确认当前位置
mkdir -p /opt/app/logs # 递归创建多级目录(-p 是关键,不会因父目录不存在而报错)
cp -a src/ dst/ # 复制整个目录,保留属主/权限/时间(-a 等价于 -dpR)
mv old.txt new.txt # 移动或改名,同一分区上是改元数据,跨分区是复制+删除
rm -rf /tmp/cache # 强制递归删除——执行前务必把路径再读一遍
| ls | 列目录 | -l 详细、-a 含隐藏、-h 人类可读大小、-t 按时间排序 |
| cd / pwd | 切换 / 显示当前目录 | cd – 回到上一个目录 |
| mkdir | 建目录 | -p 递归、-m 指定权限 |
| rm / rmdir | 删文件 / 删空目录 | rm -rf 慎用;rm -i 逐个确认 |
| cp / mv | 复制 / 移动改名 | -r 递归、-a 保留属性、-p 保留时间权限 |
| cat | 整块输出小文件 | cat -n 带行号 |
| less / more | 分页查看 | less 里用 / 搜索、q 退出 |
| head / tail | 看头尾 | head -n 100、tail -n 50、tail -f 实时跟踪日志 |
| tac | 倒序输出文件 | 找文件最后几行比 tail 直观 |
| file | 判断文件类型 | file xxx 能认出脚本、ELF、压缩包 |
| stat | 看文件元数据 | 权限、属主、时间戳、inode |
| tree | 目录树 | 需 yum install tree / apt install tree |
| which / whereis / command -v | 查命令在哪 | command -v python3 判断装了没 |
看大文件只取中间某一段,这个组合非常常用:
head -n 1000 huge.log | tail -n 20 # 取第 981~1000 行
sed -n '100,200p' huge.log # 更直接的写法
三、目录结构:知道东西在哪儿,比会背命令更重要

Linux 是倒树形结构,一切皆文件,所有配置都在 /etc,所有日志都在 /var/log,所有第三方软件都在 /opt 或 /usr/local。
| /etc | 系统级配置文件 | 改网络配置、改 hosts、改 sshd_config |
| /var/log | 日志 | 看服务报错的首选位置 |
| /usr/bin /usr/sbin | 用户程序 / 系统程序 | which 查到的多数路径在这 |
| /opt /usr/local | 第三方软件安装目录 | 手动装的中间件放这,别混进 /usr |
| /home | 普通用户家目录 | ~ 指向当前用户的 home |
| /root | root 的家目录 | 只有 root 进得去 |
| /tmp | 临时文件 | 重启清空,别放重要东西 |
| /proc | 内核与进程的虚拟文件系统 | 只读,进程信息在 /proc/<pid>/ |
| /dev | 设备文件 | 磁盘 /dev/sda、块设备 |
| /run | 运行时状态(PID 文件、socket) | 重启即清 |
| /mnt /media | 挂载点 | U 盘、光驱挂这里 |
关键理解:/proc 和 /sys 不是磁盘上的真目录,而是内核暴露出来的虚拟接口。/proc/cpuinfo 是 CPU 信息、/proc/meminfo 是内存信息、/proc/net/tcp 是 TCP 连接表——查不到现成命令时,先想到去 /proc 翻。
四、文本处理:三剑客与管道

Linux 的哲学是每个命令只做一件事,然后拼起来。管道 | 把上一个命令的标准输出接到下一个命令的标准输入。
| grep | 筛选 | 按行找匹配,-i 忽略大小写、-r 递归、-n 显示行号、-v 反选 |
| sed | 替换 | 流编辑器,s/旧/新/g 全局替换,-i 直接改文件 |
| awk | 列处理 | 按列切分再统计,-F',' 指定分隔符,{print $2} 取列 |
| cut | 简单切列 | -d 分隔符、-c 取字符位置,比 awk 轻 |
| sort | 排序 | -n 数值序、-r 倒序、-k 指定列、-u 去重 |
| uniq | 去重计数 | 必须接在 sort 后面,只去相邻重复行 |
| wc | 计数 | -l 行数、-c 字节、-w 词数 |
| tr | 字符替换 | tr 'a-z' 'A-Z'、tr -d '\\n' |
| xargs | 转命令行参数 | 把 stdin 拆成参数喂给别的命令 |
| tee | 边存边看 | 输出同时写文件,常配管道用 |
| diff / patch | 比较 / 打补丁 | 部署配置时对比两台机器差异 |
四个高频组合,背下来就能覆盖八成需求:
# 1. 在日志里找错误,并带上行号
grep -n "ERROR" /var/log/app.log
# 2. 递归在代码里找关键词,排除二进制和目录
grep -rn –include="*.go" "handleRequest" /opt/app/
# 3. 统计某个词出现了多少次
grep -o "timeout" access.log | wc -l
# 4. 取 IP 的第 3 段并去重排序
awk '{print $3}' access.log | sort | uniq -c | sort -rn | head -20
注意 uniq 的坑:uniq 只去掉相邻的重复行,所以标准写法永远是 sort | uniq -c。要全局去重得用 sort -u。
重定向四个符号:
| > | 覆盖写入文件 |
| >> | 追加写入文件 |
| 2> | 只重定向错误输出 |
| 2>&1 | 把错误输出合并到标准输出 |
| < | 从文件读入(少见) |
command > out.log 2>&1 # 标准输出和错误都写进 out.log
command 2>/dev/null # 丢掉错误输出,只要正常结果
command | tee -a run.log # 屏幕上能看,同时追加存档
五、权限与用户:唯一有用户语义差异的地方
文件权限三组九位:rwxr-xr-x,分别是属主 / 属组 / 其他人的 读 / 写 / 执行。
chmod 755 deploy.sh # 数字法:属主 7、属组 5、其他人 5
chmod u+x,go-w deploy.sh # 符号法:给属主加执行,去掉其他人的写
chown -R deploy:deploy /opt/app # 递归改属主和属组
chmod -R 755 /opt/app # 递归改权限
数字对照:4 读、2 写、1 执行。常见组合 755(目录和脚本)、644(普通文件)、600(私密配置)。
用户管理的双线差异在这里:
| 加用户 | useradd -m -s /bin/bash alice | adduser alice(默认建 home、交互式设密码) |
| 改密码 | passwd alice | passwd alice(一致) |
| 删用户 | userdel -r alice(-r 连 home 一起删) | userdel -r alice(一致) |
| 改用户 | usermod -aG docker alice | usermod -aG docker alice(一致) |
| 加组 | groupadd dev | groupadd dev(一致) |
| 看自己 | id、groups | 一致 |
| 提权 | su – alice、sudo -u alice cmd | 一致 |
差别只在 useradd 和 adduser:RHEL 系的老 useradd 默认不建 home 目录,必须显式加 -m;Debian 系的 adduser 默认建 home、默认 shell是 /bin/bash、还会提示设密码。想在两边行为一致,就统一用 useradd -m -s /bin/bash alice。
免密 sudo:编辑 /etc/sudoers(必须用 visudo,它会做语法检查)加一行:
alice ALL=(ALL) NOPASSWD:ALL
权限被拒时的排查顺序:先看 ls -l 的属主属组对不对 → 再看目录的执行位(没有 x 就进不去目录,即使有 r)→ 再看是不是 SELinux / AppArmor 在拦。
六、进程与作业控制
ps aux # 所有进程,按 CPU/内存快照
ps -ef # 另一种风格,带完整命令行
top # 实时,按 1 看各核,按 M 按内存排序
htop # 更友好,需额外安装
kill 12345 # 发 SIGTERM,让进程优雅退出
kill -9 12345 # SIGTERM 无效时才用,进程没有机会清理
killall nginx # 按名字杀
pkill -f "java.*myapp" # 按完整命令行匹配,最精准
jobs # 当前 shell 的后台任务
fg %1 / bg %1 # 把任务拉回前台 / 放到后台
nohup ./run.sh > run.log 2>&1 & # 脱离终端,关掉 SSH 也继续跑
最常用的三个排查动作:
# 端口被谁占了
ss -tlnp | grep 8080
lsof -i :8080 # 需要 lsof 包
# 进程卡在哪
cat /proc/12345/stack # 内核栈
strace -p 12345 # 看系统调用
# 磁盘 IO 打满
iotop -o -p 12345 # 需要 sysstat 包
ps aux | grep java 会把 grep 自己也算进去,这是经典误报。规避方式:
ps aux | grep "[j]ava" # 方括号写法让 grep 匹配不到自己
pgrep -af java # 更干净,推荐
七、系统信息与磁盘
| 看内存 | free -h | available 那一列才是真正还能用的 |
| 看 CPU | lscpu、nproc | nproc 直接给核数,脚本里好用 |
| 看磁盘分区 | lsblk -f | 挂载点、文件系统类型、UUID 一览 |
| 看磁盘用量 | df -h | 看的是分区容量 |
| 看目录占用 | du -sh /var/* | 看的是某目录实际占了多少 |
| 找大文件 | find / -xdev -type f -size +500M -exec ls -lh {} \\; | -xdev 防止跨文件系统乱跑 |
| 看内核日志 | dmesg -T | tail -50 | -T 把时间戳转成可读格式 |
| 看硬件 | lspci、lsusb、dmidecode | dmidecode 看内存条槽位需 root |
| 看运行时间 | uptime | 负载均值三个数字 |
df 和 du 经常给出矛盾结果,原因值得说清楚:df 统计的是文件系统层面已分配的块,du 统计的是目录树里文件实际占用的块。删掉了文件但进程还持有句柄时,df 显示的空间不会释放——这时 lsof | grep deleted 能找出是谁占着。
排查磁盘满的标准三连:
df -h # 哪个分区满了
du -sh /var/* | sort -h # 哪个目录大
find / -xdev -type f -size +1G -exec ls -lh {} \\; # 具体哪些文件
八、网络:两边差异最大的一节

8.1 查看网络状态
ip addr show # 现代写法,看 IP 和网卡状态
ip route show # 看路由和默认网关
ss -tulnp # 看监听端口和对应进程(比 netstat 好)
ping -c 4 8.8.8.8 # 连通性测试
traceroute 8.8.8.8 # 路径追踪
dig example.com # DNS 查询(Ubuntu 需装 dnsutils,CentOS 需装 bind-utils)
curl -I https://example.com # 只看响应头,测站点可用性
curl -o file.zip https://... # 下载
ifconfig 和 netstat 都要额外装:
yum install -y net-tools # CentOS
apt install -y net-tools # Ubuntu
装了之后 ifconfig、netstat 才有。CentOS 7 默认就装了 net-tools,Ubuntu 18.04 以后默认不装——这就是"同样的命令一台有、一台报 command not found"的典型来源。新脚本统一写 ip 和 ss。
8.2 配静态 IP(最容易翻车的地方)
CentOS / RHEL 系——两个方案:
# 方案一:nmcli(推荐,CentOS 7+ / Stream 均可)
nmcli con show # 查看连接名
nmcli con mod "ens33" ipv4.method manual ipv4.addresses 192.168.1.50/24 ipv4.gateway 192.168.1.1 ipv4.dns "223.5.5.5 8.8.8.8"
nmcli con up "ens33"
# 方案二:直接改配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# BOOTPROTO=none
# IPADDR=192.168.1.50
# PREFIX=24
# GATEWAY=192.168.1.1
# DNS1=223.5.5.5
systemctl restart NetworkManager
Ubuntu 18.04 以后用 Netplan,配置在 /etc/netplan/*.yaml,改完必须 netplan apply:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
– 192.168.1.50/24
routes:
– to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 8.8.8.8]
netplan apply # 生效
netplan try # 试生效,60 秒内不确认自动回滚——改网络时务必用它
YAML 对缩进极度敏感,多一个空格就可能让 netplan apply 直接报错。改之前先 cp /etc/netplan/00-installer-config.yaml{,.bak}。
临时改 IP 只在当前会话有效:ip addr add 192.168.1.50/24 dev ens33 && ip link set ens33 up。重启或 NetworkManager / systemd-networkd 介入后会被覆盖,别拿它当永久方案。
九、软件包管理
| 更新索引 | yum update(7)/ dnf update(8+) | apt update |
| 安装 | yum install -y nginx / dnf install -y nginx | apt install -y nginx |
| 卸载 | yum remove nginx | apt remove nginx(连配置一起删用 apt purge) |
| 搜索 | yum search nginx | apt search nginx |
| 查看信息 | yum info nginx | apt show nginx |
| 已装列表 | yum list installed | apt list –installed |
| 本地包安装 | yum install ./pkg.rpm | apt install ./pkg.deb |
| 包文件查询 | rpm -qf /usr/bin/xxx | dpkg -S /usr/bin/xxx |
| 依赖修复 | yum deplist / dnf check | apt –fix-broken install |
| 源管理 | /etc/yum.repos.d/*.repo | /etc/apt/sources.list 与 /etc/apt/sources.list.d/*.list(deb822 格式为 .sources) |
| 加第三方源 | yum-config-manager –add-repo …(8+ 需先装 dnf-plugins-core) | add-apt-repository ppa:…(需装 software-properties-common) |
三个必须记住的细节:
# 装包时的经典冲突处理
dnf install -y docker-ce –allowerasing # 自动移除冲突包
apt-get install -f # 修依赖
十、服务与日志:两边完全一致
systemd 是现在的事实标准,CentOS 7 以后和 Ubuntu 15.04 以后都是它,命令完全相同:
systemctl status nginx # 看状态(含最近几行日志)
systemctl start nginx # 启动
systemctl stop nginx # 停止
systemctl restart nginx # 重启
systemctl reload nginx # 重载配置(不中断连接,Nginx 用 reload 更合适)
systemctl enable nginx # 开机自启
systemctl disable nginx # 取消开机自启
systemctl enable –now nginx # 开机自启并立即启动,一步到位
systemctl list-units –type=service –state=running # 看所有运行中的服务
systemctl cat nginx # 看服务单元文件内容
日志统一用 journalctl:
journalctl -u nginx -f # 实时跟踪某个服务的日志
journalctl -u nginx –since "30 min ago"
journalctl -u nginx -p err # 只看 error 及以上级别
journalctl -f # 跟踪全系统日志
journalctl –disk-usage # 看日志占了多少磁盘
journalctl –vacuum-size=200M # 清理到 200M 以内
传统日志文件仍在 /var/log/:/var/log/messages(CentOS 的系统日志)、/var/log/syslog(Ubuntu 的系统日志)、/var/log/nginx/、/var/log/secure 或 /var/log/auth.log(SSH 登录审计,文件名两边不一样)。
十一、防火墙与强制访问控制:两套完全不同的体系
这是 CentOS 和 Ubuntu 差异最容易被低估的地方——两边不是"命令不同",是"机制不同"。
| 防火墙 | firewalld(底层 nftables/iptables) | ufw(底层也是 nftables/iptables) |
| 防火墙命令 | firewall-cmd | ufw |
| 强制访问控制 | SELinux(默认 Enforcing) | AppArmor(默认启用) |
| MAC 检查命令 | getenforce、sestatus | aa-status、apparmor_status |
| 临时关闭 MAC | setenforce 0 | aa-complain /etc/apparmor.d/程序名 |
| 永久关闭 | /etc/selinux/config 改 SELINUX=disabled | /etc/apparmor.d/ 下改 profile |
| 常见踩坑 | 端口没放行 / SELinux 拒绝非标路径读文件 | 端口没放行 / AppArmor 拒绝服务读写 |
# CentOS:放行端口(–permanent 只改配置,需 –reload 生效)
firewall-cmd –list-all
firewall-cmd –permanent –add-port=8080/tcp
firewall-cmd –reload
# Ubuntu:放行端口
ufw status verbose
ufw allow 22/tcp
ufw allow 8080/tcp
ufw enable
ufw –dry-run allow 80 # 先看会加什么规则,再真加
SELinux 排障三步:先 getenforce 看状态 → 是 Enforcing 且怀疑被拦 → setenforce 0 临时放行测试 → 能通就说明是 SELinux 的问题,再去写自定义策略(ausearch -m avc -ts recent 找拒绝记录),而不是永久关掉。
一个高频组合坑:CentOS 上服务明明起着、日志也正常,但外部访问不通。八成是 firewalld 没放行端口。先 firewall-cmd –list-all 确认。
十二、容器与常用组合拳
# CentOS 系:Docker 官方源只支持到 CentOS 7/8 老版本,
# Stream 9/10 上要么用 Podman(RHEL 官方推荐,命令几乎与 Docker 一致),
# 要么自己解决仓库源问题
podman run -d –name web -p 8080:80 nginx
podman ps
# Ubuntu 系:官方仓库最省心
docker run -d –name web -p 8080:80 nginx
docker ps -a
docker logs -f web
docker exec -it web bash
docker images
docker system df # 看 Docker 占了多少磁盘
docker system prune -a # 清理,注意是危险操作
日常高频组合拳:
# 找占端口的进程并杀掉
sudo fuser -k 8080/tcp
sudo lsof -ti:8080 | xargs kill -9
# 统计目录里最大的 10 个文件
du -ah /var/log | sort -rh | head -10
# 统计 IP 访问次数排行
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# 两台机器同步目录
rsync -avz –delete /data/ remote:/data/
# 压缩与解压
tar -zxvf app.tar.gz -C /opt/ # .gz
tar -xJvf app.tar.xz -C /opt/ # .xz
tar -czvf backup.tar.gz /data/ # 打包
unzip app.zip -d /opt/ # 需装 unzip
# 定时任务
crontab -e # 当前用户的 crontab
crontab -l # 查看
# 示例:每天 3:07 跑一次
# 7 3 * * * /opt/app/backup.sh >> /var/log/backup.log 2>&1
# 时间与时区
timedatectl # 看时间、时区、是否同步
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true
date '+%Y-%m-%d %H:%M:%S'
# 历史与快捷操作
history | grep docker
!! # 上一条命令
!$ # 上一条命令的最后一个参数
Ctrl + R # 反向搜索历史
alias ll='ls -alh' # 定义别名,写进 ~/.bashrc 永久生效
十三、故障排查速查:症状 → 命令

| 服务起不来 | systemctl status 服务名 | journalctl -u 服务名 -n 100 –no-pager |
| 端口不通 | ss -tlnp | grep 端口 | 进程在吗?防火墙放行了吗?(firewall-cmd –list-all / ufw status) |
| 磁盘满 | df -h | du -sh /var/* | sort -h;日志用 journalctl –vacuum-size=200M 清 |
| 内存爆 | free -h、top | 按 M 排序看谁在吃;查有没有进程泄漏 |
| CPU 100% | top 看 PID | ps -p PID -o %cpu,cmd 看是谁;kill -9 |
| Permission denied | ls -l 看权限和属组 | 目录有没有 x 位?SELinux/AppArmor 拦了吗? |
| 命令找不到 | command -v 命令 | 装了吗?PATH 里有没有?CentOS 用 yum install,Ubuntu 用 apt install |
| 连不上远程 | ping 通吗 | ssh -v 看详细过程;查防火墙和 sshd 服务 |
| DNS 解析失败 | dig 域名 | 改 /etc/resolv.conf(Ubuntu 22.04+ 是 systemd-resolved 管这个) |
| 时区不对 | timedatectl | timedatectl set-timezone Asia/Shanghai |
| 开机不执行 | systemctl enable 服务 | crontab -l 里有吗?cron 服务开了吗? |
十四、一页速查表
两边通用,可以放心复制:
ls cd pwd mkdir rm cp mv cat less head tail find grep sed awk
sort uniq wc cut tr xargs tee diff tar chmod chown useradd usermod
passwd id groups ps top kill jobs bg fg nohup systemctl journalctl
free df du lsblk lscpu uname uptime date timedatectl ip ss ping curl
wget nc crontab history alias man
只在 CentOS / RHEL 用:
yum dnf rpm yum-config-manager firewall-cmd getenforce setenforce sestatus
ifcfg-eth0 /etc/redhat-release /etc/sysconfig/network-scripts/ podman
只在 Ubuntu / Debian 用:
apt apt-get dpkg add-apt-repository ufw aa-status apparmor_status
netplan netplan apply /etc/netplan/*.yaml /etc/lsb-release /etc/apt/
曾经通用、现在要额外安装的:
ifconfig netstat → net-tools
dig → dnsutils(Ubuntu)/ bind-utils(CentOS)
htop → htop
tree → tree
lsof → lsof
traceroute→ traceroute(Ubuntu 自带的是 tracepath)
十五、写在最后
如果只让记十组命令,记这些:
最后一条经验:遇到 command not found,先别急着改 PATH,先确认这个发行版有没有自带。 很多"CentOS 有、Ubuntu 没有"的命令(ifconfig、netstat、dig、telnet),在现代 Ubuntu 上只是需要装个包而已。
说明:文中涉及的版本与工具状态整理自各发行版官方文档与 2026 年 10 月前的公开资料,发行版迭代较快,具体命令请以目标机器的 man 页面和官方文档为准。CentOS 7 / 8 已停止维护,文中保留相关命令是为了服务存量系统,新部署建议选择 CentOS Stream、Rocky Linux、AlmaLinux 或 Ubuntu LTS。
参考来源
- Ubuntu 官方文档:安装包管理 apt
- Ubuntu 文档:Netplan 网络配置
- Ubuntu 文档:UFW 防火墙
- Red Hat 文档:使用 dnf 软件包管理器
- Red Hat 文档:firewalld 防火墙
- Red Hat 文档:SELinux 用户与管理员指南
- CentOS Stream 10 发布公告
- CentOS 官方:CentOS Linux 8 EOL 说明
- Rocky Linux 官方文档
- Ubuntu 26.04 LTS 发布日程与特性
- Docker 官方文档:安装 Docker Engine(CentOS)
- Docker 官方文档:安装 Docker Engine(Ubuntu)
- AppArmor 官方文档
- Netplan 官方文档





