rpm -ivh安装失败因不解决依赖,应优先用yum/dnf install ./package.rpm;必须用rpm时可查缺包后手动装或--nodeps强制跳过;新装建议-uvh避免已存在报错;验签用rpm -k,卸载用rpm -e包名。

rpm -ivh 安装失败:提示依赖未满足怎么办
直接用 rpm -ivh package.rpm 装包,十有八九报错 Failed dependencies。这不是命令写错了,是 rpm 本身不自动解决依赖——它只校验、不下载、不递归安装。
常见错误现象:error: Failed dependencies: libxxx.so.5 is needed by xxx-1.0-1.x86_64,或者 package xxx is already installed 却又提示缺失依赖。
- 优先改用
yum install ./package.rpm或dnf install ./package.rpm(CentOS 8+/RHEL 8+ 用 dnf),它们会自动拉取并安装依赖 - 如果必须用 rpm,先加
--nodeps强制跳过依赖检查(不推荐),或用rpm -qpR package.rpm查出缺哪些包,再手动yum install补齐 - 注意路径:
./package.rpm不能写成package.rpm(没当前目录前缀时,rpm 会去数据库查已安装包名,不是读文件)
rpm -Uvh 和 rpm -ivh 到底该用哪个
rpm -ivh 是“安装”,rpm -Uvh 是“升级”——但后者在包未安装时行为等同于安装,已安装时才真正升级。关键区别在语义和默认行为。
- 新装软件,两个都行;但若目标包已存在旧版本,
-ivh会直接报错package xxx is already installed,而-Uvh会替换掉旧版 -
-Uvh还会保留配置文件(除非新包明确标记为覆盖),-ivh不处理已有配置,容易导致冲突 - 生产环境建议统一用
-Uvh,避免因判断是否已安装而多一步检查,也更符合运维直觉
如何验证 rpm 包是否损坏或来源不可信
直接 rpm -ivh 装来路不明的包,风险不小。rpm 自带签名和完整性校验,但默认不启用。
- 先查签名:
rpm -K package.rpm,输出里出现OK才说明包没被篡改;若报gpg NOT OK,说明没签名或签名无效 - 导入公钥才能验签:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial(路径依发行版而异) - 装包时加
--checksig可显式验签:rpm -K --checksig package.rpm - 注意:很多第三方 rpm 包根本没签名,
rpm -K会一直显示gpg NOT OK,这时得靠人工确认来源可信度
rpm 安装后文件去哪儿了?怎么卸载干净
rpm 不像源码编译那样自由指定 prefix,所有路径由包作者在构建时硬编码进 spec 文件,用户无法安装时修改。
- 查已安装包的文件列表:
rpm -ql package-name(注意是已安装的包名,不是 rpm 文件名) - 查某个文件属于哪个包:
rpm -qf /path/to/file - 卸载:
rpm -e package-name;别写成rpm -e package.rpm,会报package package.rpm is not installed - 卸载不干净的典型原因:包被其他包依赖(
error: Failed dependencies),此时加--nodeps强制卸载,但可能破坏系统功能
真正麻烦的是那些没进 rpm 数据库的文件——比如包里执行 %post 脚本生成的配置、日志或临时数据,rpm 不管这些,得自己清理。










