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

应用程序的结构形式:源代码:包含了整个应用程序完整的编程语言的所有代码的文本文件集合;使用源代码安装应用程序:编译开发环境:编译器(gcc, GNU C Compiler),开发库,头文件,...预处理(预处理器) --> 编译(编译器) --> 汇编(汇编器) --> 链接(链接器) -->可以直接在CPU上运行的二进制程序文件;API:Application Programing Interface,应用编程接口;POSIX:POS, Portable Operating System, 可移植操作系统;ABI:Application Binary Interface,应用二进制接口;MySQL:windows系统:exe, msiUnix-like:ELF应用程序编程语言:系统级编程语言:C/C++/go应用级编程语言:Java/Python/perl/ruby/PHP/bash通常情况下,源代码文件是多个文件文档,而且这些文档之间存在着某种联系,可以通过软件项目构建工具,自动的根据程序员提供的文件之间的依赖关系,自动完成应用程序编译;软件项目的构建工具:C/C++:makeJava:mavenPython:buildout二进制:将源代码经过一系列的编译、汇编、链接等操作之后,得到的可以直接执行的二进制程序及与之相关的其他文件;程序包:使用分包的方法,将已经编译过的二进制文件及与之相关的其他文件,根据功能分别放入不同的程序包中,以供终端用户自行选择所需功能;并且可以自动的将用户选择的程序包中的文件展开到指定的目录中;也可以在卸载应用程序时,自动将所有文件统一删除;程序包管理器:方便终端用户进行程序的安装、卸载、升级、安装信息查询及校验等工作;不同的Linux的发行版本中,有不同的程序包管理器:Debian:dpt, Debian Package Toolkits;.deb后缀名的软件包;Redhat:rpm, RedHat Package Manager;.rpm后缀名的软件包;rpm成为Linux系统中的程序包管理的行业标准;rpm is Package Manager;rpm使用perl语言编写的,后来又使用C语言将其重写;S.u.S.E:rpm, .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.rpmVERSION: 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.rpmfunction:devel:开发包;utils:工具包;libs:共享库包;manual:离线帮助文档包;...程序包的依赖关系:程序包的安装顺序,被需要的应该先被安装;X,Y,Z --> AA --> B,C B --> X依赖地狱;程序包管理的前端工具:就是为了解决各个程序包之间的依赖关系,阻止依赖地狱出现;各个发行版中的前端工具:RHEL/CentOS系统:yum,Yellow dog Update Modifieryum在实施程序包安装、升级、卸载等过程中,会开启事务;事务一般具有四个特性: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/rpmrpm程序包的获取途径:1.系统的发行版关盘;2.官方的文件服务器或者镜像站点;阿里云镜像网易镜像搜狐镜像...3.某个应用程序项目的官方站点;4.第三方组织制作的rpm程序包站点:Fedora EPEL:Extra Package for Enterprise Linux;红帽官方的社区组织,通常来说,在上述的镜像站点中也会包括EPEL镜像;5.某些专用的搜索引擎:http://pkgs.orghttp://rpmfind.nethttp://rpm.pbone.net6.自己动手制作rpm程序包;注:除了自己制作的rpm程序包之外,建议在获取程序包后,对其实施完整性校验;

软件包管理器(2)
rpm和yum两个命令行工具

rpm命令行工具:
rpm - RPM Package Manager

QUERYING AND VERIFYING PACKAGES:rpm {-q|--query} [select-options] [query-options]rpm {-V|--verify} [select-options] [verify-options]

INSTALLING, UPGRADING, AND REMOVING PACKAGES:
rpm {-i|--install} [install-options] PACKAGE_FILE ...

   rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...rpm {-F|--freshen} [install-options] PACKAGE_FILE ...rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts][--notriggers] [--test] PACKAGE_NAME ...

安装:rpm {-i|--install} [install-options] PACKAGE_FILE ...
install-options
-h,--hash:用"#"表示安装进度条;
--force:强制安装进行,无论是否有错误发生;不建议使用;
--test:并非真正安装程序包,仅仅是测试安装过程是否能够正常进行;dry run
--nodeps:忽略因为依赖关系导致的安装错误;不建议使用;
--replacefiles:在安装程序包时,程序包中的文件会直接替换已经存在的文件;若不使用该选项,在安装程序包中的文件之前,先将原有的同名文件改名为filename.rpmsave;
--replacepkgs:无需卸载已安装程序包而重新安装之;
--noscripts:在安装前及安装后均不允许安装相关脚本;
--nopre:
--nopost:
--nosignature:跳过校验程序包来源的合法性;
--nodigest:跳过校验程序包完整性;
--oldpackage:降级安装,指定的安装的程序包的版本低于当前已经安装的程序包的版本;

示例:]# rpm -ivh finger-0.17-52.el7.x86_64.rpm

