Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器

在Linux中如何安装、升级、卸载软件,是我们日常运维中重要的组成部分。接下来一CentOS6系统为例,讲解如何使用 RPM 包管理器,yum包管理器以及源码的方式来管理我们的软件包。

一、相关的背景知识

许多程序的源程序,例如使用C语言编写的源代码,要经过预处理,编译,汇编,链接才能生成真正的可执行程序(二进制),才可以使用。为了简化这样的过程,就出现了所谓的包管理器。它出现的目的是:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。

一个包管理器应该具有如下组成部分:

1、数据库:这里面包括了 软件名、版本、依赖关系、功能描述、安装生成的各文件的路径、和校验软件来源和数据完整性的校验码。

2、程序的组成清单:这里最主要的是软件在安装、卸载前后所运行的脚本。

安装程序的时候为什么会出现依赖性?

由于Linux的程序或者说是工具都是由其他小程序或小工具组成,这是Linux的特性之一。正是由于这个特性决定了我们在安装一个软件包的时候,可能会依赖其他程序的库文件和头文件。# 在Linux中使用 ldd 命令来查看一个二进制程序(可执行文件)遵循EIF格式

[root@server ~]# ldd `which pwd`

linux-vdso.so.1 =>  (0x00007fff62df0000)   # 指程序的起始入口

libc.so.6 => /lib64/libc.so.6 (0x0000003508400000)

/lib64/ld-linux-x86-64.so.2 (0x0000003507c00000)

程序包一般都包括:二进制程序,库文件,配置文件,帮助文件这些信息。

二、RPM包管理器

在CentOS中的包管理器是RPM(RPM is Package Manager),具有上面包管理的组成和功能。

1、RPM包命名格式

所有的RPM包文件都是以.rpm结尾的。具体的命名格式:

name-version-relase.arch.rpm字段含义

name程序名

version程序源码编号。分别代表主版本号,副版本号,发行号

releaserpm自身的发行号,与程序源码的发行号无关,仅用于标识对 rpm包不同制作的修订;同时,release还包含此包适用的OS

arch适用于的硬件平台,主要有:i386, i486, i586, i686,x86_64,powerpc,noarch(依赖于虚拟机)

例如:bash-4.2.3-3.centos6.x86_64.rpm

2、rpm包的合法性验正

包制作者制作完成之后会附加数字签名于包上;验证主要包括 来源合法性、包的完整性。

具体原理:

包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。通过数字证书的方式验证来源合法性,通过提取验证码是否正确来判断完整性问题。

验正过程:

前提:必须有可靠机制获取到包制作者的公钥;

1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;

2、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;

3、RPM分包管理

试想一下,例如:一个程序总共有50个小功能,难道在打包的时候都打包到一个文件中去吗? 如果是这样,我们仅用到其中的5,6个功能,却安装了50个包,造成了空间浪费。所以,RPM包提供了分包的功能,从一定程度上解决了这个问题。

一般是有一个主包,提供基本功能;其他功能分别打包成不同的包文件来使用。

三、RPM包管理器的使用

RPM包管理器都是使用rpm命令(前端工具)来实现的,下面从不同角度介绍此命令的常用选项。

1、安装程序包

以安装 lftp 来示例。

fe99c8cc68aa530a64b8cefc27ca83e0.png

当然在安装过程中没有出现依赖关系,如果出现依赖关系,则需要安装依赖软件包。

--test:此时软件是否可以安装

ea454730292d0a0a0bc272b98a551401.png

重新安装:--replacepkgs 如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew

如果依赖于其它包:1、解决依赖关系;2、忽略依赖关系能安装上,但有可能无法运行;使用--nodeps 参数。rpm -ivh --nodeps 软件包文件名

2、卸载程序包

常用用法:rpm -e package_name

d27e8fbaeabfec2863d3c1dd2dfb1586.png

如果被其它包所依赖:1、将依赖于此包的所有包一并卸载;2、忽略依赖关系能卸载,但依赖于此包程序包可能会运行不正常,使用 --nodeps 参数。

如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留

3、升级软件包

用法:rpm -Uvh | -Fvh /path/to/package_file

1、升级或安装

-Uvh:如果软件包不存在则安装,如果存在则升级。

2、纯升级

-Fvh:如果软件包不存在则什么都不干,如果存在则升级。

如果有时候升级有问题,则可以使用 --force: 强制升级。

注意:不应该对内核执行升级操作,而是安装。因为系统允许多内核并存,所以万一升级失败,还可保证系统不出现问题。

4、查询功能

