程序包管理:

应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程;

程序包管理器:

方便终端用户进行程序的安装、卸载、升级、安装信息查询及校验等工作;

不同的Linux的发行版本中,有不同的程序包管理器:

Debian:dpt;Redhat:rpm;S.u.S.E:rpm;Gentoo:借鉴了FREEBSD的portage程序包管理机制,ports方式,emerge工具;ArchLinux:pacman

以CentOS为例,rpm程序包管理器:

rpm程序包的命名规则:

源代码包:

name-Version.tar.gz(纯源代码包)

name-Version.src.rpm(rpm封包的源代码包)

VERSION: Major.Minor.Release

Major:主版本号,通常只有程序进行了重大的功能改进才会修改;

Minor:次版本号,通常在某个主版本中的对某个特定功能进行改进或添加新功能才会修改;

Release:发行版本号,一般修复bug或进行了代码优化都会更改;

如:apache-tomcat-7.0.63.tar.gz

二进制包:

name-Version-[release].[os].arch.rpm

VERSION: Major.Minor.Release

[release]: rpm封包的发行版本号;

[os]: 此程序包所能够支持的操作系统的版本;如:el7(RHEL7,CentOS7), suse11, fedora21, ...

arch: 此程序包所依赖的硬件平台类型:

i386, x86_64(amd64), ppc, sparc, noarch, ...

如:hping3-0.0.20051105-24.el7.x86_64.rpm

在制作rpm程序包时,通常其制作者会根据自己的理解将程序编译后的结果分别放置于不同的rpm包中,用以实现对于该程序的不同需求;将此种封包方式,称为分包技术;一旦程序被分包,则程序包就被分为两类:

主程序包:

name-Version-[release].[os].arch.rpm

子程序包(分支程序包):

name-function-Version-[release].[os].arch.rpm

function:

devel:开发包;

utils:工具包;

libs:共享库包;

manual:离线帮助文档包;

...

程序包的依赖关系:

程序包的安装顺序,被需要的应该先被安装;如果安装包的安装顺序混乱,会导致最后的程序无法使用,导致依赖地狱的出现;

程序包管理的前端工具:

就是为了解决各个程序包之间的依赖关系,阻止依赖地狱出现;

各个发行版中的前端工具:

RHEL/CentOS系统:

yum,Yellow dog Update Modifier

yum在实施程序包安装、升级、卸载等过程中,会开启事务;

事务一般具有四个特性:ACID

所谓事务,即将整个操作过程视为一个不可分割的整体,其中的操作要么全部都执行,要么全部都不执行;

dnf:Fedora22+

Debian/Ubuntu系统:

apt-get:实现安装、卸载、升级、降级等deb包的管理工作;

apt-cache:实现基于关键字进行搜索功能,管理本地缓存及缓存的元数据;

S.u.S.E系统:

zypper

在CentOS系统中,程序包管理器的核心是rpm;

其后端使用rpm命令行工具;

前端使用yum命令行工具或dnf命令行工具;

rpm命令行工具:

功能:

1.将编译好的应用程序的各个文件打包成一个或多个程序包;

2.支持rpm程序包的安装、卸载、升级、降级、查询、校验及程序包信息数据库管理功能;

rpm程序包文件的组成:

1.被封包的程序文件;

2.文件清单;

3.程序在安装或卸载时所需要运行的脚本,共有四种:

preinstall:在正式的安装操作开始之前所需要运行的脚本,标识为"%pre";

postinstall:在安装完成之后所需要运行的脚本,标识为"%post";

preuninstall:在正式的卸载操作开始之前所需要运行的脚本,标识为"%preun";

postuninstall:在卸载完成之后所需要运行的脚本,标识为"%postun";

注:在一个rpm程序包中,并不一定同时有这四类脚本,也可以没有这些脚本;

rpm数据信息的数据库(公共):

目录:/var/lib/rpm

rpm程序包的获取途径:

1.系统的发行版光盘;

2.官方的文件服务器或者镜像站点;

阿里云镜像

网易镜像

搜狐镜像

...

3.某个应用程序项目的官方站点;

4.第三方组织制作的rpm程序包站点:

Fedora EPEL:Extra Package for Enterprise Linux;红帽官方的社区组织,通常来说,在上述的镜像站点中也会包括EPEL镜像;

5.某些专用的搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

6.自己动手制作rpm程序包;

注:除了自己制作的rpm程序包之外,建议在获取程序包后,对其实施完整性校验;

rpm命令行工具:

安装:

-h,--hash:用"#"表示安装进度条;

--force:强制安装进行,无论是否有错误发生;不建议使用;

--test:并非真正安装程序包,仅仅是测试安装过程是否能够正常进行;dry run

