同事丢过来一句「Linux 上执行 apt install」,你机器却是 Rocky——命令报错的那一刻,才想起:大家都说 Linux,其实聊的是发行版。内核可以一家亲,用户空间、包管理、默认服务、防火墙工具差得很远。今天把常见家族拆开,并对照命令差异,方便写脚本、写文档、半夜登录别人的机器时少踩坑。
一句话:先认清「Debian 系 / RHEL 系 / 其它」,再选包管理与服务命令;通用命令(ls、ssh、systemctl)在现代发行版上大体通用,差异集中在装软件、管网络、管防火墙。
背景:发行版到底在发什么
严格说,Linux 多指内核。发行版 = 内核 + GNU 工具链 + 包仓库 + 默认配置 + 安装器 + 文档与发布节奏。Ubuntu 不是「另一种 Linux 内核」,是 Debian 系里面向桌面/云的一条产品线;Rocky / Alma 则是 RHEL 生态在 CentOS 变轨后的社区重建。
选型常看四件事:包生态与软件新旧、生命周期与商业支持、默认安全/合规习惯、团队已有肌肉记忆。没有宇宙第一,只有「运维文档里写死的那一套」。
三大家族速览
- Debian 系:Debian、Ubuntu、Linux Mint、Deepin 等。包格式 .deb,工具 apt / dpkg。云镜像、桌面、入门文档极多。
- RHEL 系:RHEL、CentOS Stream、Rocky、Alma、Oracle Linux、旧版 CentOS、部分国产衍生。包格式 .rpm,工具 dnf / yum、rpm。企业服务器与合规场景常见。
- 其它常客:Arch(pacman,滚动更新)、openSUSE(zypper)、Alpine(apk,容器里极轻)、SLES 等。容器镜像里 Alpine / Distroless 很常见,命令更精简。
先认族,再记命令。把 Ubuntu 上的 apt 教程原样贴到 Rocky,失败是正常的。
包管理:差异最大的一块
装软件是运维日常,也是文档里最容易写错族的地方。对照如下(现代系统优先写新命令):
- Debian/Ubuntu:apt update → apt install → apt remove / purge;查包 apt search;本地包 dpkg -i。
- RHEL/Rocky/Alma:dnf install(旧机 yum);dnf remove;dnf search;本地包 rpm -ivh / dnf localinstall。
- Arch:pacman -Syu 升级;pacman -S 安装;pacman -R / -Rns 卸载。
- Alpine:apk update;apk add;apk del。
- openSUSE:zypper refresh;zypper install;zypper remove。
# 同一意图:安装 nginx(按发行版二选一)
# Debian/Ubuntu
sudo apt update && sudo apt install -y nginx
# RHEL 系
sudo dnf install -y nginx
# Alpine
sudo apk add nginx
# Arch
sudo pacman -S nginx包名也不总一致:有的叫 python3-pip,有的在别的仓叫法不同;开发头文件 Debian 系常 libfoo-dev,RHEL 系常 foo-devel。脚本里写死包名,跨族必炸。
服务与开机:systemd 时代的「大体统一」
主流服务器发行版如今多是 systemd,服务命令反而比十年前统一:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
journalctl -u nginx -f例外要记:极老的 SysV(service nginx start / chkconfig)、部分容器/嵌入式用 OpenRC(Alpine 传统)、极简环境可能没有 systemd。unit 文件路径各发行版大体在 /etc/systemd/system 与 /usr/lib/systemd/system,细节仍可能不同。
网络与防火墙:名字最乱
配 IP、DNS、防火墙,是跨发行版第二大坑:
- 网络配置:Ubuntu 用 netplan(YAML);RHEL 系常用 NetworkManager(nmcli)或历史 network-scripts;都可用 ip 命令做临时调整。
- 防火墙:Ubuntu 常 ufw(底层 iptables/nft);RHEL 系常 firewalld(firewall-cmd);也有人直接 nft / iptables。别假设「开了 80 端口」的命令到处一样。
# 放行 80/tcp(示意,按系统二选一)
# Ubuntu
sudo ufw allow 80/tcp && sudo ufw reload
# RHEL 系 firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# 临时看地址(较通用)
ip -br a路径、用户与「好像一样其实不同」
配置文件位置常有微妙差别:Debian 系 Apache 站点在 /etc/apache2,RHEL 系多在 /etc/httpd;nginx 相对统一在 /etc/nginx,但站点 include 习惯不同。默认 shell、sudo 组(sudo vs wheel)、SELinux(RHEL 系默认 enforcing)vs AppArmor(Ubuntu 常见)——安全子系统不同,权限问题的排障路径也不同。
还有软件版本:同叫「安装 python3」,Ubuntu 某 LTS 与 RHEL 某小版本自带的次版本号可能差一截。容器与 pyenv / 官方二进制往往比「发行版自带」更可复现。
通用命令:先认机,再动手
登录陌生机器,建议先跑这组「认亲」命令(多数发行版可用):
cat /etc/os-release
uname -r
command -v apt dnf yum pacman apk zypper
systemctl --version
getenforce 2>/dev/null || true写跨发行版脚本时,用检测分支,而不是假设全世界都是 apt:
if command -v apt >/dev/null; then
sudo apt update && sudo apt install -y curl
elif command -v dnf >/dev/null; then
sudo dnf install -y curl
elif command -v apk >/dev/null; then
sudo apk add curl
else
echo "unsupported distro"; exit 1
fi选型与注意
- 云主机 / 入门:Ubuntu LTS 文档友好;团队已是 RHEL 体系则 Rocky/Alma 更一致。
- 容器基础镜像:Alpine 小但 musl 有兼容坑;许多业务更稳的是 distroless 或 slim Debian。
- 文档与剧本:Ansible / 运维手册写明目标发行版大版本;「在 Linux 上」五个字等于没写。
- 安全:RHEL 系排障先看 SELinux;Ubuntu 先想 AppArmor 与 ufw——别用错工具箱。
结语
发行版不是一家亲:亲的是内核与许多 POSIX 命令,疏的是包管理、防火墙、网络配置与默认安全策略。先 /etc/os-release,再动手;文档里写清 Ubuntu 22.04 还是 Rocky 9,比写「Linux」负责任得多。
全文完。有用的话点个「在看」,转给还在所有机器上统一甩 apt 的同事。