RPM包管理

rpm包概述

什么是rmp包

RPM全称 RPM Package Manager 缩写,由红帽开发用于软件包的安装升级卸载与查询.

为什么要学rmp包

就像在windows系统中一样,如果你想要安装一个QQ,安装一个微信,安装一款游戏,首先要去该软件的官网上去下载相关的软件包,通常都是.exe的安装包。还有那种绿色软件包,一下载下来,解压开就能使用无需安装。

那么Linux中也有很多种类的安装包,我们在Linux上也需要安装软件,软件包的种类也有很多,但是最方便,最简单,最简易,速度最快的,也就是rpm包了

rpm包命令规则

tree举例:
tree    -1.6.0   -10.         el7.          x86_64  .rpm
|软件名称|版本号|该版本发布次数|适用的系统版本|系统平台|后缀名

el7适用系统版本(RedHat7,CentOS7)向下兼容,el7版本可以兼容7以下的系统镜像版本.    x86/I386都是32键

Linux中的软件包类型

分类 安装 版本
rpm包 预先编译安装,安装简单 软件版本偏低
源码包 手动编译打包,安装繁琐 软件版本随意
二进制包 解压即可使用,安装简单 不能修改源码
rpm安装:已经编译好的源码包,下载下来后,直接使用,因为编译速度一般赶不上官方发布速度所以版本可能会低于官方版本

rpm命令安装即可版本会低于官方版本源码安装:先编译,将源代码翻译成系统认识的软件,再安装。步骤复比较杂繁琐

二进制安装:绿色软件(免安装)但不是所有程序都有二进制包

一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系;依赖关系并不是Linux特有的, Windows操作系统中也是同样存在的;比如我们在Windows系统中运行3D游戏,在安装的时候,他可能会提示,要安装Direct 9 ;Linux和Windows原理是差不多的。所以被打包的二进制应用程序的组成部分除了二进制文件以外还包括库文件、配置文件(可以实现软件的一些设置)、帮助文件。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询

不管是源码包,还是二进制包,安装时都可能会有依赖关系

系统平台 包类型 工具 自动解决依赖
RedHot/Centos RPM rpm yum
Ubuntu/Debian DPKG dpkg apt

RPM软件包的获取途径

  1. RedHat光盘或官方网站(通过挂载的方式访问)
  2. RPM查询官网网站
  3. Nginx软件官方网站
  4. MySQL软件官方网站

在我们刚开始学习rpm包时,建议先使用本地CentOS7的镜像,但实际生产环境中,都是通过联网的方式获取rpm包。

我们先通过虚拟机加载镜像,然后再linux中执行mount /dev/cdrom /mnt此时会在/mnt/packages目录下看到很多rpm的包文件

检查光盘是否放入光驱

