2.5 软件包的管理(rpm和yum管理)

软件包的管理

软件包的类型:
1、rpm二进制包------》已经使用GCC编译后的
2、tar源码包-----》需要编译
RPM概述:RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、SUSE以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

一、rpm软件包的管理

rpm包的获取方式:
1、Centos系统镜像光盘
2、网站rpmfind.net
3、比如安装mysql、nginx软件,我们可以去它的官方网站下载:http://www.mysql.com
rpm包格式的说明
例:

[chendajie@CHENDAJIE ~]$ ls /mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm 
/mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm
zsh 版本名
-5 主版本号
0 次版本号
2 修订
28 release(第几次发布版本)
e17 操作系统版本
x86_64.rpm 软件包是64位包

【注】修订指是:第几次修改bug。
发布指的是:第几次发布。发布时,可能只是对软件的安装的默认参数做了修改。

安装rpm软件

RPM工具使用分为安装、查询、验证、更新、删除等操作
命令格式:rpm [参数] 软件包
参数:
-i 是install的意思, 安装软件包
-v 显示附加信息,提供更多详细信息
-V 校验,对已经安装的软件进行校验
-h --hash 安装时输出####标记
【问】rpm使用时,什么情况下使用软件包全名,什么时候使用软件包名?
**全名:**在安装和更新升级时使用
包名::对已经安装过的软件包进行操作时,比如查找已经安装的某个包,卸载包等 ,使用包名。它默认是去目录/var/lib/rpm下面进行搜索。 当一个 rpm 包安装到系统上之后,安装信息通常会保存在本地的 /var/lib/rpm/目录下。

1、从本地安装

下面是演示安装zsh的过程
1、先查看系统中可使用的shells

[chendajie@CHENDAJIE ~]$ cat -n /etc/shells
     1  /bin/sh
     2  /bin/bash
     3  /sbin/nologin
     4  /usr/bin/sh
     5  /usr/bin/bash
     6  /usr/sbin/nologin
     7  /bin/tcsh
     8  /bin/csh

2、安装zsh

[chendajie@CHENDAJIE ~]$ sudo rpm -ivh /mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm 
[sudo] chendajie 的密码:
警告:/mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zsh-5.0.2-28.el7                 ################################# [100%]

3、我们再查看一下系统中的shells

[chendajie@CHENDAJIE ~]$ cat -n /etc/shells
     1  /bin/sh
     2  /bin/bash
     3  /sbin/nologin
     4  /usr/bin/sh
     5  /usr/bin/bash
     6  /usr/sbin/nologin
     7  /bin/tcsh
     8  /bin/csh
     9  /bin/zsh

此时可以看到我们可用的shell里面多了一个zsh

2、从网上直接安装centos epel

[chendajie@CHENDAJIE ~]$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[sudo] chendajie 的密码:
获取http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
警告:/var/tmp/rpm-tmp.vvzPb6: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:epel-release-7-12                ################################# [100%]

安装centos epel扩展yum源。
epel源是对centos7系统中自带的base源的扩展。

3、rpm查询功能

用法:rpm -q(query) 常与下面参数组合使用
-a(all) 查询所有已安装的软件包
-f(file)系统文件名(查询系统文件所属哪个软件包),反向查询
-i 显示已经安装的rpm软件包信息,后面直接跟包名
-l(list) 查询软件包中文件安装的位置
-p 查询未安装软件包的相关信息,后面要跟软件的命名
-R 查询软件包的依赖性

1、查询指定的包是否安装

[chendajie@CHENDAJIE ~]$ rpm -q zsh
zsh-5.0.2-28.el7.x86_64

2、查询所有已安装包

[chendajie@CHENDAJIE ~]$ rpm -qa

3、查询所有已安装包中带vim关键字的包

[chendajie@CHENDAJIE ~]$ rpm -qa | grep vim
vim-common-7.4.160-2.el7.x86_64
vim-enhanced-7.4.160-2.el7.x86_64
vim-minimal-7.4.160-2.el7.x86_64
vim-filesystem-7.4.160-2.el7.x86_64

此时使用的管道命令及grep命令
4、查询文件或命令属于哪个安装包
首先我们先查询一下find命令的路径

[chendajie@CHENDAJIE ~]$ which find
/usr/bin/find

然后我们再查询find命令属于哪个安装包

[chendajie@CHENDAJIE ~]$ rpm -qf /usr/bin/find
findutils-4.5.11-5.el7.x86_64