升级:
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:httpftpfile...yum是C/S架构的模型,服务器端其实就是软件仓库,客户端需要在指定的配置文件中填写正确的URL,以能够通过正确的协议访问到软件仓库中的各程序包;在服务器上,软件仓库其实就是一个目录,在目录中包含了程序包文件及与这些程序包对应的元数据文件;所有的元数据文件统一放置于名为"repodata"目录中;程序包的元数据通过createrepo命令来构建:createrepo命令:createrepo - Create repomd (xml-rpm-metadata) repositorycreaterepo [options] <directory>在客户端上,使用配置文件到服务器的URL的指向;yum的主配置文件:/etc/yum.confyum的片段配置文件:/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命令行工具:
yum - Yellowdog Updater Modified
command is one of:

  • install package1 [package2] [...]
  • update [package1] [package2] [...]
  • update-to [package1] [package2] [...]
  • update-minimal [package1] [package2] [...]
  • check-update
  • upgrade [package1] [package2] [...]
  • upgrade-to [package1] [package2] [...]
  • distribution-synchronization [package1] [package2] [...]
  • remove | erase package1 [package2] [...]
  • autoremove [package1] [...]
  • list [...]
  • info [...]
  • provides | whatprovides feature1 [feature2] [...]
  • clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
  • makecache [fast]
  • groups [...]
  • search string1 [string2] [...]
  • shell [filename]
  • resolvedep dep1 [dep2] [...]
    (maintained for legacy reasons only - use repoquery or yum provides)
  • localinstall rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use install)
  • localupdate rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use update)
  • reinstall package1 [package2] [...]
  • downgrade package1 [package2] [...]
  • deplist package1 [package2] [...]
  • repolist [all|enabled|disabled]
  • repoinfo [all|enabled|disabled]
  • repository-packages <enabled-repoid> <install|remove|remove-or-rein‐
    stall|remove-or-distribution-synchronization> [package2] [...]
  • version [ all | installed | available | group- | nogroups | grouplist |
    groupinfo ]
  • history [info|list|packages-list|packages-info|summary|addon-
    info|redo|undo|rollback|new|sync|stats]
  • load-transaction [txfile]
  • updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates |
    exclude-all | check-running-kernel]
  • fssnapshot [summary | list | have-space | create | delete]
  • fs [filters | refilter | refilter-cleanup | du]
  • check
  • help [command]

    常用选项:
    -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/huliheeyu/2095846

CentOS程序包管理、上相关推荐

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

    程序包管理: 应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 程序包管理器: 方便终端用户进行程序的安装.卸载.升级.安装信息查询及校验等工作: 不同的Linux的发行版本中,有 ...

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

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

  3. Linux下程序包管理工具RPM

    实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 RPM 是 Red Hat Package Manager 的缩写,本意是Red Ha ...

  4. Kubernetes之(二十)Helm程序包管理器

    目录 Kubernetes之(二十)Helm程序包管理器 概念 部署Helm 下载helm 部署Tiller helm的使用 chart 目录结构 chart模板 定制安装 MySQL chart c ...

  5. Linux 程序包管理-YUM

    前端工具YUM管理程序包:   rpm管理软件虽然方便,但是需要手工解决软件包的依赖关系:很多时候安装一个软件需要首先安装一个或多个(有时多达上百个)其它软件,手工解决很复杂:使用yum可以解决这个问 ...

  6. Linux程序包管理(rpm)

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

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

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

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

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

  9. 软件版本命名sig_LIUNX中程序包管理

    LIUNX中程序包管理 此内容仅为笔记,这一两天给会重新整理补充上操作示例. 一.基础 1.程序描述: 第一种描述: 程序+数据 第二种描述: 算法+数据结构 2.程序的组成部分: ​ 1.二进制程序 ...

最新文章

  1. 清华大学发布首个自动图机器学习工具包 AutoGL,开源易用可扩展,支持自定义模型...
  2. Jmail 64bit 64位 不支持
  3. learn python the hard way习题31~40总结以及列表的扩展知识
  4. 无旋treap的简单思想以及模板
  5. 【MySQl】MyISAM和InnoDB索引对比
  6. ABP框架详解(三)Domain
  7. Android中TextView中string的特殊符号显示的方法
  8. 加密算法—MD5、RSA、DES
  9. 【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)
  10. PP视频怎么把输出声音设置成单声道输出
  11. ajax获取session值_java程序员你真的了解session与cookie吗?
  12. Unity协程实现分析以及Lua协程与Unity协程的混合使用
  13. 实现手机访问网站时点击手机号码直接拨打电话的功能
  14. 记录服务磁盘满了清理记录
  15. 小组取什么名字好_有创意的小组名有哪些
  16. linux内核函数 ffs,linux内核中的宏ffs(x)
  17. 【论文笔记】Bullseye Polytope: A Scalable Clean-Label Poisoning Attack with Improved Transferability
  18. 局域网win7计算机如何互访,局域网Win7与WinXP电脑不能互访怎么办?
  19. 宽带连不上网原因及解决办法
  20. Echart自适应图表大小和字体大小

热门文章

  1. 数据挖掘(NUFE理论版)
  2. ios wifi 定位_iOS中三种定位方式
  3. 如何用ChatGPT做品牌联名方案策划?
  4. 这段时间做的简单dp题目(部分)
  5. 免费CMS插件文章采集伪原创发布插件
  6. obs多推流地址_如何用OBS将腾讯会议推流到一直播上进行直播
  7. 每日小技巧~教你如何用 Python 快速批量转换 HEIC 文件
  8. mysql数据库范围之内_是mysql范围
  9. 微信小程序-JavaScript 3DES对称加密算法加密使用
  10. P7456 [CERC2018] The ABCD Murderer (ac自动机+线段树优化dp/反向st)