Linux命令学习九:软件包管理rpm、yum、dnf


RPM软件包管理

????Linux操作系统下,软件的打包,安装,卸载,都由会统一起来管理。对于不同的Linux发行版本,软件包管理工具会有所不一样。对于debian系的操作系统 ,用的是apt,RHEL系的操作系统 ,用的是RPM(RedHat Package Manager)。

????类似于windows下的 setup.exe 安装程序,RHEL系的操作系统安装包,都是以RPM为后缀。而且每个RPM包的命令格式,都有一个规则。

命名规范

Apache-1.3.23-11.i386.rpm
  • "Apache"是软件的名称

  • “1.3.23-11”为软件的版本号

  • “i386”是软件的运行平台

  • “rpm”是文件扩展名,即rpm包

查看已安装的软件包

rpm -qa

????由于系统自带的软件包也非常多,如果要查看具体的软件包,可以通过管道进行指定名称软件名的过滤。

rpm -qa | grep 软件名

实例

????查看系统中是否已安装yum软件

$ rpm -qa | grep yum
python3-rpm-4.14.3-19.el8.x86_64
rpm-4.14.3-19.el8.x86_64
rpm-plugin-selinux-4.14.3-19.el8.x86_64
rpm-plugin-systemd-inhibit-4.14.3-19.el8.x86_64
rpm-build-libs-4.14.3-19.el8.x86_64
rpm-libs-4.14.3-19.el8.x86_64

????查看已安装软件包的详细信息

$ rpm -qi yum
Name        : yum
Version     : 4.7.0
Release     : 4.el8
Architecture: noarch
Install Date: 2022年04月15日 星期五 13时37分00秒
Group       : Unspecified
Size        : 76420
License     : GPLv2+
Signature   : RSA/SHA256, 2021年11月09日 星期二 10时17分41秒, Key ID 51d6647ec21ad6ea
Source RPM  : dnf-4.7.0-4.el8.src.rpm
Build Date  : 2021年11月09日 星期二 05时54分28秒
Build Host  : 192-168-246-197.atm.cloudlinux.com
Relocations : (not relocatable)
Packager    : AlmaLinux Packaging Team 
Vendor      : AlmaLinux
URL         : https://github.com/rpm-software-management/dnf
Summary     : Package manager
Description :
Utility that allows users to manage packages on their systems.
It supports RPMs, modules and comps groups & environments.

卸载软件

????通过RPM包安装软件,像软件的配置文件,以及一些服务启动脚本文件,都会根据“约定谷成”的习惯,存放到指定的目录下,比如说,配置文件会存放到/etc目录下,如果安装的软件,还会自动配置系统服务,那么服务的启动脚本,会存放在/etc/init.d目录下。这个有点像windows系统,安装一个软件,到处都有配置文件。这个时候删除软件,如果 手动删除,需要挨个把文件找出来然后删除, 这样就非常不科学了。所以下面引出了删除RPM软件包的命令。

rpm -e 软件包
# 忽略软件包之间的依赖直接卸载软件
rpm -e --nodeps 软件包

实例

# 像之前的centos,安装系统后会自带了mariadb,可以使用命令进行卸载
rpm -e --nodeps mariadb-libs

软件安装

????如果使用rpm进行安装软件,应该是比较麻烦的一件事情。除非已经提前准备好rpm包,不然处理软件包之间的依赖是一个非常麻烦的事情。

基本语法

rpm -ivh 软件包名

参数说明

参数 说明
-i 安装软件
-v 安装软件的时候显示详细信息
-h 安装软件的时候显示进度
--nodeps 安装软件前不检查依赖

案例

????安装火狐浏览器,这个时候需要准备好RPM包,然后通过命令进行安装。

rpm -ivh fire-fox-68.10.0-1.el7.centos.x86_64.rpm

YUM软件包管理

????YUM的全称为(Yellow dog Updater , Modified)。为了能够自动解决通过RPM包安装软件时软件之间依赖的问题,yum工具就横空出世了。yum工具会通过配置的软件源,自动从软件源中下载指定的软件,以及软件所依赖的其他软件包。YUM包也是基于RPM包管理。

基本语法

yum [参数] [选项]

参数说明

选项 说明
-y 对于yum的“提问”默认回复"yes"

????这应该是唯一一个最常用的参数了,在使用yum进行管理软件的时候,yum都会弹出一个确认信息,输入y或者n确认操作或者取消操作。那么 -y 参数就是给这个“提问”默认给了确认回答。

选项说明

选项 说明
install 安装软件
update 更新软件
remove 卸载软件
list 显示软件包信息
clean 清理过期的yum缓存
deplist 显示yum软件包的所有依赖
check-update 显示软件是否有更新

实例

????安装wget工具

yum install -y wget

????卸载wget工具

yum remove -y wget

将yum软件源改成国内的软件源

????yum的软件源配置文件默认是在/etc/yum.repos.d 目录下。这里以网易163的软件源为例,其他的国内镜像网站替换操作也是一样的。

# 先备份原来的软件源配置文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 然后再下载新的软件源配置文件
wget -O /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo 
# 或者
curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo 

????然后再生成一下yum的缓存

# 生成缓存前,先清理一下缓存 
yum clean all
# 生成缓存 
yum makecache

新一代软件包管理器:DNF

????DNF (Dandified Yum) 是新一代的RPM软件包管理器。DNF 包管理器克服了 YUM 包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF 使用 RPM, libsolv 和 hawkey 库进行包管理操作。AlmaLinux已经使用DNF作为默认的软件包管理器。

基本语法

dnf [选项] [参数] [软件名]

????其实在很多方面,dnf的使用方法,跟yum的使用方法还是很相似的。可以先暂时将dnf,理解为yum的另一个名称。

参数说明

选项 说明
-y 对于dnf的“提问”默认回复"yes"

????这应该是唯一一个最常用的参数了,在使用dnf进行管理软件的时候,dnf都会弹出一个确认信息,输入y或者n确认操作或者取消操作。那么 -y 参数就是给这个“提问”默认给了确认回答。

选项说明

选项 说明
install 安装软件
update 更新软件
remove 卸载软件
list installed 显示已安装软件包信息
list available 显示可用的软件包信息
clean 清理过期的yum缓存
deplist 显示yum软件包的所有依赖
check-update 显示软件是否有更新
info 查看软件名详情

实例

????dnf在使用方面跟yum基本上是一致的。

# 安装 net-tools
dnf install -y net-tools

# 卸载 net-tools
dnf remove -y net-tools

# 软件升级
dnf update

# 系统升级
dnf upgrade 

# 清除dnf软件包缓存 
dnf clean all

将DNF软件源改成国内的软件源

????因为AlmaLinux刚发布不久,还是挺热乎的,国内的软件源还不是很多。这里以阿里的为例子演示一下替换过程。执行以下命令备份并替换默认源。

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
      -e 's|^# baseurl=https://repo.almalinux.org|baseurl=https://mirrors.aliyun.com|g' \
      -i.bak \
      /etc/yum.repos.d/almalinux*.repo

????执行以下命令生成缓存

dnf makecache