--nodeps:忽略因为依赖关系导致的安装错误;不建议使用;

--replacefiles:在安装程序包时,程序包中的文件会直接替换已经存在的文件;若不使用该选项,在安装程序包中的文件之前,先将原有的同名文件改名为filename.rpmsave;

--replacepkgs:无需卸载已安装程序包而重新安装之;

--noscripts:在安装前及安装后均不允许安装相关脚本;

--nopre:

--nopost:

--nosignature:跳过校验程序包来源的合法性;

--nodigest:跳过校验程序包完整性;

--oldpackage:降级安装,指定的安装的程序包的版本低于当前已经安装的程序包的版本;

示例:

安装命令及执行结果为:

升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

相比较而言,两个选项有下列特点:

-U:既可以对已经安装的程序包进行升级或降级安装,又可以在未安装该程序包时进行全新安装;可以包括部分-i安装模式的功能;

-F:仅能够对已经安装的程序包进行升级安装;

install-options

-h,--hash:用"#"表示安装进度条;

--force:强制安装进行,无论是否有错误发生;不建议使用;

--test:并非真正安装程序包,仅仅是测试安装过程是否能够正常进行;dry run

--nodeps:忽略因为依赖关系导致的安装错误;不建议使用;

--replacefiles:在安装程序包时,程序包中的文件会直接替换已经存在的文件;若不使用该选项,在安装程序包中的文件之前,先将原有的同名文件改名为filename.rpmsave;

--replacepkgs:无需卸载已安装程序包而重新安装之;

--noscripts:在安装前及安装后均不允许安装相关脚本;

--nopre:

--nopost:

--nosignature:跳过校验程序包来源的合法性;

--nodigest:跳过校验程序包完整性;

--oldpackage:降级安装,指定的安装的程序包的版本低于当前已经安装的程序包的版本;

注意:

1.强烈建议,不要使用此方法对内核进行升级操作;

2.升级安装程序包可能会带来文件的变化,或引入未知的BUG或漏洞,因此,在实施升级操作之前,必须要进行可行性分析;

卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

注意:卸载程序包时,rpm命令的参数时程序名称而非程序包的名称;

--allmatches:卸载所有能够匹配指定名称的程序包的各个版本;

--nodeps:卸载时忽略依赖关系;

--test:并非真正的卸载而是测试卸载过程是否能够正常完成;dry run

查询:rpm {-q|--query} [select-options] [query-options]

select-options

PACKAGE_NAME:指定要查询的程序名称,不是程序包名称;

-a,--all:查询所有已经安装的程序包名称;

-f,--file FILE:查询指定的文件是由哪个程序包提供的;

-p,--package PACKAGE_FILE:查看尚未安装的程序包文件中的文件清单;

--whatprovides CAPABILITY:查询指定的CAPABILITY是由哪个程序包提供的;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个程序包所依赖;

query-options

--changelog:查询程序包的历次的版本变更记录;

-c,--configfiles:查询指定的程序包中包含哪些配置文件;

-d,--docfiles:查询指定的程序包中有哪些文件文件;

-i,--info:查询指定程序包的相关属性信息;

-l,--list:列表显示;

--provides:列出指定程序包所提供的所有的CAPABILITY;

-R,--requires:列出指定程序包的依赖关系;

--scripts:查询程序包所携带的脚本的内容;

常用的选项组合:

-qa

-qf | -qc | -qd | -ql PACKAGE_NAME

-qpl | -qpc | -qpd | -qpl PACKAGE_FILE

校验:rpm {-V|--verify} [select-options] [verify-options]

校验的状态

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

认证:

rpmkeys --import PUBKEY ...

导入指定的认证密钥的路径;

rpmkeys {-K|--checksig} PACKAGE_FILE ...

检查指定的程序包的数字签名信息;

数据库管理:

rpmdb命令:

/var/lib/rpm

--initdb:初始化数据库

--rebuilddb:从已安装软件包包头重建数据库反向列表

程序包管理的前端工具:

RHEL/CentOS系列发行版Linux中,yum和dnf;

yum命令行工具:

Yellow dog Updater Modifier

软件仓库:Package Repository

在软件仓库中,存放有大量的rpm程序包,将所有的rpm程序包的属性信息提取出来,保存于xml格式的文档之中;

利用URL标记并定位软件仓库的位置,并且可以直接读取和缓存软件仓库中事先创建的xml文档的内容到本地;

URL:统一资源定位符;

schema://[username@]hostname[:port][/PATH/TO/RESOURCE][parameters][flag]

schema:

http

ftp

file

...

