程序包管理之rpm

程序包管理器不同公司的发行版:

                        debian:dpt管理器    以”.dpkg“结尾

                        redhat:rpm管理器    以”.rpm“结尾

                        S.u.S.E:rpm管理器     以”.rpm“结尾

  •     rpm包的特点:

                一个程序包的运行,依赖于其他程序包的存在,包与包之间存在很严重的依赖关系,因此我们在用rpm安装某个包时,会提示我们安装其他的 包,安装完所有依赖的包之后才能安装成功,当然我们也可是使用–nodeps选项忽略依赖关系,但可能导致我们的安装包程序不完整,程序不能正常使用,那么如何解决呢?就需要程序包的前端管理工具,yum啦。

        

  •    rpm包的命名格式:

                 name-version-release.arch.rpm

                            release:rpm包的发型号

                                    release.os.2.el17.i386.arch.rpm :兼容redhat7 32位第二次制作的程序包

                                    arch:架构 i386 x64 ppc

                                    noarch:跟平台无关

  •     二进制程序包的组成部分:

                 二进制文件、库文件、帮助文件、配置文件

                        查看二进制程序所依赖的库文件:ldd  `which cmd`

                        查看本机装在的所有可用库文件名及文件路径映射关系:/sbin/ldconfig -p

                        配置文件:.conf 结尾

                        缓存文件:.cache结尾

 

  •     源代码的命名格式:

                    name-version.tar.gz

                    version:major  minor.release   

  •     程序包管理器的功能:

                    将各个编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而更方便的实现程序的安装、卸载、升级、校验等操作。    

  •     程序包的获取途径:

                        1、系统发型版的光盘或者官方服务器

                                    https://www.centos.org/download

                                    http://mirror.aliyun.com

                                    http://mirror.163.com

                                    http://mirror.sohu.com

                        2、项目官方站点

                                    www.apache.org

                                    www.zabbix.com

                        3、第三方组织

                                    EPEL:

                                    搜索引擎:

                                                    http://pkgs.org

                                                     http://rpmfind.net

                                                     http://rpm.pbone.net

  •     rpm命令:rpm option.. packagefile

                        安装:-i     –install

                        卸载:-e    –erase

                        升级:-U    –update    -F    –freshen

                        查询:-q    –query

                        校验:-V    –verify    -K

                        数据库维护:–builddb   –initdb 

                安装详解:

                            rpm -i [install-option] packagefile….

                                    一般选项:

                                            -v:安装过程显示信息

                                            -vv:安装过程显示详细信息

                                            -h:输出显示进度条,每个#表示2%的进度

                                    install-option:

                                            –test:测试安装,可以检查包的依赖性

                                            –nodeps:忽略依赖关系,可以安装成功,但不确定是否能正常使用

                                            –replacepkgs:重新安装,可以配合–force使用

                                            –nosignature:不做检查包签名信息及来源合法性

                                            –nodigest:不检查包完整性信息

                                    rpm包以可以自带脚本,我们也可以针对脚本的安装执行操作:

                                            –noscripts:不安装脚本 

                                            preinstall:安装过程开始之前运行脚本,%pre –nopre

                                            postinstall:安装过程完成之后运行脚本,%post –nopost

                                            preuninstll:卸载过程真正开始执行之前的脚本,%preun –nopreun

                                            postuninstall:卸载过程完整之后运行脚本,%postun –nopostun

                                    当我们误删除一个如/bin/tree 文件,然后使用rpm -ivh 安装时提示如下:

root@cenots6.8  ~ # which tree
/usr/bin/tree
root@cenots6.8  ~ # rm -rf /usr/bin/tree 
root@cenots6.8  ~ # rpm -ivh /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
    package tree-1.5.3-3.el6.x86_64 is already installed       ###提示该包已经安装,此时通过rpm -ivh不能安装
root@cenots6.8  ~ # rpm -ivh /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm --force
Preparing...                ########################################### [100%]
   1:tree                   ########################################### [100%]  ##此时可通过--force强制安装

                                     如上图所示我们可以使用–relpacepkgs 或–force 重新安装,但是此时会覆盖配置文件,那么我们可以采取下面所示的方法:

