rpm命令
总结
- rpm 是 RedHat 系(CentOS/RHEL/Fedora)的底层包管理工具,直接操作 .rpm 文件
- 常用四类操作:安装(-ivh)、升级(-Uvh)、卸载(-e)、查询(-q 系列)
- rpm 不自动处理依赖,缺依赖会报错;需要自动解决依赖用 yum/dnf
- 查包是否安装:
rpm -qa | grep 包名;查文件属于哪个包:rpm -qf 文件路径
1. 安装
rpm -ivh 包全名.rpm
| 参数 | 说明 |
|---|---|
-i |
安装(install) |
-v |
显示详细信息(verbose) |
-h |
显示安装进度条(hash) |
其他安装参数:
# 不检查依赖强制安装(不推荐,可能导致运行异常)
rpm -ivh --nodeps 包名.rpm
# 覆盖已存在的文件
rpm -ivh --replacefiles 包名.rpm
# 重复安装已安装的包
rpm -ivh --replacepkgs 包名.rpm
# 强制安装,等同于 --replacefiles + --replacepkgs
rpm -ivh --force 包名.rpm
# 测试安装(只检查不实际安装,用于验证依赖)
rpm -ivh --test 包名.rpm
# 指定安装路径
rpm -ivh --prefix /opt/myapp 包名.rpm
2. 升级
# 有旧版本则升级,没有则直接安装(常用)
rpm -Uvh 包名.rpm
# 只升级,没有安装过则不处理
rpm -Fvh 包名.rpm
-U 更常用,相当于"安装或升级",不用关心是否已有旧版本。
3. 卸载
# 卸载(包名不需要带 .rpm 后缀)
rpm -e 包名
# 不检查依赖直接卸载(不推荐,可能导致其他软件崩溃)
rpm -e --nodeps 包名
卸载时用的是包名而不是文件名,可以先用 rpm -qa | grep 关键词 查到准确的包名再卸载。
4. 查询
# 查询所有已安装的包
rpm -qa
# 模糊搜索已安装的包
rpm -qa | grep java
# 查询某个包是否已安装
rpm -q 包名
# 查询包的详细信息(版本、描述、安装时间等)
rpm -qi 包名
# 查询未安装的 .rpm 文件信息
rpm -qip 包名.rpm
# 查询包安装了哪些文件
rpm -ql 包名
# 查询某个文件属于哪个包(排查文件来源时很有用)
rpm -qf /usr/bin/java
# 查询包的依赖关系
rpm -qR 包名
# 查询包的安装脚本
rpm -q --scripts 包名
5. 验证与校验
# 校验已安装包的文件完整性(检查文件是否被篡改)
rpm -V 包名
# 校验所有已安装包
rpm -Va
# 验证 .rpm 文件的 GPG 签名
rpm --checksig 包名.rpm
# 导入 GPG 公钥(安装前先导入,才能验证签名)
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -V 输出说明:
| 标记 | 含义 |
|---|---|
S |
文件大小变化 |
M |
权限或文件类型变化 |
5 |
MD5 校验和变化 |
T |
修改时间变化 |
U |
所属用户变化 |
G |
所属组变化 |
6. 常用组合场景
# 查找并卸载某个包
rpm -qa | grep nginx # 先找到准确包名
rpm -e nginx-1.20.1-1.el7 # 再卸载
# 查看 java 命令来自哪个包
rpm -qf $(which java)
# 查看某个包装了哪些可执行文件
rpm -ql 包名 | grep bin
# 列出所有已安装包及版本,排序输出
rpm -qa --qf "%{NAME}-%{VERSION}\n" | sort
7. rpm vs yum/dnf
| rpm | yum / dnf | |
|---|---|---|
| 依赖处理 | 不自动处理,缺依赖报错 | 自动下载并安装依赖 |
| 安装来源 | 本地 .rpm 文件 | 本地文件或远程仓库 |
| 适用场景 | 离线安装、精确控制 | 日常安装、在线更新 |
有网络时优先用 yum/dnf,离线环境或需要精确控制版本时用 rpm。