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