RPM包管理

RPM包概述

什么是rpm包

由红帽开发的软件 升级、安装、卸载、查询 工具

为什么要使用rpm

就像在windows系统中一样,如果你想要安装一个QQ,安装一个微信,安装一款游戏,首先要去该软件的官网上去

下载相关的软件包,通常都是.exe的安装包。还有那种绿色软件包,一下载下来,解压开就能使用无需安装。

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

rpm包命名规则

佳豪哥哥教你学Linux的第二十一天_centos

## tree-1.6.0-10.el7.x86_64.rpm
tree:软件名称
1.6.0:版本号
10:该版本的发布次数
el7:适用系统版本(RedHat7,CentOS7)向下兼容
x86_64:系统平台 64位 x86或者i386 :32位
rpm:包后缀名

Linux中软件的安装方式

rpm安装:已经编译好的源码包,下载下来后,直接使用rpm命令安装即可   版本会低于官方版本
源码安装:先编译,将源代码翻译成系统认识的软件,再安装 步骤复杂繁琐
二进制安装:绿色软件(免安装) 不是所有程序都有二进制包

RPM包获取途径

  • 系统光盘镜像/CentOS官网​​TP​

1.检查光盘是否放入光驱

佳豪哥哥教你学Linux的第二十一天_centos_02

# 挂载语法
mount 源设备文件 目标路径
[root@wjh ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only

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

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

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


## 卸载报错
[root@wjh 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@wjh mnt]# cd
[root@wjh <sub>]# umount /mnt
原因:设备繁忙

## 查看挂载结果
#将/dev/cdrom挂载到/mnt/
[root@wjh </sub>]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@wjh ~]# ll /mnt/
total 686
-rw-rw-r-- 1 root root 14 Nov 26 2018 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 Nov 26 2018 EFI
-rw-rw-r-- 1 root root 227 Aug 30 2017 EULA
-rw-rw-r-- 1 root root 18009 Dec 10 2015 GPL
drwxr-xr-x 3 root root 2048 Nov 26 2018 images
drwxr-xr-x 2 root root 2048 Nov 26 2018 isolinux
drwxr-xr-x 2 root root 2048 Nov 26 2018 LiveOS
drwxrwxr-x 2 root root 663552 Nov 26 2018 Packages
drwxrwxr-x 2 root root 4096 Nov 26 2018 repodata
-rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 Nov 26 2018 TRANS.TBL

#查看/mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm的信息
[root@wjh Packages]# ll /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
-rw-rw-r-- 1 root root 47508 Jul 4 2014 /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
  • RPM包查询官方网站​​TP​
  • 其他软件官方网站

rpm命令使用-安装

# 语法:
rpm [选项] rpm包名

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

# 选项:
-i:安装
-v:显示安装的过程
-h:显示安装的进度条
--test:仅测试,不安装
--force:强制安装
--nodeps:忽略依赖关系

# 举例 -i
安装/mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm里的tree
[root@wjh ~]# rpm -i /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

# 举例 -v
显示安装tree的过程
[root@wjh ~]# rpm -iv /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
Preparing packages...
tree-1.6.0-10.el7.x86_64

# 举例 -h
显示安装tree的过程进度条
[root@wjh ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]

# 举例 --test
测试tree能否安装
[root@wjh Packages]# rpm -ivh --test tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]

# 举例 --force --nodeps
[root@wjh Packages]# rpm -ivh --force --nodeps samba-4.8.3-4.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:samba-0:4.8.3-4.el7 ################################# [100%]

## 注意:rpm命令管理rpm包的缺点,无法解决依赖关系
https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/zip-3.0-11.el7.x86_64.rpm

rpm命令使用-查询

# 语法
rpm [选项] rpm包名

# 选项
-q:查看指定的安装包是否安装
--- 以下选项皆要配合-q使用 ---
-a:全部安装过的包
-i:详细信息
-l:列出rpm包相关的配置文件和目录
-c:只查看该软件包相关的配置文件
-d:只查看该软件的帮助文档文件
-f:反向查找,根据配置文件,目录,帮助文档,查找该文件属于哪个包
--scripts:查看安装包,安装之前之后,和卸载之前之后要执行的脚本

