rpm与yum及dnf
前言:关于rpm、yum及dnf
rpm:为了解决在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系,rpm机制应运而生。但是rpm机制也只能帮助运维人员查询缺少的依赖关系,安装还是需要自己来进行。这是yum软件仓库就来了。
yum:底层为rpm包,搭建的一套基于rpm包的yum软件仓库。即Yum方式下载的包都是rpm包,而yum的好处在于在下载指定的rpm包时,会在自己的Yum软件仓库中自动寻找其所有依赖包,并进行统一安装,节省了运维人员的时间。且yum软件仓库,可以是基于官方的、也可以是基于第三方的,还可以是自己搭建的。
dnf:在yum机制如此优秀的情况下,仍然存在一些问题,如分析不准确,占用内存量大,不能多人同时安装软件等硬伤。因此在随着Fedora 22系统的发布,红帽又给了我们一个新的选择—DNF,即DNF实际上就是yum的升级版,也称为yum v4版本。且在使用上面,dnf也是和yum命令方式一样,都是同样的使用方式,只需把yum换为dnf即可。
-i(安装) #rpm {-i | --install} [install-option] PACKAGE_FILE.... 如: #rpm -ivh 包.rpm(安装并显示详细过程,以#显示程序包管理执行进度) #rpm -ivh --force 包.rpm(强制安装包,忽略错误输出)
解压缩rpm包
#rpm2cpio 包名.rpm |cpio -tv
升级
#rpm {-U | --upgrade} [install -options] PACKAGE_FILE... -U,upgrade:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则“安装” #rpm {-F | --freshen} [install-options] PACKAG_FILE -F,freshen:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则不执行升级操作。 即#rpm -Uvh PACKAGE_FILE #rpm -Fvh PACKAGE_FILE --oldpackage:降级 --force:强制安装 内核:一般不建议随便换内核;除非遇到重大情况,出bug等。 建议用ivh安装新的内核版本,新版本和旧版本共存,使用新版本一段时间后,若机器稳定运行,再卸载旧版本rpm包即可(# rpm -e ),这样安全。
若出问题,则换回旧版本的内核继续使用.(重启使用旧的内核版本)
-q(查询) #rpm -qa (列出所有包) #rpm -qpi filename.rpm 查询软件描述信息 #rpm -qpl filename.rpm 列出软件文件信息(查看未安装的该rpm包内的文件(即预览包内文件)) #rpm -qf filename 查询文件属于哪个RPM #rpm -q --scripts bash (查询安装后自带的所有脚本,都有) #rpm -qp --scripts bash(查询安装前自带的所有脚本,都有) -e(卸载) #rpm -e filename.rpm 卸载软件 #rpm2cpio 包文件|cpio -itv 预览包内文件 #rpm2cpio 包文件|cpio -id "*.conf" 释放包内文件
yum命令使用
其中配置文件 /etc/yum.conf:为所有仓库提供公共配置 /etc/yum.repos.d/*.repo:为仓库的指向提供配置 yum软件仓库配置 #vim /etc/yum.repos.d/*.repo [name] name=关于repository的描述 baseurl=路径 #baseurl=file:///mnt/cdrom(本地base源) #baseurl=http://mirrors.aliyun.com/epel/7/$basearch enbaled=1|0 开启或关闭 gpgcheck=1|0 是否开启检验 gpgkey=file://mnt/cdrom/RPM-GPG-KEY-EPEL-7(若开启检验,则该参数写上对应公钥的路径) 注意:在自己写的repo文件中,若不写gpgcheck参数,则默认按/etc/yum.conf配置文件中的gpgcheck参数执行;
yum命令的用法
yum命令的用法: #yum [options] [command] [package ...] 显示仓库列表: #yum repolist [all |enabled | disabled] 显示程序包: #yum list #yum list [all |glob_exp1 ] [glob_exp2] [...] #yum list {available | installed | updates } [glob_exp1] [ ...] 安装程序包: #yum install package1 [package2] [...] #yum reinstall package1 [package2] [.... ] (重新安装) yum-config-manager,生成172.16.0.1_cobbler_ks_mirror_centos-x-x86_64_.repo #yum-config-manager --add repo=http://172.16.0.1/cobbler/ks_mirror/7/(即baseurl的路况):自动在/etc/yum.repos.d/生成repo文件,缺点是没有gpg参数。 启用|禁用仓库 #yum-config-manager --disable "仓库名" :禁用仓库(enable=0) #yum-config-manager --enable "仓库名" :启用仓库(enable=1) 升级程序包: #yum update [package1] [package2][...] 升级(不加参数,默认升级所有rpm包) #yum downgrade package1 [package2] [...] 降级 检查可用升级 #yum check-update 卸载程序包 #yum remove | erase package1 [package2] [...] 查看程序包information: #yum info [...] 信息没有#rpm -qi [...] 详细 查看指定的特性(可以是某文件)是由哪个程序包所提供: #yum provides | whatprovides feature1 [feature2] [...] 清理本地缓存: 清除/var/cache/yum/$basearch/$releasever缓存 #yum clean [packages | metadata| expire-cache | rpmdb | plugins | all ] 构建缓存: #yum makecache 搜索:以指定的关键字搜索程序包名及summary(说明)信息 #yum search string1 [string2] .. 查看指定包所依赖的capabilities: #yum deplist package1 [package2] [..] 查看yum事务历史: #yum history [ info | list | packages-list | packages-info | summary | addon-info | redo | undo| rollback | new | sync | stats ] #yum history #yum history info 6(即#yum history的ID,查看该ID步骤的详细信息) #yum history undo 6(撤销ID步骤的动作 ) #yum history redo 6 (重做ID步骤的动作)
yumdownloader命令
作用:利用yum命令只下载rpm包不安装(方便从外网机复制包到内网机)
yumdownloader命令下载

下载后:多出来的为yum系列命令的其它插件
2..yumdownloader使用方法

rpm包安装:

dnf命令使用
①在centos7中,默认还未安装dnf命令,使用的还是yum;使用dnf命令,还需下载。
②在centos8中,已自动安装了dnf命令,同时yum命令也可使用。
③dnf命令使用与yum命令使用方式一致,只需将yum改为dnf。
centos7中,dnf命令的下载
1.启动epel-release依赖
使用命令
# yum install epel-release
下载dnf命令包
# yum install dnf
>....关于dnf命令,我在自己的centos7环境下下载失败,包环境不够,之后还未测试,因此关于该dnf块的实验,可不看。
>....后续了解到centos8后,再补充。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统