-linux-软件包管理
一 软件包介绍
与Windows类似,在linux系统上也可以安装各种应用程序,或称软件包,Linux下软件包分为三类
分类 | 安装 | 特点 |
---|---|---|
rpm包 | 预先编译打包,安装简单 | 通常软件的稳定版会被官方做成rpm,所以软件版本较低 |
源码包 | 手动编译打包,安装繁琐 | 软件版本丰富,可选择性强 |
二进制包 | 解压即可使用,安装简单 | 不能修改源代码 |
二 rpm包管理
1 什么是rmp包
在主流的Linux系统上,多数软件的安装、升级、移除以及维护工作都是RPM软件包管理程序来完成的,那什么是RPM软件包呢?
RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat 的标志,但是其原始设计理念是开放式的,通常软件的稳定版会被官方做成rpm,所以软件版本偏低。
rpm包格式
rpm包格式举例
# 例1 mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm
软件包名:mysql-connector-odbc
版本号Version:5.2.5
发布版本Release:8.el7
平台:el7.x86_64
后缀:.rpm
# 例2
abrt-python-doc-2.1.11-57.el7.centos.noarch.rpm
abrt-python-doc #软件包的名称
2.1.11 #软件的版本
57 #软件编译之后的发布的次数
el7 #适合的操作系统的版本
noarch #适用于不同版本的CPU
.rpm #后缀名
RPM闭包使用的平台
# 查看自己当前的平台以及系统版本
[root@arther-linux /]# uname -m
x86_64
[root@arther-linux /]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
管理RPM包有两种命令
# 1.rpm命令:
需要自己找到rpm包,并且手动解决包的依赖性关系
ps: 实际情况下,很难分辨缺少什么依赖包
# 2.yum命令:
相关rpm包事先都被存放于一个仓库里,仓库包含了所有的依赖包,所以yum按照可以帮我们解决依赖性 问题。
# 具体联系与区别
rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
RPM包获取
如果没有挂载,文件目录与外设硬件目录是两个概念,无法以软件操作系统的指令去打开硬件目录,如
[root@arther-linux /]# ls /dev/sr1
/dev/sr1
# 所以需要挂载,实现外设硬件的目录与操作系统软件目录的拼接(映射关系),将镜像中该目录下的文件挂载到opt中。
# 1.本地的ISO镜像光盘(软件包可能存在版本偏低情况) : 挂载镜像有以下三种方式
方式1:
[root@localhost ~]# mount /dev/cdrom /opt/
方式2:
[root@localhost ~]# mount /dev/sr0 /opt/
# 如果有两个光驱
[root@localhost ~]# mount /dev/sr1 /opt/
方式3:
[root@localhost ~]# mount -o loop /xxx.iso /opt
查看光盘里的rpm包
[root@localhost ~]# ls /opt/Packages/
# 2.自己去网上下载rpm包进行安装
# 3.联网从yum仓库里获取rpm包 # yum的时候
三 rpm命令
选项
#1、安装:rpm -ivh <RPM包名全称>
#2、卸载:rpm -e <RPM包名>
#3、升级:rpm -Uvh <RPM包名>
#4、查询:
rpm -qa # 查询系统中安装的所有RPM软件包
rpm -qa | grep php #检索系统中已经安装有关php的软件包
rpm -q RPM包名 #查询指定软件包是否已安装
[root@arther-linux ~]# rpm -q zip
zip-3.0-11.el7.x86_64
rpm -qi RPM包名 #查询系统中已安装包的描述信息
rpm -ql RPM包名 #查询系统中已安装包里所包含的文件
rpm -qc RPM包名 #查询指定软件包的所有配置文件
rpm -qd <RPM包名> #查询某个包安装的帮助文档
rpm -qf 文件路径 #查询系统中指定文件所属的软件包
[root@arther-linux ~]# rpm -qf /usr/sbin/ifconfig
net-tools-2.0-0.25.20131004git.el7.x86_64
-p #在上述选项的基础上加选项-p,就可以查看尚未安装的rpm包信息
额外选项
--nomd5 # 不检验软件包的签名
--nodeps # 忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装 [root@localhost ~]# rpm -e dos2unix --nodeps # 忽略依赖关系
--force # 强制安装软件包,只有安装和升级可以强制执行
安装
#1、rpm包在本地
[root@egon ~]# mount /dev/sr0 /opt
[root@egon ~]# rpm -ivh /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
#2、rpm来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired,请先 将系统时间修改正确,然后再安装即可
[root@egon ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0- 2.el7.x86_64.rpm
安装与依赖性
[root@egon ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要
httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64
需要
libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 [root@egon ~]#
# 解决思路:安装提示的库,将依赖的库全部安装,安装
升级rpm包
#1、下载一个低版本、一个高版本
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent- 3.0.9-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent- 4.2.0-1.el7.x86_64.rpm
#2、先安装低版本
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
#3、再安装高版本,会报错
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
#4、如果采用--force选项,那就是强制安装,会同时存在两个版本,该方案不可取
[root@egon ~]# rpm -qa |grep zabbix zabbix-agent-3.0.9-1.el7.x86_64
[root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force 。。。安装成功。。。
[root@egon ~]# rpm -qa |grep zabbix # 同时两个版本共存
zabbix-agent-3.0.9-1.el7.x86_64
zabbix-agent-4.2.0-1.el7.x86_64
#5、重来,采用升级方式安装
[root@egon ~]# rpm -e zabbix-agent-3.0.9-1.el7.x86_64
[root@egon ~]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64
[root@egon ~]# rpm -qa |grep zabbix
[root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
[root@egon ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
# 清理老版本,安装新版本。。。
[root@egon ~]# rpm -qa |grep zabbix-agent
# 只留下一个新版本
zabbix-agent-4.2.0-1.el7.x86_64
[root@egon ~]#
三 yum管理RPM包
1 yum介绍
yum自动解决依赖关系
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关 系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
查看yum命令与配置文件
[root@arther-linux /]# rpm -q yum
yum-3.4.3-168.el7.centos.noarch
[root@arther-linux /]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
yum命令常用选项
常用选项说明:
#仓库
yum repolist # 查询可用仓库
yum repolist all # 查看包括已启用或禁用的所有仓库状态
# 关闭与启用仓库:本质:都是在修改repo文件中的enable的值 0 不启用 1 启用
yum-config-manager --disable epel #关闭仓库epel
yum-config-manager --enable epel #启用仓库epel
#查看
yum list # 列出可用仓库中所有的软件包
yum list | less yum grouplist # 列出可用仓库中的软件组
yum provides /usr/sbin/ifconfig
# 查询命令所属的软件包,可以不加路径,只写 命令名字
# 与rpm -qf的区别在于yum provides后可 以只跟命名名
#安装
yum install httpd httpd-tools # 加上-y选项可以变成非交互
yum groupinstall "开发工具" -y
# 安装软件组,一个软件组中包含了多个软件包
yum groups install "开发工具" -y #同上
#恢复
yum reinstall httpd # 不小心删除了配置文件的时,可以reinstall一下
#更新
yum check-update # 检查可以更新的软件包
yum update -y # 更新所有软件包,包括内核,通常只在刚装完系统时执行
yum update NetworkManager.x86_64 -y # 更新某个软件包
#缓存
yum makecache # 制作元数据缓存
yum clean all # 清理元数据缓存
vim /etc/yum.conf # 默认软件包下载安装后会自动删除
# 设置keepcache=1 即开启了软件包缓存
# 缓存目录为配置文件中指定的cachedir
# 历史记录
yum history # 查看执行过的yum命令历史记录
yum history info ID号 # 查看具体某一条yum命令的详细信息
yum history undo ID号 # 撤销执行过的历史命令
# 关于安装需要注意:
无论yum安装的软件来自何方,yum时刻以自己仓库中的repodata存储的依赖关系为准,如果有多个仓库,就 依次检索
#1、yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba- 4.8.3-4.el7.x86_64.rpm
#2、Yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
要使用yum前,需要准备一个yum源(我们也称为yum仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm的软件包.一台linux,可以添加N多个yum源, 能搜索的软件包数量就是N个yum源之和.系统常见yum
1.自定义的本地源
2.网络上的源头,如:base基础源、epel扩展源、与服务相关的源(官网)