[root@localhost ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ls /mnt/
CentOS_BuildTag  Packages                    RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html    RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                    TRANS.TBL
images           RPM-GPG-KEY-CentOS-6
isolinux         RPM-GPG-KEY-CentOS-Debug-6

# 查看磁盘信息
df -h查看磁盘分区情况,磁盘使用情况,也能查看到挂载设备及目录

# 卸载语法
umount 目标路径
umount /mnt

## 挂载报错
[root@localhost]# mount /dev/cdrom /mnt
mount: no medium found on /dev/sr0
原因:设备文件是空的,里面没有任何内容,光驱没有连接

## 卸载报错
[root@localhost mnt]# umount /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use         the device is found by lsof(8) or fuser(1))[root@localhost mnt]# cd
[root@localhost ~]# umount /mnt
原因:设备繁忙,设备被占用,无法卸载

rpm安装相关命令

# 语法:
rpm [选项] rpm包名
rpm包名:-本地包名:在系统中某个目录下的rpm包
        -远程包名:不用下载,直接使用网站上的rpm包

选项:
-i:         #安装
-v:         #详细信息
-h:         #安装进度 
--test:     #测试是否能够安装成功
--force:    #强制重新安装
--nodeps:   #忽略依赖关系

#安装软件包, 需要指定软件包绝对路径
[root@localhost~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@localhost~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

#在软件包所在目录下可以不指定绝对路径
[root@localhost~]# cd /mnt/Packages/
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

#测试一个软件包是否能在该系统上安装 --test
[rootlocalhost~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

#如果软件包存在, 强制再次安装 --force
[root@localhost~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm

#安装samba服务需要依赖其他组件, 使用--nodeps可重新强制安装但是使用过程中可能会报错缺少依赖组件 --nodeps
[root@localhost~]# rpm -ivh --nodeps  /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

注意:rpm命令管理rpm包的缺点,无法解决依赖关系

rpm查询已安装好的rpm包相关命令

# 语法rpm [选项] rpm包名
rpm -q      #查看指定软件包是否安装
rpm -qa     #查看系统中已安装的所有RPM软件包列表
rpm -qi     #查看指定软件的详细信息
rpm -ql     #查询指定软件包所安装的目录、文件列表
rpm -qc     #查询指定软件包的配置文件
rpm -qd     #查询指定软件包的帮助文档
rpm -qf     #查询文件或目录属于哪个RPM软件
rpm -q --scripts    #查询rpm包安装前和安装后执行的脚本

---和上面选项配合使用----
p:查询未安装的包相关信息
-qip:查看没有安装包的详细信息(指定一个已存在的完整包名或者远程包名)
-qlp:查看没有安装包会生成那些文件(指定一个已存在的完整包名或者远程包名)
-qcp:查看没有安装包会生成哪些配置文件(指定一个已存在的完整包名或者远程包名)
-qdp:查看没有安装包会生成哪些帮助文件(指定一个已存在的完整包名或者远程包名)

#查询vsftpd这个rpm包是否安装
[root@localhost~]# rpm -q vsftpd

#模糊查找系统已安装的rpm包
[root@zls ~]# rpm -qa |grep ftp

#查询vsftpd软件包的相关信息
[root@localhost~]# rpm -qi vsftpd

#查询rpm包所安装的文件
[root@localhost~]# rpm -ql vsftpd

#查询rpm包相关的配置文件
[root@localhost~]# rpm -qc vsftpd

#查询配置文件或命令来自于哪个rpm包
[root@localhost~]# rpm -qf /etc/vsftpd/vsftpd.conf
[root@localhost~]# rpm -qf /usr/sbin/vsftpd

//查询未安装的软件包会产生哪些文件
[root@localhost~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

//查询未安装的软件包会产生哪些文件
[root@localhost~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

#以上查询只能查询已存在 已安装的包,如果没有安装,需要联网查询
[root@localhost~]# yum provides zip
[root@localhost~]# yum provides */ifconfig

RPM包升级命令

选项:
-U:update升级,如果老版本不存在,则安装,如果老版本存在则升级
-f:必须有老版本存在

## 查询当前系统中安装nginx的包(1.10版本)
[root@localhost~]# rpm -qa|grep nginxnginx-1.10.0-1.el7.ngx.x86

## 使用ivh安装nginx 1.12版本的包
[root@localhost~]# rpm -ivh nginx-1.12.0-1.el7.ngx.x86_64.rpm
# 报错如下:因为系统中已存在1.10版本的nginx所以无法使用ivh安装

## 使用Uvh安装,会将已存在的老版本卸载,升级成新1.12版本
[root@localhost~]# rpm -Uvh nginx-1.12.0-1.el7.ngx.x86_64.

RPM卸载命令

# 选项
-e:后面接卸载的包名即可
[root@localhost~]# rpm -qa|grep nginxnginx-1.12.0-1.el7.ngx.x86_64
[root@localhost~]# rpm -e nginx
[root@localhost~]# rpm -qa|grep nginx

#批量删除
[root@localhost~]# rpm -qa|grep mariadb
mariadb-5.5.68-1.el7.x86_64
mariadb-server-5.5.68-1.el7.x86_64
mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost~]# rpm -e $(rpm -qa|grep mariad)
ps:如果卸载rpm包的依赖文件同样被其他rpm包绑定则无法删除

镜像站地址

  1. 阿里云镜像站:http://mirrors.aliyun.com
  2. 网易镜像站:http://mirrors.163.com/
  3. 清华源:https://mirrors.tuna.tsinghua.edu.cn
  4. 中科大源:https://mirrors.ustc.edu.cn/

山林不向四季起誓 荣枯随缘