(注:此博文源于夜归人的博客)

程序包管理,rpm、yum的使用

程序包管理的相关概念:

<<===============================================================================================>>

软件包的组成部分:

1、二进制程序:可执行文件

通常安装在 /bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin, /usr/local/sbin 目录之下

2、库文件:

程序的运行依赖于库文件,Linux的核心库是glibc,某些软件也会将自己的核心文件封装成库文件,

以供其他程序调用或二次开发。

Linux下的库分为静态库和动态库,静态库通常以".a"结尾,动态库通常以".so"结尾。

通常安装在 /usr/lib, /usr/lib64, /var/lib, /usr/local/lib 目录下

★库文件也是可执行程序,但不能直接执行,因为库文件没有执行入口,只能被其他文件调用执行。

调用的两种方式:

开发调用:二进制格式的库

运行调用:文本格式的头文件

函数(参数)头文件 /usr/include, /usr/local/include

#inclue stdio.h

链接程序所要查找动态格式的共享对象库时的路径:

/etc/ld.so.conf

/etc/ld.so.conf.d/*.conf

ldd:用于查看程序或者库文件所依赖的共享库列表

ldd [OPTION]... FILE...

例如:

[root@CentOS7 ~]# ldd /bin/cat

linux-vdso.so.1 => (0x00007fffa5ffe000)

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

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

3、配置文件:通常是纯文本文件,用来定义程序的特性。

通常存放在:/etc, /usr/etc, /usr/local/etc 或指定的路径下(配置文件一般无需额外配置)

4、帮助文档:man手册、info文件、README、INSTALL、ChangeLog

man COMMAND

到某路径下查找与命令同名的,通常以.gz结尾的压缩文件的名字

/usr/share/man/

man 的配置文件: /etc/man.config

★总结:如果是指定路径安装程序

例如:/usr/local/nginx

二进制程序:bin、sbin

库:lib

头文件:include

配置文件:etc、conf

帮助文件:man

软件包管理器的两个重要功能:

1、数据库:

软件名和版本

安装生成的各文件路径及校验码

各软件包之间的依赖关系

提供功能性说明

rpm -qi FILENAME

2、提供程序组成格式:

文件清单

安装或卸载时运行的脚本

常见的软件包管理器:

Debian系列:dpkg (DebianPackager) 管理 以.deb 结尾的软件包。

“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。

RedHat系列: rpm ( RPM isPackage Manager ) 管理 以.rpm 结尾的软件包。

以前是RedHat Package Manager的缩写,现在包括OpenLinux、S.u.S.E.以及TurboLinux等

Linux的分发版本都有采用该包管理器,算是公认的行业标准了。

包管理器的基本功能:

制作程序包

安装程序包

查询程序包

升级程序包

卸载程序包

校验程序包

数据库管理

应用程序的安装方式

1、使用包管理器:便捷、易用

2、包管理器的前端工具:yum

3、简单打包的二进制格式:展开到特定路径下

4、使用源代码编译:

rpm包命名格式:

源程序:PackageName-version.tar.{gz|bz2|xz}

version:major.minor.release

通常版本号(Version)有三个:major.minor.release——主版本号.次版本号.发行号

主版本号:是程序的主要功能发生了巨大的改变时才使用;

次版本号:是在程序的部分功能有重大改变时使用;

发行号:是在修复了一些bug,调整了一些属性后进行的升级。

rpm包:name-version-release.arch.rpm

RPM包的Version号和源程序的版本号需要保持一致,这里的release号通常包含rpm的制作发行号,

和源程序本身没有关系,并且这个Release号可能会标明所适用的操作系统平台。

arch指的是安装在哪种主机平台上,常见的主机平台有:

i686、x86_64、amd64、ppc(powerPC)、noarch(不依赖平台)等。

如:bash-4.3.2-6.el6.x86_64.rpm

表明这是一个bash程序包;其源程序的主版本号为4,次版本号是3,发行号2;

它是第6次修正的RPM包;这个包用在RedHat6的Enterprise版上;适用于x86_64的主机平台。

有些没有指定arch的rpm包,可能是通用版本

如:nginx.1.4.16-5.rpm

rpm包的分包:

将程序的某些功能做成独立的包,让用户选择安装

一个程序可能会有许多功能,其中不少功能是用不上的,如某些程序提供了头文件,用来供程序员

进行二次开发,而普通用户根本不需要对该程序进行二次开发,所以只需要安装该程序的配置文件

和二进制文件就即可。

RPM包可以分为主包(核心包)和分包(支包),其中主包的包名遵循RPM包的基本命名规则。

如:主包:bash-4.3.2-2.el6.x86_64.rpm

支包:bash-hello-4.3.2-2.el6.x86_64.rpm

bash-world-4.3.2-2.el6.x86_64.rpm

DNS: bind, bind-devel, bind-libs, bind-utils

程序包来源合法性验证:

源程序:通过md5或sha1验证码验证

rpm包:发行商提供的合法性是可信的

验证包完整性:校验码

验证来源合法:公钥

获取rpm包的途径:

1、发行商的光盘或站点服务器

以CentOS为例:

http://mirrors.163.com

http://mirrors.sohu.com

2、fedora-EPEL

3、项目的官方站点

4、搜索引擎:

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

rpm包管理器的使用:

<<======================================【rpm管理:安装】======================================>>

rpm包管理:安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-v verbose

-vv

-vvv

-h hash,以#的个数显示安装进度,一个#表示2%的进度;

--test: 仅测试,不真正执行安装过程

每个rpm包都提供一个或多个capability,安装一个程序包时可能需要依赖或被别的包所依赖

如果存在依赖:

解决依赖关系:

忽略依赖关系: --nodeps

重新安装: --replacepkgs

原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

实例1:安装程序包

实例2:测试安装程序包

实例3:安装程序包时忽略依赖关系

实例4:重新安装已安装过的程序包

<<====================================【rpm管理:卸载】====================================>>

rpm包管理:卸载

rpm -e或--erase

rpm -e package_name

如果卸载被其他程序所依赖的包

1、把依赖者一同卸载;

2、忽略依赖关系;

--nodeps

--noscrips: 卸载时不运行脚本

3、不再卸载

实例:卸载已安装的程序包

实例:卸载时忽略依赖关系

<<======================================【rpm管理:查询】======================================>>

rpm包管理:查询

查询所有已安装的包:rpm -qa

查询某单个包是否安装: rpm -q package_name

查询包安装之后在当前系统生成的文件列表: rpm -ql package_name

查询某文件是哪个包安装生成的: rpm -qf /PATH/TO/SOMEFILE

查询包安装后生成的帮助文档: rpm -qd package_name

查询包安装后生成的配置文件: rpm -qc package_name

查询包的描述信息:rpm -qi package_name

查询包相关的脚本: rpm -q --scripts package_name

脚本有四类:

preinstall: 安装前脚本

postinstall: 安装后脚本

preuninstall: 卸载前脚本

postuninstall: 卸载后脚本

查询尚未安装的rpm包文件:rpm -qp

查询安装后会生成的文件列表:rpm -qpl /PATH/TO/package_file

查询其简单描述信息: rpm -qpi /PATH/TO/package_file

实例1:查询 lsof-4.82-5.el6.x86_64程序包安装后生成的文件列表

实例2:查询/usr/share/man/man8/lsof.8.gz文件是由哪个包安装所生成的

实例3:查询程序包安装后生成有哪些帮助文档

实例4:查询程序包安装后生成的配置文件

实例5:查询程序包安装完后生成的脚本

实例6:查询bash程序包的描述信息

Name:软件名称

Relocations:在安装时是否可指定安装路径(重定位)

Version:版本号

Vendor:提供商

Release:rpm的发行号

BuildDate:rpm包的制作日期

InstallDate:安装时间

Build Host:在哪个系统上制作的rpm包

Group:包组

SourceRPM:源码的rpm包

Size:包大小

License:许可证

Signature:数字签名(验证来源合法性和包完整性)

Packager:包的制作者

URL:获取源码的网址

Summary:简要说明

Description:略详细的说明

<<======================================【rpm管理:升级】======================================>>

rpm包管理:升级

rpm -U: 升级或安装,如果有旧版程序包,则升级,如果没有,则安装

rpm -F: 仅升级,如果有旧版程序包,则升级,如果没有,则不安装

rpm {-Uvh|-Fvh} /PATH/TO/package_file

--nodeps: 忽略依赖关系

--oldpackage: 降级

--force: 强行安装

注意: 不要对内核执行升级操作

多版本内核可并存,因此,要执行安装操作

实例1:升级程序包,升级过程中提示有依赖关系时忽略,继续更新

实例2:把刚升级的程序包降级为原来的版本

<<======================================【rpm管理:校验】======================================>>

rpm包管理:校验

检查包安装后生成的文件是否被修改过

rpm -V package_name

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

校验软件包来源合法性和完整性

包完整性:通过单向加加密机制(md5|sha1)

来源合法性:通过公钥加密机制(RSA)

导入制作者的公钥:CentOS发行版的公钥在iso文件中

导入命令:rpm --import /PATH/TO/gpg-key-file

检查: rpm -K /PATH/TO/package_file

rpm --checksig /PATH/TO/package_file

--nosignature: 不检查来源合法性

--nodigest:不检查完整性

实例1:分别对程序包安装后生成的文件进行改名和修改操作,然后验证

实例2:导入公钥验证软件包的来源合法性和完整性

<<================================【rpm管理:数据库重建】================================>>

rpm包管理:数据库重建

数据库:/var/lib/rpm/

重建:

rpm --initdb:初始化

如果事先不存在一个数据库,则新建

rpm --rebuilddb:重建

直接重建数据,会覆盖原有的库

程序包的依赖关系:

<<===============================================================================================>>

由于许多程序包之间存在这依赖关系,例如A依赖B,而B又依赖X、Y...

所以使用rpm管理器安装或卸载程序时会有诸多不便,很可能安装一个程序包之后由于所依赖的另外一个程序

包没有安装,造成安装失败,或是卸载程序把被其他程序包依赖的包卸载了,导致其他程序无法运行等……

因此为了解决这一问题,后来便有了程序包的前端管理器,它会自动处理程序包之间的依赖关系

前端管理器:

Debian:apt-get

RedHat:yum (Yellowdog Update Modifed)

dnf:下一代解决依赖关系的程序包前端管理器

文件服务器(共享rpm包):通过yum所支持的文件共享机制,将各rpm包通过文件服务共享

repository:仓库

1、各rpm包

2、依赖关系、程序包安装后所能生成文件列表等元数据文件

yum客户端:

1、配置文件:指定各可用的yum仓库

2、缓存元数据: yum会到各可用yum仓库获取元数据,并缓存至本地

3、分析元数据:根据具体操作请求完成元数据分析,可能包括检查依赖关系,文件列表等信息

4、执行具体操作

客户端配置文件指定对应服务器的访问方式

ftp ftp://server/path/to/repo

http http://server/path/to/repo

nfs nfs://server/nfs_path

file file:///path/to/repository

yum程序的配置文件:

<<===============================================================================================>>

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

/etc/yum.conf

/etc/yum.repos.d/

配置文件格式:

由两段组成,类似windows的ini配置文件

[main]:主配置段

[repo]:仓库配置段

[root@CentOS-6 ~]# cat /etc/yum.conf

[main]

cachedir=/var/cache/yum/$basearch/$releasever #缓存目录

keepcache=0 #删除缓存中已安装的rpm包

debuglevel=2 #调试级别

logfile=/var/log/yum.log #日志文件

exactarch=1 #必须跟当前主机的版本完全精确匹配才安装

obsoletes=1 #过去的,废弃的

gpgcheck=1 #是否检验其来源合法性及数据包完整性

plugins=1 #是否支持插件

installonly_limit=5 #

bugtracker_url= #追踪bug保存的位置

distroverpkg=centos-release

定义一个仓库指向(配置repo):

[repo_ID]

name=仓库描述信息

baseurl=仓库的访问路径

# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE

enabled={1|0}

gpgcheck={1|0}

gpgkey=公钥文件(可以在本地,也可以是服务器端路径)

cost=定义此仓库的开销,默认为1000

例:

repo文件:

[base]

name=CentOS-6 - Base - 163.com

baseurl=http://mirrors.163.com/centos/6/os/x86_64/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

yum配置文件中可用的四个宏:

$releasever: #程序的版本,对yum而言指的是redhat-release版本,只替换为主版本号,RedHat6.5,则替换为6

$arch: #系统CPU架构

$basearch: #系统基本架构,如i686,i586等的基本架构为i386

$YUM0-9: #在系统中定义的环境变量,可以在yum中使用

★宏的作用是变量替换,如:想让不同系统架构都使用同一个repo(通用版本)。

[base]

name=CentOS-$releasever -Base - 163.com

baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

<<=========================================【yum命令】=========================================>>

yum命令

格式:

yum [options] [command] [package ...]

yum的各命令:

repolist [all|enabled|disabled]: 列出所有可用yumrepo

clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存

makecache: 生成缓存

list [all|installed|available]: 列出rpm包

info package_name: 列出包的描述信息

install package_name ... : 安装指定的程序包

reinstall package_name ... : 重新安装指定的程序包

chek-update package_name: 检查可升级的程序包

downgrade package_name: 降级

update package_name: 升级指定的程序包

★直接update 程序包名,将会升级到最新的版本,

如果有多个版本,想升级到指定的版本号,要明确指定版本号

erase|remove package_name... :卸载时所依赖的包也将一并卸载

whatprovides|provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成

history: yum的历史

search KEYWORD:搜索程序包

★安装本地包:

install /PATH/TO/package_file

手动禁止检查来源及完整性: --nogpgcheck

如:

yum install /tmp/finger-0.17-40.el6.x86_64 --nogpgcheck

grouplist: 列出所有包组

groupinstall "group_name": 安装指定的包组

groupremove "group_name" : 卸载指定的包组

groupinfo "package_name": 显示包组相关信息

三个跟开发相关的包组:

Desktop Platform Development :有图形程序时需安装此组

Server Platform Development :服务器平台开发包组

Developmetn tools:开发包组

★提示:

如果系统为CentOS 5,常用的开发包组为"DevelopmentTools" 和 "Development Libraries"

如果系统为CentOS 6,常用的开发包组为"DevelopmentTools" 和 "Server Platfrom Development"

实例1:查看当前系统上所有可用的yum源

实例2:卸载指定的程序包

实例3:检测指定的程序包是否有更新,然后更新程序包

实例4:对指定的程序包进行降级处理

降级完后查看版本:

<<========================================【制作yum源】========================================>>

制作yum源

yum repositories

文件服务器

ftp://hostname/PATH/TO/REPO

http://hostname//PATH/TO/REPO

/PATH/TO/REPO

repodata/

repomd.xml

使用发行版光盘当本地yum仓库:

1、先禁用当前可用的yum仓库,(可把repo配置文件改名)然后执行 yum clean all 命令清空

2、创建一个 local-media-repo 配置文件

[CentOS 6.7 ISO]

name=CentOS 6.7 x86_64 release iso file

baseurl=file:///media/

enable=1

gpgcheck=1

gpgky=file:///RPM-GPG-KEY-CentOS-6

创建本地yum仓库

crepodata是一个目录,里面包含了yum仓库索引文件和rpm包的一些信息。

创建本地yum仓库时使用createropo命令,它会自动创建repodata目录及目录内的数据库文件

createrepo /PATH/DirName

实例:

使用发行版光盘当本地yum仓库

1、先禁用当前可用的yum仓库(修改当前yum仓库配置文件后缀名)

2、插入光盘-->挂载-->

3、在/etc/yum.repo.d/目录下创建repo配置文件local-media-repo,并编辑

4、使用yum repolist 验证,查看当前系统可用yum仓库

转载于:https://blog.51cto.com/maxiaoyu/1694955

马哥-51CTO-Linux培训-0910-程序包管理相关推荐

  1. 程序linux培训,马哥-51CTO-Linux培训-0910-程序包管理

    (注:此博文源于夜归人的博客) 程序包管理,rpm.yum的使用 程序包管理的相关概念: <<=============================================== ...

  2. Linux程序包管理

    一. RPM RPM的全名为"RedHat Package Manager",是由RedHat公司开发的.Rpm是以一种数据库记录的方式将所需要的套件安装到linux主机的一套管理 ...

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

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

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

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

  5. 马哥:linux云计算从入门到精通笔记

    前言 Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.视频游戏控制台.台式计算机.大型机和超级计算机. 互联网Linux运维工作,以服务为中心,以稳定.安全.高效为三个基本点,确保 ...

  6. Linux程序包管理(rpm)

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

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

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

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

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

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

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

最新文章

  1. goldengate使用ASM存放trail文件注意事项
  2. TCP/IP学习笔记(七)四次挥手
  3. Codeforces Round #715 (Div. 2) D. Binary Literature 构造
  4. 九九乘法表Python+Java
  5. 《Python编程从入门到实践》记录之input()函数
  6. RocketMQ在Windows环境下部署(亲测有效)
  7. jQuery 学习-DOM篇(五):jQuery 使用 clone() 方法拷贝 DOM
  8. 五款优质资源网站 每一个都让你欲罢不能
  9. 安装archlinux+cinnamon笔记
  10. max 图片无法拖入3ds_达尔文3号和超级玛丽3号max,怎么选?首选它!
  11. 用户需知:ComingChat的现在和未来——深度解析
  12. 视频教程-20年Nodejs教程零基础入门到项目实战前端视频教程-Node.js
  13. Python软件编程等级考试三级——20220319
  14. UCI计算机工程必修专业课,想问问加州大学欧文分校计算机工程专业怎么样?
  15. 微商成功神器,python程序员教你,一键分析微信好友近期所有信息
  16. aspose转pdf乱码
  17. 最近爆火的一款 PDF 神器!
  18. 最齐全的电子数码高清图片素材,速来收藏
  19. Linux征途——开发工具(下)
  20. 用R语言抓取历史天气数据

热门文章

  1. ITK:获取PointSet的边界框
  2. C语言编写带参数的宏编在三个数找最大数
  3. VTK:Utilities之CheckVTKVersion
  4. Qt Creator从Blender导出3D资产
  5. Qt Creator指定动态属性
  6. OpenGL parallax mapping视差映射的实例
  7. OpenGL textures纹理的实例
  8. QT的QMediaControl类的使用
  9. matlab转向梯形优化设计,转向梯形优化设计matlab程序
  10. python网络编程教学_python网络编程学习初步