国产 Linux 版本差异与排查要点¶
国产 Linux 环境的差异来自发行版、商业版本、SP 小版本、CPU 架构、桌面/服务器形态和厂商安全组件。银河麒麟与统信 UOS 不能共用一套命令。不同发行版/商业版本可能差异较大,下文命令都要先识别现场再执行,不要写成绝对通用。
先识别,再选命令¶
先收集只读信息。某一条命令不存在,只说明当前镜像没有这个文件或组件,不要据此判断系统损坏。
cat /etc/os-release
uname -a
uname -m
command -v systemctl && systemctl --version
版本文件和厂商命令按“文件或命令存在才执行”处理:
# 银河麒麟常见,桌面和服务器镜像不一定都有
[ -r /etc/kylin-release ] && cat /etc/kylin-release
[ -r /etc/.kyinfo ] && cat /etc/.kyinfo
command -v nkvers && nkvers
# 中标麒麟等旧镜像可能仍使用这个文件
[ -r /etc/neokylin-release ] && cat /etc/neokylin-release
# 统信 UOS 常见。os-version 字段名以现场文件为准
[ -r /etc/uos-release ] && cat /etc/uos-release
[ -r /etc/os-version ] && cat /etc/os-version
command -v uosvers && uosvers
/etc/.kyinfo 在部分镜像上权限较紧或内容不是纯文本。读不到时改看 /etc/os-release 和 nkvers。
包管理器同时探测,不要看到发行版名字就假设只有 apt 或只有 dnf:
command -v apt
command -v apt-cache
command -v dpkg
command -v dnf
command -v yum
command -v rpm
常见发行形态¶
下表是现场常见对应关系,用来缩小排查范围。商业镜像、SP 和架构组合可能打破这张表,以本机探测结果为准。
| 常见形态 | 版本识别上常见什么 | 包管理常见情况 | 安全组件常见情况 | 不要默认假设 |
|---|---|---|---|---|
| 银河麒麟桌面 V10 / V10 SP1 | ID=kylin,/etc/kylin-release,部分镜像有 nkvers |
apt / dpkg | 图形安全中心;AppArmor 比 SELinux 更常见 | 不要默认有 firewall-cmd 或 kylin-security-cli |
| 银河麒麟高级服务器 V10 的 RPM 系镜像 | kylin-release 或 os-release 中带服务器版本;部分构建标注 openEuler 兼容 |
dnf 或 yum,rpm | firewalld、SELinux 或厂商加固脚本更常见 | 不要把桌面版 apt 命令套到这台机器 |
| 中标麒麟 / 旧服务器镜像,常见 V7 | /etc/neokylin-release 可能仍在 |
yum / rpm,接近 EL7 | firewalld、SELinux 更常见 | 不要使用只存在于 V10 桌面的麒麟命令 |
| 统信 UOS 桌面版 20 | /etc/os-version、/etc/uos-release,部分镜像有 uosvers |
apt / dpkg | 安全中心常见为 deepin-defender 图形组件 | 不要默认有 uos-firewall 子命令 |
| 统信 UOS 服务器版 20 的 Debian 系镜像 | os-version 中常见服务器或对应 Edition 字段 |
apt / dpkg | 可能没有图形安全中心;防火墙可能是 ufw、firewalld 或未启用 | 不要因为桌面命令不存在就重装系统 |
| 标注 openEuler 兼容的统信或麒麟商业服务器镜像 | os-release 同时出现厂商 ID 和 openEuler 兼容信息 |
dnf / rpm | SELinux、firewalld 更常见 | 不要执行 apt update |
同一产品名下的 “V10” 或 “V20” 只表示产品代际。SP、授权组件和 CPU 架构仍会改变包名、服务名和命令是否存在。
版本识别怎么读¶
银河麒麟¶
# os-release 里优先看 ID、VERSION_ID、PRETTY_NAME
. /etc/os-release
printf '%s\n' "$ID" "$VERSION_ID" "$PRETTY_NAME"
# 有 nkvers 时,它通常比 os-release 多内核和授权相关信息
command -v nkvers && nkvers
关注点:
- 桌面版
PRETTY_NAME常带桌面或 V10 字样,并可能有 UKUI 会话。 - 服务器版通常没有图形会话。用
echo "$XDG_CURRENT_DESKTOP"为空,不能说明命令缺失。 nkvers不在PATH中时,先command -v nkvers,不要把 “command not found” 写成版本损坏。
统信 UOS¶
# 桌面和服务器都优先读这两个文件
cat /etc/os-version
cat /etc/os-release
/etc/os-version 里常见 MajorVersion、MinorVersion、OsBuild、EditionName、ProductType 一类字段,小版本之间字段名可能增减。记录原始文件,不要只抄一个 “V20”。
# 有对应命令才查看授权。退出码非 0 可能是没装组件,不等于授权失效
command -v uosvers && uosvers
command -v uos-activator
command -v uos-activator-cmd
command -v uos-license-ctl
激活和授权工具名随桌面版、服务器版和补丁变化。上面几个名字只是现场常见候选,以 command -v 结果为准。
包管理命令差异¶
先看上一节的探测结果,再选下面其中一组。生产排查使用查询命令。apt update / dnf makecache 会访问软件源,一般不升级已安装包,但内网源不通时会报错。upgrade、dist-upgrade、dnf update 会真正变更软件包,不要当作排查命令。
Debian 系¶
常见于麒麟桌面 V10、UOS 桌面 20,以及不少 UOS 服务器 20 镜像。
# 已安装包和架构
dpkg --print-architecture
dpkg -l | awk 'NR<=5 || /kylin|uos|deepin/'
# 软件源优先级。先看输出,不必先 apt update
apt-cache policy
# 源文件位置。文件名因镜像而异,不要写死成某一个 list
ls /etc/apt/sources.list /etc/apt/sources.list.d/
搜索包:
apt-cache search <keyword>
apt-cache policy <package>
RPM 系¶
常见于麒麟高级服务器的部分 V10 镜像、中标麒麟 V7,以及标注 openEuler 兼容的商业镜像。
# EL8 / 麒麟或 openEuler 兼容的新镜像通常有 dnf
command -v dnf && dnf --version
dnf repolist
# 中标麒麟 V7 一类旧镜像可能只有 yum
command -v yum && yum --version
yum repolist
rpm --eval '%{_arch}'
rpm -qa | grep -E 'kylin|uos|kernel' | head
ls /etc/yum.repos.d/
dnf 和 yum 不要混用在同一条排查结论里。巡检脚本在同时存在多个包管理器时有固定优先级,见 巡检脚本工具化。
选错命令时的现象¶
| 现场 | 错误做法 | 常见结果 |
|---|---|---|
| 只有 dnf/yum | sudo apt update |
apt: command not found,不是软件源故障 |
| 只有 apt | dnf repolist |
dnf: command not found,不是仓库损坏 |
| 内网源地址与系统版本不一致 | 直接 apt upgrade 或 dnf update |
可能装上不匹配依赖。先停在 policy / repolist |
| ARM、龙芯镜像 | 使用 x86_64 离线包 | 依赖或架构不匹配。先核对 dpkg --print-architecture 或 rpm --eval '%{_arch}' |
离线源目录和同步方式见 离线安装与软件源维护。
安全中心与访问控制差异¶
厂商安全中心、firewalld、ufw、SELinux、AppArmor 可能只存在其中一部分。排查顺序仍然是: 文件权限、防火墙、SELinux/AppArmor、厂商安全中心、等保或基线脚本。
先发现本机实际有什么:
systemctl list-unit-files --type=service --no-pager | grep -Ei 'kylin|uos|deepin|firewall|apparmor'
command -v firewall-cmd && firewall-cmd --state
command -v ufw && ufw status
command -v getenforce && getenforce
command -v aa-status && aa-status
bash scripts/linux-health-check.sh --module security
security 模块里的 domestic_security_center 会做只读探测: 安全中心软件包、相关 systemd 单元、已知路径,以及存在时的 status。没有这些工具时输出 not-found、not-installed 或 absent,不会把通用系统判失败。
| 组件 | 更常见的环境 | 查看方式 | 限制 |
|---|---|---|---|
| 麒麟图形安全中心 | 银河麒麟桌面 | systemctl list-unit-files 中名称含 kylin 的服务;桌面菜单 |
服务名随 SP 变化。服务器镜像经常根本没有这个服务 |
kylin-security-cli |
安装了对应命令行组件的麒麟镜像 | command -v kylin-security-cli |
不是 V10 通用命令。不存在时不要执行 enable/disable |
| firewalld | 多数 RPM 系服务器 | firewall-cmd --state、firewall-cmd --list-all |
桌面 Debian 系镜像上经常没有 |
| ufw | 部分 Debian 系桌面或服务器 | ufw status |
状态是 inactive 只说明 ufw 没启用,不说明没有其他防火墙 |
| SELinux | RPM 系服务器更常见 | getenforce、ausearch -m avc -ts recent |
Debian 系桌面经常没有 getenforce |
| AppArmor | Debian 系桌面更常见 | aa-status |
RPM 系服务器经常没有 aa-status |
| deepin-defender | 统信桌面 / deepin 血统镜像 | command -v deepin-defender,或图形安全中心 |
UOS 服务器经常未安装 |
uos-firewall |
安装了统信防火墙封装的镜像 | command -v uos-firewall |
不能替代 firewall-cmd / ufw 的判断 |
kylin-security-cli enable、kylin-security-cli disable、uos-firewall enable 会改访问控制。只有在 command -v 确认命令存在、并且变更窗口允许时才使用。排查阶段停在 status。
审计日志路径也不统一。先确认文件存在再看尾部:
ls -l /var/log/kylin-security.log /var/log/uos/security.log /var/log/audit/audit.log 2>/dev/null
系统管理命令差异¶
这些版本的常规服务管理多数是 systemd,但单元名不是通用的。
systemctl --version
systemctl --failed --no-pager
systemctl list-units --type=service --state=running --no-pager | grep -Ei 'kylin|uos|deepin' || true
| 事项 | 桌面版常见入口 | 服务器版常见入口 | 注意 |
|---|---|---|---|
| 查看版本 | nkvers、uosvers、图形关于 |
/etc/os-release、release 文件 |
服务器没有图形关于页面 |
| 安装软件 | apt,或厂商软件商店 | apt 或 dnf/yum | 商店命令只存在于安装了商店的镜像 |
| 系统更新 | 厂商更新器或 apt |
apt 或 dnf,有时还有厂商更新服务 |
先查服务是否安装,再决定能不能用厂商更新器 |
| 防火墙 | 图形安全中心,或 ufw | firewalld、ufw,或基线脚本 | 可能同时存在“服务没装”和“规则在上层安全设备” |
| 授权 | 桌面激活工具 | 服务器授权命令或合同约定的工具 | 命令名不固定,先 command -v |
| 时间与主机名 | timedatectl、hostnamectl |
同样可用,前提是 systemd | 容器里这些命令可能被裁剪 |
更新相关命令先探测,不要直接升级:
command -v kylin-update
command -v uos-update
systemctl list-unit-files --type=service --no-pager | grep -Ei 'update|upgrade|backup' || true
看到更新或备份服务后,只查看状态:
systemctl status <unit> --no-pager
备份恢复、安全级别调整和完整性修复会改系统。放到变更窗口,并先在同版本测试机验证。命令示例仍以 麒麟与 UOS 常用命令 里“命令存在才执行”为准。
架构差异¶
| 架构 | 排查重点 |
|---|---|
x86_64 |
通用软件包相对多,仍要核对商业源里的版本 |
aarch64 |
核对 ARM 包和容器镜像架构,不要装 x86_64 包 |
loongarch64 |
使用厂商针对龙芯的软件源,二进制通常不能混用 |
mips64el |
可用包范围更依赖厂商适配 |
架构检查细节见 架构与兼容性检查。
软件源差异¶
确认包管理器之后再看源。
# APT。policy 失败时再考虑 apt update,它会访问网络
apt-cache policy
# DNF / YUM
dnf repolist -v
yum repolist -v
常见问题:
- 软件源版本与系统 SP 不匹配。
- 源地址在内网不可达,或证书与源域名不一致。
- GPG key 未导入。先看报错,不要关掉签名检查。
- 架构目录在源里不存在,例如源只有
x86_64而机器是aarch64。
建议记录模板¶
系统名称:
产品形态: 桌面 / 服务器
系统版本和 SP:
CPU 架构:
包管理器: apt / dnf / yum
软件源地址:
防火墙: firewalld / ufw / 未安装 / 未确认
MAC 或安全模块: SELinux / AppArmor / 未安装
厂商安全中心: 已安装组件名 / 未安装
部署环境: 物理机 / 虚拟机 / 云主机 / 容器
问题现象: