优先使用 dnf install ./package.rpm(rhel/centos 8+、fedora)或 yum localinstall ./package.rpm(centos 7/rhel 7),二者自动解析依赖并从启用仓库安装;切勿直接 rpm -ivh,因其不处理依赖且易致系统异常。

用 dnf install 或 yum localinstall 装本地 RPM 包
rpm -ivh 看似直接,但几乎必然失败——它不联网、不查仓库、不装依赖。遇到 libcurl.so.4 is needed 或 systemd >= 249 这类提示就停住,连“该去哪找”都不会告诉你。
-
dnf install ./package.rpm:适用于 RHEL/CentOS 8+、Fedora,路径必须写全(如./nginx-1.24.0-1.el9.x86_64.rpm),不能只写文件名 -
yum localinstall ./package.rpm:适用于 CentOS 7/RHEL 7,yum install ./xxx.rpm在旧版里通常不生效 - 两者都会自动解析依赖、从已启用仓库拉取并安装,比手动凑依赖链靠谱得多
装之前必须确认三件事
跳过这步,后面大概率白忙一场:- 用
rpm -qip package.rpm看架构和发行版标识:比如el9包不能装进 CentOS 7,x86_64包不能装到aarch64机器上 - 执行
uname -m和cat /etc/redhat-release核对实际系统环境 - 运行
dnf repolist或yum repolist,确保baseos、appstream(RHEL 8+)或base、updates(CentOS 7)已启用
rpm -ivh 不是不能用,而是风险太高
真要硬上,得清楚后果:
- 加
--nodeps:装完可能根本起不来,比如nginx缺openssl-libs会直接段错误 - 加
--force:可能覆盖关键系统文件,误覆/usr/lib64/libc.so.6就等于废掉整个系统 -
rpm -e卸载时只删本体,不清理它带进来的依赖(如apr、apr-util),留下一堆孤儿包
卸载必须用对应工具
用dnf install 装的,就得用 dnf remove package_name 卸;用 yum localinstall 装的,就得用 yum remove package_name 卸。
- 查原始包名:用
rpm -qa | grep -i keyword,结果是httpd-2.4.57-1.el9.x86_64,卸载时只写httpd,别带版本号 -
rpm -e只适合极少数场景(比如你明确知道这个包是孤立安装、无任何依赖关系)
依赖解析和包生命周期管理不是可选项,是默认行为。绕开它,等于把螺丝刀当锤子使——偶尔能砸进去,但更大概率是崩了刃还打歪了钉。











