软件包管理器
Linux软件包管理工具是一组命令的集合,其作用是在操作系统中提供安装、更新、删除及卸载软件的方法,同时提供对系统中所有软件状态信息的查询。不同的Linux发行版会有不同的包管理器,比较常见的包管理工具有DPKG、APT(APT-GET)、RPM、YUM、DNF等。
DPKG
DPKG(Debian Packager)是Debian包管理系统,是Debian Linux家族的基础包管理工具,用于安装、删除deb软件包以及提供deb软件包的信息。
dpkg本身是一个底层工具,如同rpm系统,其上层工具(如apt)被用于从远程获取软件包以及处理复杂的软件包关系。
所有源自Debian的Linux发行版都使用dpkg作为包管理系统,例如Knoppix、Debian、Ubuntu、Linux Mint等。
shell
选项说明:
-i -- 安装软件包
-r -- 删除软件包
-P -- 删除软件包的同时删除其配置文件
-l -- 显示已安装软件包列表
-L -- 显示软件包关联的文件
--unpack -- 解开软件包
-c -- 显示软件包内文件列表
--configure -- 配置软件包
shell
dpkg -i package.deb # 安装deb软件包
dpkg -r package # 删除软件包
dpkg -P package # 删除软件包(包括配置文件)
dpkg -l # 列出已安装的软件包
dpkg -l package # 显示该软件包的版本
dpkg --unpack package.deb # 解开deb软件包
dpkg -c package.deb # 列出deb软件包的内容
dpkg --configure package # 配置软件包
APT(APT-GET)
apt(advanced packaging tool)是dpkg包管理系统的一个前端工具,是一个非常受欢迎的、自由而强大的命令行包管理器系统,适用于Debian及其衍生版,如Ubuntu、Linux Mint。apt由几个操作软件包的命令行工具组成,包括apt-get、apt-cache和apt-cdrom。
为了解决命令过于分散的问题,引入了命令apt,它包括了命令apt-get使用最广泛的功能选项,以及命令apt-cache和apt-config中常用到的功能。在使用apt命令时,用户不必再由apt-get转到apt-cache或apt-config,而且apt更加结构化,并为用户提供了管理软件包所需的必要选项。简单来说,apt就是apt-get、apt-cache和apt-config中最常用命令选项的集合。
shell
apt install package # 安装包
apt remove package # 删除包
apt autoremove # 检查并清除无用的安装包
apt update&upgrade package # 更新所有的安装包
apt-get upgrade # 更新所有已安装的软件包
apt-get dist-upgrade # 将系统升级到新版本
apt-get install package # 安装包
apt-get remove package # 删除包(保留配置文件)
apt-get --purge remove package # 删除包(同时删除配置文件)
apt-get autoclean package # 移除该软件的旧版本软件包(为了满足其他软件包的依赖而安装,但现在不再需要的软件包)
apt-get clean # 移除下载到本地的已安装的软件包
sudo apt list --installed # 列出已安装的软件包
RPM
RPM(RedHat Package Manager)是RedHat软件包管理工具,是由红帽公司开发的软件包管理方式,是Linux系统里面的打包安装工具,基于这个底层系统,产生了多个前端包管理工具可供使用。
RPM早期被称为RedHat Package Manager,但由于RPM非常流行,大部分的Linux发行版本都使用了RPM来管理软件包,所以它实际上已经成为Linux的工业标准。因此RPM现在又被称为RPM is Package Manager,RPM现在是Linux Standard Base(LSB)中采用的包管理系统。
RPM最大的特点就是需要安装的软件都已经编译过,并都已经打包成RPM机制的安装包,通过默认的数据库记录这个软件安装时需要的依赖软件。当我们在自己的Linux系统上安装时,RPM会先依照软件里头的数据查询Linux主机的相关依赖软件是否满足,若满足则予以安装,若不满足则不予安装。
RPM常用的前端工具有如下几种:
- yum:作为RHEL及CentOS的软件包前端工具
- dnf:作为Fedora的软件包前端工具
- zypper:作为SUSE发行版的软件包前端管理工具
- urpmi:作为Mandriva Linux及相关派生版的软件包前端管理工具
RPM包的名称格式:Apache-1.3.23-11.i386.rpm
- Apache -- 软件名称
- 1.3.23-11 -- 软件的版本号,主版本和此版本
- i386 -- 是软件所运行的硬件平台,Intel 32位处理器的统称
- rpm -- 文件扩展名,代表RPM包
shell
选项说明:
-a -- 查询所有套件
-e -- 删除指定套件
-h -- 安装套件时列出标记
-i -- 安装指定的套件档,或显示套件的相关信息
-p -- 查询指定的套件档
-q -- 使用询问模式,当遇到任何问题时,rpm指令会先询问用户
-R -- 显示套件的关联性信息
-U -- 升级指定的套件档
-l -- 显示套件的文件列表
-v -- 显示指令的执行过程
-vv -- 详细显示指令的执行过程,便于排错
shell
rpm -qa # 查询已安装的所有rpm软件包
rpm -qa | grep package # 查询相应软件包
rpm -qi 软件名 # 查询已安装软件对应的rpm软件包的详细信息
rpm -ivh package.rpm # 安装rpm软件包
rpm --force -ivh package.rpm # 强制安装rpm软件包
rpm -Uvh package.rpm # 升级rpm软件包
rpm -e rpm软件包 # 卸载rpm软件包
rpm -e --nodeps rpm软件包 # 卸载软件包时,不检查依赖,这样做可能会导致一些与该软件包存在依赖关系的软件无法正常工作
YUM
YUM(Yellow dog Updater, Modified)是一个在Fedora、RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并进行安装,可以自动处理依赖关系,并能一次安装所有依赖的软件包,无须繁琐地进行一次又一次的下载和安装。
YUM原理:
-
Server端先对程序包进行分类后存储到不同的repository容器中,再收集大量RPM软件包的数据库文件中关于描述程序包之间依赖关系的数据,然后根据这些数据生成描述RPM软件包的依赖关系及所需文件在服务端的存放位置的说明文件(.xml格式),并将此说明文件存放在服务器端的repodata目录下供Client端取用。
-
Cilent端通过yum命令安装软件时发现缺少某些依赖性程序包,Client会根据本地的配置文件(/etc/yum.repos.d/*.repo)找到指定的Server端,然后从Server端repodata目录下获取说明文件(xxx.xml)后,存储在本地/var/cache/yum中方便以后读取。通过xxx.xml文件查找到需要安装的依赖性程序包在Server端的存放位置,再进入Server端yum库中的指定repository容器中获取所需程序包,下载完成后在本地实现安装。
主要特点:
- 可以自动解决软件包的依赖关系
- 可以对RPM包进行分组,基于组进行安装操作
- 引入仓库概念,支持多个仓库(即可以同时配置多个资源库),可以从发行官方存储库和其他第三方存储库安装RPM软件包
- 简洁的配置文件(/etc/yum.conf)
YUM类似java中的maven和python中的pip,可以从镜像网站上下载应用程序,并直接安装。
YUM是一个在线软件管理工具,所以使用YUM进行的操作大都需要在联网的条件下才能正常使用。
YUM和RPM的区别:
YUM只是一个前端用来便捷管理RPM软件包的工具,而RPM则是一个软件包管理系统(软件包管理器、软件包管理组件),RPM会把软件打包成以.RPM为扩展名的文件,并且也提供简单的命令来管理软件包,只不过RPM的命令工具没有YUM的命令强大罢了。
而YUM则是在RPM的基础上对软件包进行管理,实现了RPM软件包管理器在功能上的扩展,YUM必须依赖于RPM,因此YUM是不能脱离RPM而独立运行的。
RPM | YUM |
---|---|
红帽于 1995 年推出了RPM | Yellowdog Updater(YUP)于1999-2001年开发,YUM 在 2003 年取代了原始的 YUP |
RPM 代表 RPM 软件包管理器(以前称为 Red Hat 软件包管理器) | YUM 代表经过修改的 Yellowdog Updater |
RPM 命令工具不能解决依赖关系,您必须手动安装它们 | YUM 命令工具可以自动解决软件包的依赖关系并同时安装它们 |
允许同时安装同个软件包的多个版本 | 不允许,会提示该软件包已经安装,但是你可以更新和升级 |
使用 RPM 命令安装软件包时,必须提供软件包的确切位置 | 可以安装存储库中可用的任何软件包,只需要知道软件包名称 |
RPM 不依赖 YUM | YUM 是一个 RPM 软件包的前端工具,在后端依旧使用 RPM 软件包管理器来管理软件包 |
RPM 命令工具只能安装已经下载到本地机器上的软件包 | YUM 能在线下载并安装软件包,而且能在线快速更新/升级已安装的软件 |
RPM 不允许您将整个系统升级到最新的可用版本 | YUM 允许您将系统升级到最新的可用版本 |
RPM 不允许您自动更新/升级系统上安装的软件包 | YUM允许您自动更新/升级系统上安装的软件包 |
它不使用在线存储库执行任何操作 | 它完全依靠在线存储库来完成所有工作 |
RPM 属于低级软件包管理器,不仅提供基础的软件包管理功能,而且还负责将软件打包成以 .RPM 为扩展名的文件 | YUM 属于高级的软件包管理前端工具,YUM 是在 RPM 的基础上对软件包进行管理的,也就是说 YUM 是依赖于 RPM 的 |
RPM 适用于所有环境 | YUM 要搭建本地 YUM 源才可以使用 |
RPM 是底层管理工具 | YUM 是上层管理工具 |
shell
# yum [选项] [参数]
# 选项为-y时,表示在安装过程中遇到的系统提问都默认回答yes,这样就不用在安装应用时停下来手动继续
参数说明:
install # 安装rpm软件包
update # 更新rpm软件包
check-update # 检查是否有可更新的rpm软件包
remove # 删除指定的rpm软件包
list # 显示软件包信息
clean # 清理yum过期的缓存
deplist # 显示yum软件包的所有依赖关系
localinstall # 安装本地的rpm软件包
localupdate # 更新本地的rpm软件包
yum -y install firefox # 使用yum安装firefox
DNF
DNF是一个基于RPM包管理系统的包管理工具,是下一代的YUM,Fedora 18引入了它,它是Fedora 22及更新版本的默认包管理器,Rhel 8和CentOS 8也在应用。
powershell
dnf install package # 安装软件包
dnf update package # 升级软件包
dnf update && dnf upgrade # 升级所有软件
dnf check-update # 检查可更新的软件包
dnf remove package # 删除软件包
dnf erase package # 删除软件包
dnf autoremove # 删除无用孤立的软件包
dnf clean all # 删除缓存的无用软件包
dnf repolist # 查看系统中可用的DNF软件库
dnf repolist all # 查看系统中可用和不可用的所有DNF软件库
dnf list # 列出所有的rpm软件包
dnf list installed # 列出所有已安装的rpm软件包
dnf list available # 列出所有可供安装的rpm软件包
dnf search package # 搜索软件库中的rpm包
dnf provides /bin/bash # 查找某一文件的提供者(查找bash的提供者)
dnf info package # 查看软件包详情
dnf grouplist # 查看所有的软件包组