当前位置:首页>Linux>Linux发行版不是一家亲

Linux发行版不是一家亲

  • 2026-09-08 16:17:47
Linux发行版不是一家亲

同事丢过来一句「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

选型与注意

  1. 云主机 / 入门:
    Ubuntu LTS 文档友好;团队已是 RHEL 体系则 Rocky/Alma 更一致。
  2. 容器基础镜像:
    Alpine 小但 musl 有兼容坑;许多业务更稳的是 distroless 或 slim Debian。
  3. 文档与剧本:
    Ansible / 运维手册写明目标发行版大版本;「在 Linux 上」五个字等于没写。
  4. 安全:
    RHEL 系排障先看 SELinux;Ubuntu 先想 AppArmor 与 ufw——别用错工具箱。

结语

发行版不是一家亲:亲的是内核与许多 POSIX 命令,疏的是包管理、防火墙、网络配置与默认安全策略。先 /etc/os-release,再动手;文档里写清 Ubuntu 22.04 还是 Rocky 9,比写「Linux」负责任得多。

全文完。有用的话点个「在看」,转给还在所有机器上统一甩 apt 的同事。

最新文章

随机文章