5、查询已经安装的rpm包的详细信息或作用
rpm -qi rpm包名

[chendajie@CHENDAJIE ~]$ rpm -qi lrzsz
Name        : lrzsz
Version     : 0.12.20
Release     : 36.el7
Architecture: x86_64
Install Date: 2019年09月24日 星期二 21时31分01秒
Group       : Applications/Communications
Size        : 184846
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 11时35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : lrzsz-0.12.20-36.el7.src.rpm
Build Date  : 2014年06月10日 星期二 07时29分11秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.ohse.de/uwe/software/lrzsz.html
Summary     : The lrz and lsz modem communications programs
Description :
Lrzsz (consisting of lrz and lsz) is a cosmetically modified
zmodem/ymodem/xmodem package built from the public-domain version of
the rzsz package. Lrzsz was created to provide a working GNU
copylefted Zmodem solution for Linux systems.

6、针对没有安装的RPM包,要加参数: -p

[chendajie@CHENDAJIE ~]$ rpm -qpi /mnt/Packages/php-mysql-5.4.16-42.el7.x86_64.rpm 警告:/mnt/Packages/php-mysql-5.4.16-42.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
Name        : php-mysql
Version     : 5.4.16
Release     : 42.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Development/Languages
Size        : 237331
License     : PHP
Signature   : RSA/SHA256, 2016年11月21日 星期一 04时04分05秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : php-5.4.16-42.el7.src.rpm
Build Date  : 2016年11月06日 星期日 08时38分25秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.php.net/
Summary     : A module for PHP applications that use MySQL databases
Description :
The php-mysql package contains a dynamic shared object that will add
MySQL database support to PHP. MySQL is an object-relational database
management system. PHP is an HTML-embeddable scripting language. If
you need MySQL support for PHP applications, you will need to install
this package and the php package

7、查看rpm安装后,将生成哪些文件

[chendajie@CHENDAJIE ~]$ rpm -qpl /mnt/Packages/zip-3.0-11.el7.x86_64.rpm 
警告:/mnt/Packages/zip-3.0-11.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipnote
/usr/bin/zipsplit
/usr/share/doc/zip-3.0
/usr/share/doc/zip-3.0/CHANGES
/usr/share/doc/zip-3.0/LICENSE
/usr/share/doc/zip-3.0/README
/usr/share/doc/zip-3.0/README.CR
/usr/share/doc/zip-3.0/TODO
/usr/share/doc/zip-3.0/WHATSNEW
/usr/share/doc/zip-3.0/WHERE
/usr/share/doc/zip-3.0/algorith.txt
/usr/share/man/man1/zip.1.gz
/usr/share/man/man1/zipcloak.1.gz
/usr/share/man/man1/zipnote.1.gz
/usr/share/man/man1/zipsplit.1.gz

4、查看软件包内容是否被修改

rpm -V包名
rpm -Vf 文件路径

例:

[chendajie@CHENDAJIE ~]$ which find
/usr/bin/find
[chendajie@CHENDAJIE ~]$ rpm -qf /usr/bin/find
findutils-4.5.11-5.el7.x86_64
[chendajie@CHENDAJIE ~]$ rpm -Vf /usr/bin/find

在Linux中,没有消息就是最好的消息。
【注】如果出现的全是点,表示测试通过
出现下面的字符代表某测试的失败:
5 — MD5 校验和是否改变,你也看成文件内容是否改变
S — 文件长度,大小是否改变
L — 符号链接,文件路径是否改变
T — 文件修改日期是否改变
D — 设备
U — 用户,文件的属主
G — 用户组
M — 模式 (包含许可和文件类型)
? — 不可读文件
再后面的c 文件名,它表示的是文件类型
c 配置文件
d 普通文件
g 不该出现的文件,意思就是这个文件不该被这个包所包含
l 授权文件(license file)
r 描述文件

【小技巧】查看系统中所有的rpm包及安装的文件有没有被黑客修改过

[chendajie@CHENDAJIE ~]$ rpm -Va > rpm_check.txt
[chendajie@CHENDAJIE ~]$ ls
C.Language  rpm_check.txt  test  公共  模板  视频  图片  文档  下载  音乐  桌面

可以看到此时桌面上多了一个文件rpm_check.txt

这个> 表示标准输出重定向。 将rpm -qa 输出到屏幕上的信息重定向到 rpm_check.txt 文件中。
在文件中加一下这个参数描述
注: 检验时参考了 /var/lib/rpm 目录下的rpm数据库信息