yum是C/S架构的模型,服务器端其实就是软件仓库,客户端需要在指定的配置文件中填写正确的URL,以能够通过正确的协议访问到软件仓库中的各程序包;

在服务器上,软件仓库其实就是一个目录,在目录中包含了程序包文件及与这些程序包对应的元数据文件;所有的元数据文件统一放置于名为"repodata"目录中;程序包的元数据通过createrepo命令来构建:

createrepo命令:

createrepo - Create repomd (xml-rpm-metadata) repository

createrepo [options] <directory>

在客户端上,使用配置文件到服务器的URL的指向;

yum的主配置文件:/etc/yum.conf

yum的片段配置文件:/etc/yum.repos.d/*.repo

片段配置文件拥有ini风格的配置模式:即分段式配置内容;

1.使用"[Repositoryid]"唯一标识出软件仓库;

2.其他的配置信息都类似于变量的复制,即key=value;

3.在软件仓库的标记下面的所有的配置信息都针对其上面的仓库生效,直到遇到下一对"[]"为止;

每个片段配置文件中,都可以配置一个或多个仓库的指向;而且,yum程序在查找各个仓库的时候,每一次都可能会查找多个yum仓库,并且从所有的可以使用的仓库中选择所需程序包的最新版本并缓存到本地进行安装、升级等操作;

同一个repoid下的多个仓库被称为镜像,只有一个仓库会被使用;

多个不同repoid的仓库,可以同时被使用;

.repo文件的内容格式:

[repositoryid]

name=Full name of Repository

baseurl=schema1://hostname/PATH

schema2://hostname/PATH

schema3://hostname/PATH

schema4://hostname/PATH

...

enabled={0|1}

gpgcheck={0|1}

gpgkey=schema://hostname/PATH/TO/PUBLIC_KEY

如:gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7

failovermethod={roundrobin|priority}

cost=NUMBER

.repo文件的格式示例:

[myrepo]

name=repository on localhost cdrom

baseurl=

#mirrorlist=

enabled=1

gpgcheck=0

#gpgkey=

yum命令行工具:

常用选项:

-y, --assumeyes:对于yum执行过程中与用户交互的问题,全部以"yes"回答;

-q, --quiet:安静模式,在一次安装事务中,不输出任何信息;

--enablerepo=repoidglob:

即使被指定的repoid是被禁用的,也可以通过该选项将其启用;

--disablerepo=repoidglob:

即使卑职的repoid是被正常启用的,也可以通过该选项将其禁用;

--noplugins:在yum执行过程中,明确指出不使用任何插件;

--nogpgcheck:在yum的执行过程中,明确指出不进行程序包完整性认证;

command:

安装程序包:

* install package1 [package2] [...]

注意:

1.如果启用安装时仅给出程序名称,并没有给出程序版本,平台类型及操作系统类型等信息的话,yum将会搜索所有的处于启用状态的仓库,并找到版本最新的程序包进行安装;

2.如果启用安装时给出的是带有程序版本,平台类型及操作系统类型等信息的程序名称,则在所有的仓库中查找与之完全匹配的程序包进行安装;

3.如果启用安装时给出的是完整的程序包名称,则只查找特定的程序包进行安装;

4.程序包名或程序名可以使用通配符(Globbing), * ? [] [^]

升级和降级安装程序包,让程序包在不同的版本之间更迭:

* update [package1] [package2] [...]

* downgrade package1 [package2] [...]

卸载程序包:

* remove | erase package1 [package2] [...]

查看程序包:

* list [available|installed|all]

查看程序包的相关信息:

* info [...]

清除本地相关缓存信息:

* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

手动构建本地缓存:

* makecache [fast]

显示所有可用的仓库的相关信息,如果缓存消失,则先缓存再显示:

* repolist [all|enabled|disabled]

模糊搜索:

* search string1 [string2] [...]

程序包组管理命令:

* groups [...]

group install

group update

group list

group remove

group info

显示指定程序包的所有的依赖关系:

* deplist package1 [package2] [...]

恢复yum的安装事务:

* load-transaction [txfile]

Fedora提供的第三EPEL仓库,到任何一个镜像站点下载epel-release-latest-7.noarch.rpm程序包,在linux本地使用rpm或yum直接安装,即可在/etc/yum.repos.d目录中生成一个epel.repo的配置文件;

yum的repo配置文件中的常用变量:

$basearch:当前计算机所使用的基础平台架构类型:

i686

x86_64(amd64)

ppc

ppc64

$releasever:当前操作系统发行版本的主版本号:

如:CentOS 7.2-1511,其发行版本的主版本号是7;

CentOS 6.9,其发行版本的主版本号是6;

$arch:平台架构类型

$YUM0~$YUM9:yum内置的可以由用户自定义的10个变量;

http://mirrors.sohu.com/fedora-epel/6/x86_64/

http://mirrors.sohu.com/fedora-epel/7/x86_64/

[epel]

name

baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/

转载于:https://blog.51cto.com/chenliangdeeper/2084298

以rpm为后端及以yum为前端工具的程序包管理器在Linux发行版系统centos中的使用...相关推荐

  1. Linux程序包管理(rpm)

    程序包:由源代码通过编译成CPU可执行的二进制格式,再把这些文件(二进制程序.库文件.配置文件.帮助文件)组织成为一个或有限几个"包"文件. 程序包的组成:1.程序包的组成清单(每 ...

  2. Linux学习笔记:rpm程序包管理

    以CentOS为例,rpm程序包管理器的相关内容如下: CentOS的程序包管理器:     程序包的命名规则:         源代码包:             software_name-VER ...

  3. 程序包管理rpm、yum与简单编译安装程序

    Linux程序包管理 Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装. 程序的组成部分: 二进制程序:程序的主体文件,比如我们运行一个l ...

  4. linux程序包管理rpm,yum和编译安装以及冒泡排序练习

    linux程序包管理: API:Application Programming Interface POSIX:Portable OS 程序源代码--> 预处理--> 编译--> 汇 ...

  5. 11.19 rpm:RPM包管理器

    rpm命令的全称是Red Hat Package Manager(Red Hat包管理器),几乎所有的Linux发行版本都使用了这种形式的命令管理.安装.更新和卸载软件. 概括地说,rpm命令包含了五 ...

  6. Rpm、Yum(程序包管理)

    一.前言 对于普通用户来说,安装一个程序,都可以比较简单的通过双击鼠标或者一条命令就可以完成,但如果没有包管理器,一切操作由用户自行完成,那么过程大概需要下载源码.编译.汇编.链接.将各类配置文件分门 ...

  7. linux 包管理工具dnf,Linux 程序包管理 rpm yum dnf

    Linux程序包管理:包管理器功能:打包,包管理(安装,升级,卸载,查询,校验) 目前Linux中最常见有两种常用工具deb:debian Linux使用 包括ubuntu rpm:Redhat Pa ...

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

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

  9. centos 7 通过yum安装dnf 包管理器

    First From long story 众所周知,dnf包管理方式是Fedora18及其以后代替,yum包管理方式的替代品,并且在性能上,得到了很大的优化,此外,Fedora 的自我生态系统–&g ...

最新文章

  1. Go 学习笔记(65)— Go 中函数参数是传值还是传引用
  2. Cassandra 1.2 发布,NoSQL 数据库
  3. 2019宁波本科计算机招聘工资,@宁波人,76282!2019年度平均工资是这么多,你拖后腿了吗?...
  4. rails 3 使用 cucumber 和rspec 進行 測試
  5. 小时和分钟的正则表达式
  6. php 系统日志,PHP中把错误日志保存在系统日志中(Windows系统)
  7. 改变背景色为苹果绿--保护眼睛
  8. 批量替换文件夹下所有文件的内容
  9. 阿里巴巴上线静态开源站点搭建工具 Docsite
  10. C++ 处理输入输出错误
  11. CentOS7.2中安装rabbitmq
  12. HbuilderX、Hbuilder编辑器如何使用手机调试app
  13. Android 数据库 SQLite
  14. 使用android开发移动学习平台_移动学习平台有几种开发方法,你造吗?
  15. C/C++的流(stream)对象
  16. 《WebGL编程指南》学习笔记——2.使用 canvas 元素
  17. WebStorm设置中文,直接安装官方插件
  18. matlab 发音,MATLAB,MATLAB language,音标,读音,翻译,英文例句,英语词典
  19. 穆利堂推荐机会来了你做好准备了吗?怎么让机会找到你?
  20. cad记忆口诀_42条简单易记的CAD口诀,一天精通入门,七天上手绘图!

热门文章

  1. java 动态代理相关记录
  2. 服务器ahci模式安装系统,u盘装系统硬盘模式怎么设置|u盘装系统BIOS设置ide/ahci方法...
  3. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区
  4. 未来混合云的发展可能有两个方向 | 5G技术研发试验第三阶段规范正式发布
  5. [附源码]java毕业设计网络学习平台
  6. 双冠!网易互娱AI Lab包揽NTIRE 2022高动态范围成像(HDR)两项冠军
  7. 通达信接口服务如何委托下单?
  8. 【源码分享】一键打开禅意生活——电子木鱼微信小程序源码分享
  9. sharepoint 回收站 java_Sharepoint 2013 回收站知识整理
  10. OJ 1168 改写整数