--- 和上面选项配合使用 ---
-p:查询未安装的包相关信息

-qip:查看没有安装包的详细信息(指定一个已存在的完整包名或者远程包名)
-qlp:查看没有安装包会生成那些文件(指定一个已存在的完整包名或者远程包名)
-qcp:查看没有安装包会生成哪些配置文件(指定一个已存在的完整包名或者远程包名)
-qdp:查看没有安装包会生成哪些帮助文件(指定一个已存在的完整包名或者远程包名)

# 举例 -q
查看vim-common的安装包是否安装
[root@wjh Packages]# rpm -q vim-common
vim-common-7.4.629-8.el7_9.x86_64

查看tree的安装包是否安装
[root@wjh Packages]# rpm -q tree
package tree is not installed

# 举例 -q -a
查看Packages里全部安装过的包
[root@wjh Packages]# rpm -qa
查看Packages里全部与net相关的包
[root@wjh Packages]# rpm -qa|grep 'net'

# 举例 -q -i 命令组合使用
查看net所有相关的安装包的详细信息的3种方式
[root@wjh Packages]# rpm -qi `rpm -qa|grep 'net'`
[root@wjh Packages]# rpm -qi $(rpm -qa|grep 'net')
[root@wjh Packages]# rpm -qa|grep 'net'|xargs rpm -qi

# 举例 -q -l
列出zip包相关的配置文件和目录
[root@wjh Packages]# rpm -ql zip
/usr/bin/zip

rpm命令使用-升级

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

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

## 使用ivh安装nginx 1.12版本的包
[root@wjh ~]# rpm -ivh nginx-1.12.0-1.el7.ngx.x86_64.rpm
# 报错如下:因为系统中已存在1.10版本的nginx所以无法使用ivh安装
warning: nginx-1.12.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62:
NOKEY
Preparing... ################################# [100%]
file /etc/logrotate.d/nginx from install of nginx-1:1.12.0-1.el7.ngx.x86_64 conflicts
with file from package nginx-1:1.10.0-1.el7.ngx.x86_64
file /usr/sbin/nginx from install of nginx-1:1.12.0-1.el7.ngx.x86_64 conflicts with
file from package nginx-1:1.10.0-1.el7.ngx.x86_64
file /usr/sbin/nginx-debug from install of nginx-1:1.12.0-1.el7.ngx.x86_64 conflicts
with file from package nginx-1:1.10.0-1.el7.ngx.x86_64
file /usr/lib/systemd/system/nginx.service from install of nginx-1:1.12.0-1.el7.ngx.x86_64 conflicts with file from package nginx-1:1.10.0-1.el7.ngx.x86_64
file /usr/libexec/initscripts/legacy-actions/nginx/upgrade from install of nginx-1:1.12.0-1.el7.ngx.x86_64 conflicts with file from package nginx-1:1.10.0-1.el7.ngx.x86_64

## 使用Uvh安装,会将已存在的老版本卸载,升级成新1.12版本
[root@wjh ~]# rpm -Uvh nginx-1.12.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.12.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:nginx-1:1.12.0-1.el7.ngx ################################# [100%]
------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

------------------------------------------------------------
#查看升级后nginx版本
[root@wjh ~]# rpm -qa|grep nginx
nginx-1.12.0-1.el7.ngx.x86_64

rpm命令使用-卸载

# 选项
-e:后面接卸载的包名即可
[root@wjh ~]# rpm -qa|grep nginx
nginx-1.12.0-1.el7.ngx.x86_64
[root@wjh ~]# rpm -e nginx
[root@wjh ~]# rpm -qa|grep nginx
[root@wjh ~]# 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@wjh ~]# rpm -e $(rpm -qa|grep mariadb0)

镜像站地址

1.阿里云镜像站:http://mirrors.aliyun.com

2.网易镜像站:http://mirrors.163.com/

3.清华源:https://mirrors.tuna.tsinghua.edu.cn

4.中科大源:https://mirrors.ustc.edu.cn/

佳豪哥哥教你学Linux的第二十一天_rpm包_03