5、rpm包卸载和升级

用法:rpm -e(erase) 包名
此处提醒一下,本文中所有加了sudo命令的全部需要使用root权限,sudo命令可以使我们暂时拥有root权限。

[chendajie@CHENDAJIE ~]$ rpm -qa zsh
zsh-5.0.2-28.el7.x86_64
[chendajie@CHENDAJIE ~]$ sudo rpm -e zsh
[sudo] chendajie 的密码:
[chendajie@CHENDAJIE ~]$ rpm -qa zsh
[chendajie@CHENDAJIE ~]$ 

【注意】 --nodeps 忽略依赖,建议在卸载时不要用rpm去卸载有依赖关系的包,应该用yum

升级
因为升级时会有一些依赖包要解决。 所以一般我们使用yum update 包 来升级。

二、YUM的使用

yum(全称为 Yellow dog Updater, Modified)是一个前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记
YUM:解决依赖关系问题,自动下载软件包,它是基于C/S架构
C=client S=ftp\http\file
配置本地yum源在前面的博客中已经说过了,所以此处就不再重复。

1、网络yum源

[chendajie@CHENDAJIE ~]$ sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[sudo] chendajie 的密码:
--2019-10-21 15:52:06--  http://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 116.211.223.244, 116.211.223.242, 116.211.223.243, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|116.211.223.244|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至


: “/etc/yum.repos.d/CentOS-Base.repo”

100%[================================>] 2,523       --.-K/s 用时 0s      

2019-10-21 15:52:06 (557 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])

wget 下载文件 ,-O 将wget下载的文件,保存到指定的位置,保存时可以重新起一个名字,或者直接写一个要保存的路径,这样还用原来的文件名。
网络yum源的配置方法下一篇博客会讲。下面介绍一下yum的使用

2、yum的使用

yum的常用操作:
1)安装软件包

[root@CHENDAJIE chendajie]# yum install -y htpd

2)升级软件包,改变软件设置和系统设置,系统版本内核都升级

[root@CHENDAJIE chendajie]# yum -y update FileName

3)升级软件包,不改变软件设置和系统设置,系统版本升级,内核不升级

[root@CHENDAJIE chendajie]# yum -y upgrade FileName

4)yum -y update 不加任何包,表示整个系统进行升级

5)yum info httpd 查询rpm包作用

6)yum provides /usr/bin/find 查看命令是哪个软件包安装的

7)yum -y remove 包名 卸载包

8)yum search keyword 按关键字搜索软件包
yum报错,注意的几个小问题:
1、确定光盘是否链接,光盘是否挂载
2、配置文件中格式是否正确,字母,符号有没有少写,挂载点和配置文件中设置的是否一致
3、网络源需要联网,操作和RPM类似,只是会自动安装依赖项。

yum安装开发工具软件包组

语法:yum groupinstall GROUPNAME
yum grouplist 显示中文,如果想变成英文,则执行以一下命令

[root@CHENDAJIE chendajie]# LANG=en_US_UTF-8

测试:
首先我们先试试能不能直接装一个开发工具软件组

[root@CHENDAJIE chendajie]# yum -y groups install 'Development'
已加载插件:fastestmirror, langpacks
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: hkg.mirror.rackspace.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
警告:分组 development 不包含任何可安装软件包。
Maybe run: yum groups mark install (see man yum)
指定组中没有可安装或升级的软件包

此时显示的是没有可安装或升级的软件包。
我们讲gcc卸载再试试

[root@CHENDAJIE chendajie]# yum -y remove gcc
[root@CHENDAJIE chendajie]# yum -y groups install 'Development'

							...# 中间省略的一段内容
																				
作为依赖被升级:
  cpp.x86_64 0:4.8.5-39.el7                                               
  libgcc.x86_64 0:4.8.5-39.el7                                            
  libgfortran.x86_64 0:4.8.5-39.el7                                       
  libgomp.x86_64 0:4.8.5-39.el7                                           
  libquadmath.x86_64 0:4.8.5-39.el7                                       
  libstdc++.x86_64 0:4.8.5-39.el7                                         
  libstdc++-devel.x86_64 0:4.8.5-39.el7                                   
  systemtap-client.x86_64 0:4.0-9.el7                                     
  systemtap-runtime.x86_64 0:4.0-9.el7       

此时可以看到的是Development组件已经重新被安装了。同时再次强调,当我们要卸载带有依赖性的安装包时推荐使用yum。

你可能感兴趣的:(Linux学习笔记)