root@cenots6.8 /media/CentOS_6.8_Final/Packages # rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -tv(预览包内文件)
-rwxr-xr-x   1 root     root        41136 Jan 14  2015 ./usr/bin/tree
drwxr-xr-x   2 root     root            0 Jan 14  2015 ./usr/share/doc/tree-1.5.3
-rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree-1.5.3/LICENSE
-rw-r--r--   1 root     root         4167 Oct 20  2009 ./usr/share/doc/tree-1.5.3/README
-rw-r--r--   1 root     root         3375 Jan 14  2015 ./usr/share/man/man1/tree.1.gz
132 块
root@cenots6.8  /media/CentOS_6.8_Final/Packages # rpm2cpio tree-1.5.3-3.el6.x86_64.rpm | cpio -idv ~/ (释放包内文件到指定路径内)
132 块
root@cenots6.8  ~ # cp ~/usr/bin/tree  /usr/bin/
root@cenots6.8  ~ # ls /usr/bin/tree 
/usr/bin/tree

                           
                升级详解:

                          rpm -U [install-options] PACKAGE_FILE
                          rpm -F [install-options] PACKAGE_FILE

                                        -U:如果包存在则升级,不存在则安装

                                        -F:升级

                                        –oldpackage:降级为老版本

                                        –force:强制升级

                            注意:1、不要对内核做升级操作,linux支持多版本内核并存,直接安装新版本内核即可

                                       2、如果源程序包的配置文件安装后被修改,升级时,新版本的程序包提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供。

                

                    查询详解:

                             rpm -q [select-option][query-options]

                            [select-option]

                                            -a:查询所有已经安装过的包,直接输入包名即可

root@cenots6.8  /var/lib/rpm # rpm -qa tree
tree-1.5.3-3.el6.x86_64

                                            -f file:查看指定指定的文件是由哪个程序包安装的

                                                                rpm -qf  `which ifconfig`

                                            -g:包组

                                            -p:对于未安装的程序包执行查询操作,此时需要输入包的路径及文件名

root@cenots6.8  /var/lib/rpm # rpm -qpl /media/CentOS_6.l_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm 
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz

                                           –whatprovides capability:查看指定的能力由哪个程序包提供    

root@cenots6.8  ~ # rpm -q --whatprovides grep
grep-2.20-3.el6_7.1.x86_64

                                            –whatrequires capability:查询指定的能力被哪些包所依赖

root@cenots6.8  ~ # rpm -q --requires grep
/bin/sh  
/bin/sh  
/sbin/install-info  
/sbin/install-info  
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)

                            [query-option]

                                            –changelog:查询rpm包的changlog日志       

                                            -l,–list:查询指定安装包所生成的文件有哪些

                                            -i,–info:  查询安装包的信息,版本号,大小,所属的包组等。

                                            -c,–configfiles:查询指定程序包提供的配置文件

                                            -d,–docfiles:查询指定的程序包提供的帮助文档

                                            –provides:列出指定程序包所提供的能力

root@cenots6.8  ~ # rpm -qa --provides grep
bundled(gnulib)  
grep = 2.20-3.el6_7.1
grep(x86-64) = 2.20-3.el6_7.1

                                           -R,–requires:查询自己依赖与哪些包

root@cenots6.8  ~ # rpm -qR tree
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit

                                            –scripts:查看程序包自带的脚本片段                   

                    卸载详解:  

                            rpm -e [install-option] package(文件名即可)                                                                   

                                               –allmatches:卸载所有匹配指定名称的程序包的个版本

                                               –nodeps:忽略依赖关系

                                               –test:测试卸载,查看依赖关系

         

                    校验:

                            rpm -V bash 查看这个bash文件是否被修改过      (Va查询所有)

                                            S file Size differs

                                           M Mode differs (includes permissions and file type) 权限

                                           5 digest (formerly MD5 sum) differs     md5改变

                                           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

         

  •          包校验:

                    包来源合法性验正及完整性验正:
                            完整性验正: SHA256
                            来源合法性验正: RSA           

                                  数字签名:加入我们自己制作一个rpm包,制作者第一步使用单项加密技术获取这个包的特征码,特征码是定长的,然后第二步,他会用自己的公钥去加密这段特征码,把特征码加密后附加到文件的后面。

         
                       