rpm的查询功能可能是我们在软件包管理方面使用最多的。

1)对已安装的软件

-q:查询软件包是否安装

-qa:查询系统已安装的包

ecb6104b0d7933723f01a153f06c5a90.png

-qi:查询包的描述信息

ca6334171dbea56c013b7ffecc8a29d9.png

-ql:列出软件包所安装的所有文件

992732f2e9e7f35c91e4c2cc443d46d0.png

-qc:列出软件包所安装的配置文件

-qd:列出软件包所安装的帮助文档

d4ba8b2a199338326e323deb1b5920f4.png

-q --scripts:查询软件安装时所执行的脚本

afc1a174addd81615037c097dfe7b8ef.png

-qf:查询某文件是由哪个包安装生成的

73e78e28c99d21928c84b58df6db57c7.png

2)对未安装的软件

查询功能和已安装的一样,只是加入-p选项。

-pq -pqi -pql -pqd -pqc 等参数,同上述功能。

5、校验

用于检查包安装生成的文件属性是否发生变化

rpm -V package_name[root@server Packages]# rpm -V lftp

S.5....T.  c /etc/lftp.conf

# 常见属性如下:如果某属性无变化,则显示为.

# S file Size differs

# M Mode differs (includes permissions and file type)

# 5 digest (formerly MD5 sum) differs

# D Device major/minor number mismatch

# L readLink(2) path mismatch

# U User ownership differs

# G Group ownership differs

# T mTime differs

# P caPabilities differ

6、rpm包来源合法性及完整性检验:

前提:在当前系统上导入包的制作者的公钥

导入:rpm --import /path/to/key_file

# rpm -qa gpg-pubkey*

显示所有已经导入的gpg格式的公钥

# rpm -qi gpg-pubkey-NAME

显示公钥的详细信息

2f7a1f1ee53c8beea276e6c323dd6d5e.png

检查包:安装过程中会自动执行

手动检查:# 完整性和合法性检查

[root@server Packages]# rpm -K lftp-4.0.9-1.el6.x86_64.rpm

lftp-4.0.9-1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

# 不检查来源合法性:

[root@server Packages]# rpm -K --nosignature lftp-4.0.9-1.el6.x86_64.rpm

lftp-4.0.9-1.el6.x86_64.rpm: sha1 md5 OK

# 不检查包完整性

[root@server Packages]# rpm -K --nodigest lftp-4.0.9-1.el6.x86_64.rpm

lftp-4.0.9-1.el6.x86_64.rpm: rsa (md5) pgp OK

7、数据库重建

数据库目录:/var/lib/rpm

ad8499c933beb88aa3db8c2f65fb23b0.png

rpm --initdb:初始化,如果事先没有库,会新建一个;如果有,则不新建;

rpm --rebuilddb: 直接重建,覆盖原有的数据库

总结:个人感觉RPM在安装软件包是使用不多,一般使用查询功能居多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取数组中元素值为偶数的累加和与元素值为奇数的累加和,并计算他们之间的差值