使用者拿到包后首先验证其来源合法性,首先拿到制作者的公钥去解密特征码,如果能解密那么就是作者加密的,但是这个包的内容有没有改变查不到,然后我们用
同样的单项加密技术给这个包做计算也会计算出来一个特征码,解密出来也会有一个特征码,二者比较,如果数据没遍,则二者一样

                    公钥加密:
                            对称加密:加密、解密使用同一密钥;
                            非对称加密:密钥是成对儿的
                                    public key: 公钥,公开所有人
                                    secret key: 私钥, 不能公开

                    完整性验证:光盘上面的公钥

                                rpm –import /media/cdrom/RPM-GPG-KEY-Centos-7导入公钥

                                rpm -K package.rpm 手动验证

                    验证:

                               安装此组织签名的程序时,会自动执行验证。

                                手动验证:rpm -k packagefile

     

  •        rpm数据库:

                    数据库重建:
                            /var/lib/rpm
                    rpm {–initdb|–rebuilddb}
                            initdb: 初始化
                            如果事先不存在数据库,则新建之,否则,不执行任何操作
                    rebuilddb:重建
                            无论当前存在与否,直接重新创建数据库                                            

                        

原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/38495

(0)
NarutoNaruto
上一篇 2016-08-22
下一篇 2016-08-22

相关推荐

  • 【26期】Linux第五周学习小总结

        第五周的学习内容很丰富, 从查找到压缩打包,到软件包的管理,其中尤其是以压缩的内容最为丰富,而且庞大的选项让人绝望,那我今天就总结了一下压缩的一些东西,和大家一起分享。     为什么会产生压缩工具呢?因为我们的现在的很多文件会利用到的东西很多,电脑的读存速度也越来越快,一些大的文件在传输和使用上就会很麻烦,虽…

    2017-08-12
  • C语言结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。 为了方便你把代码copy过去编译和调试,我把代码列在下面: final void&n…

    Linux干货 2016-05-29
  • ——-史上最全的Vim命令 ——-vim命令 /正则表达式 /搜索 /定位 /分屏

    一,vim vim编辑器是vi的进阶版,是一个静态文本编辑器。它的强大不逊色于任何最新的文本编辑器,
    对Unix及Linux系统的任何版本,vi编辑器是完全相同的。Vi也是Linux中最基本的文本…

    2017-11-26
  • cache: 缓存相关

    cache: 缓存相关 —————————————————— 以下所陈述的缓存概念多是相对web服务而言 缓存所起的作用就是加速,减轻后端服务器压力。一般而言,我们请求的web服务资源往往不是由后端 服务器所响应的(对于颇具规模的站点来说),而是由前端的缓存服务器所缓存的内容直接响应,所以, 我们得到的资源可能不实最新的,因为缓存的数据于后端服务器不一定时同…

    Linux干货 2016-11-08
  • 马哥教育网络班22期+第6周课程练习

    week6: 请详细总结vim编辑器的使用并完成以下练习题 vim编辑器小结: 1. vim编辑器的模式: vim编辑器有很多模式,常用模式有:Normal,Insert,Command; 通常,打开一个文件,此时所处的就是normal模式;normal模式下可以浏览,修改文件内容; 在任何模式下,只要按ESC就可以返回到Normal模式; Ins…

    Linux干货 2016-09-26
  • 特殊权限

    特殊权限 文件特殊权限 一、SUID(4) SUID:当s这个标志出现在文件所有者的x权限上时,就被称作SUID。 SUID的功能和限制:1、仅仅对二进制程序有效; 2、执行者对程序需要X的执行权限; 3、本权限仅仅在执行该程序的过程中有效; 4、执行者将具有该程序所有者的权限。 5、SUID仅仅可以用在二进制程序上,…

    Linux干货 2016-08-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 10:52

    态度端正,rpm包管理工具中的查询选项需要区别开来,这是比较常用的,需要多加练习,熟练掌握。