/*** 1.获取数组中元素值为偶数的累加和与元素值为奇数的累加和,并计算他们之间的差值* 1.定义int getNum(int[] arr)静态方法,该方法要求完成* 1.1 获取指定数组arr中元素值为偶数的累加和* 1.2 获取指定数组arr中元素值为奇数的累加和* 1.3 返回偶数累…

嵌入式linux mongodb,小白在Ubuntu安装mongoDB与mongo-c-driver

目的:本人从事嵌入式软件,项目中需要使用MongoDB,最终需要熟悉c-driver的API,小白在搭建环境有些浪费时间,故写这文章让与我同样状态的开发人员学习学习。在Ubuntu上的安装mongodb方法一:sudo apt-get ins…

获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值 * * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印输出

package Day05;import java.util.Scanner;/*** 2.定义main方法:* * 2.1 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值* * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印…

u盘装linux7.2,u盘安装centos 7.2

在Mac环境下,将Linux的ISO镜像生成一个Linux的安装盘,和Linux下差不多,只是Mac下有一些自己的工具。步骤如下:1、在终端下,将ISO镜像转换为DMG格式:$ hdiutil convert -format UDRW -o ~/linux.dmg /tmp/li…

计算分数数组中去掉最低分的平均分,并打印

package Day05;/*** 2.定义一个分数数组:double[] arr {88.5,96,97,74,88.2,58.5,77.9,90,99};* 计算分数数组中去掉最低分的平均分,并打印*/ public class Day05_Demo02_02 {public static void main(String[] args) {double[] arr {88.5, 96, 97, 74…

linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A

如题,在追踪串口中断接收字符接口UART_getc() 到底层,其调用的是 typedef int32_t (*UART_ReadPollingFxn) (UART_Handle handle, void *buffer, size_t size);函数指针,但是该原型我并没有检索到,这个函数的具体实现&a…

1. 定义方法,求出指定元素在数组中出现的次数.

package Day05;import java.util.ArrayList;/*** 3、* c* 1. 定义方法,求出指定元素在数组中出现的次数.* 2. 定义方法,统计数组中出现次数为1的元素一共有多少个。(推荐-遍历数组,然后调用第一个方法,求出数组中每个元素在数组中…

linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播

1.概念前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioc…

求出该数组中特定元素的和,特定元素是指个位和十位不包含7的偶数。

package Day05;/*** 4.* 分析以下需求,并用代码实现:* (1).定义一个int类型的一维数组,内容为{171,72,19,16,118,51,210,7,18}* (2).求出该数组中特定元素的和,特定元素是指个位和十位不包含7的偶数。*/ public class Day05_Demo0…

linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能

说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现?#!/bin/expect#循环1000台机器的IP地址,生成密钥文件authorized_keysfor ip in {cat ip.list}dossh user$ip ssh-keygen -t rsa &…

在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 * (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为: * 去掉一个最高分和一个最低分后 的4个评委平均值。

package Day05;/*** 5、* 需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。* (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为:* 去掉一个最高分和一个最低…

linux系统基础与应用,Linux操作系统:基础、原理与应用

《Linux操作系统:基础、原理与应用》第1部分基础篇第1章操作系统概述/31.1认识操作系统31.1.1操作系统的概念31.1.2操作系统的功能41.2操作系统的发展与现状51.2.1操作系统的发展51.2.2操作系统的分类与现状71.3Linux操作系统概述101.3.1Linux的发展背景与历史101.3…

兔子算法题

package Day05;/*** 6、* 兔子过三个月会成老兔子,第四个月开始老兔子每月都会生一个小兔子* 需求:有一对兔子,从出生起后第3个月起每个月都生一对兔子,* 小兔子长到第三个月后每个月又生一对兔子,* 假如兔子都不死&am…

linux 挂载san存储,新手看招:Linux操作系统下挂载SAN资源

在存储设备上配置好SAN资源后,操作Linux主机服务器1.安装iSCSI驱动程序;2.Linux主机安装iSCSI Initiator;3.配置iSCSI Inititor,主要是IP地址和InitiatorName,这一步得重启进程;#vi /etc/iscsi.confDiscove…

要求将数组中的0项去掉,将不为0的值存入一个新的数组,

package Day05;/*** 7、* 现在有如下一个数组:* int oldArr[]{1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};* 要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,*/ public class Day07_Demo07 {public static void main(String[] args) {int ol…

ccs7调试linux,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先说下我的系统:系统: Ubuntu14.04.1 (AMD64bit)目标板:三兄弟嵌入式F28335旗舰板仿真器:三兄弟嵌入式XDS100V3仿真器CCS版本:CCS v6 linux版 32bitLinux系统必须库&…

遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串

package Day08;import java.util.Scanner;/*** 有如下字符串:"12ab","java","cd","Server78"* 遍历这些字符串,如果字符串没有包含数字的,* 就将字符串中的小写字母转成大写字母并打印字符串*/ public class Da…

湘潭大学-软件工程-选择判断题复习

说明 期末考试单选题和判断题占30分,单选20,判断10分 单选题 选错误的 B依靠松散组合的互联网大众是无法开发出高质量软件产品的 D、所有命名都应尽量使用缩写 C、采用团队的组织方式 D、软件需求一旦确定就不允许变化 以下哪一项是通过运行程序…

大学c语言编程模板,c语言编程模板

《c语言编程模板》由会员分享,可在线阅读,更多相关《c语言编程模板(8页珍藏版)》请在人人文库网上搜索。1、单片机C语言编程模板(基础模板) 程序开始处的程序说明 /* * 年 月曰 程序名: 编写人: 编写时间: 硬件支持: 接口说明: /*…

遍历strs数组,并判断数组中每一个元素的长度, * 将长度为偶数的元素和长度为奇数的元素分别存放在两个集合中,

package Day08;import java.util.ArrayList;/*** 二* 字符串数组strs中包含字符串{"12","345","6789","1","123","4567"},* 创建2个ArrayList集合,* 遍历strs数组,并判断数组中…