一、概述:
1、Linux下程序包分类:
源码包:程序源代码打包压缩;
二进制包:主流为rpm包和deb包;
2、程序包管理器:
rpm:Redhat Package Manager简写,最早由Red Hat开发,现在也由开源社区开发,程序包格式为rpm,大多数Linux发行版使用的包管理器,如Red Hat系列、SUSE系列等,其前端工具为yum;
dpkg:由Debian社区所开发出来的,软件包格式为deb,大多数Debian系列发行版使用的包管理器,如Debian、Ubuntu等,其前端工具为apt-get;
3、程序包的组成格式:
1)、二进制程序:
/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin,/usr/local/APP/bin,/usr/local/APP/sbin;
注意:有些特殊的应用程序放置于libexec目录中;有些第三方应用默认安装于/opt目录;
2)、库文件(开发库、运行库):
/lib64,/usr/lib64,/usr/local/lib64,/usr/local/APP/lib;
3)、配置文件:
/etc,/usr/local/APP/etc或conf目录;
4)、帮助文件:
/usr/share/man,/usr/local/share/man,/usr/local/APP/man;
4、程序包命名格式:
name:软件名;
version:版本号;
major:主版本号;
minor:次版本号;
release:发行号;
1)、源代码:name-version.tar.{gz,bz2,xz}:
version:major.minor.release
2)、rpm包的命名格式:
name-version-relase.arch.rpm
version:major.minor.release,同源代码;
release:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS;
arch:适用于的硬件平台:
x86:i386,i486,i586,i686等;
x86_64:x86_64;
powerpc:ppc;
noarch:依赖于虚拟机;
5、分包机制:
核心包,主包:命名与源程序一致;
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
6、获取rpm包的途径:
1)、发行的光盘或站点服务器:
镜像:
阿里云开源镜像站: http://mirrors.aliyun.com/
网易开源镜像站:http://mirrors.163.com/
搜狐开源镜像站:http://mirrors.sohu.com/
2)、项目的官网:
源代码,rpm包;
3)、很多第三方机构或个人制作并公开发布许多rpm包;
http://rpmfind.net
http://rpm.pbone.net
可靠的途径:EPEL
Fedora-EPEL
二、包管理器的功能:
rpm包管理器的常见使用场景:打包,安装,卸载,升级,校验,数据库管理;
1、安装程序包:
#rpm [option] /path/to/package_file -i:install,安装程序; -v:显示安装信息,更详细的安装信息可用-vv,-vvv…; -h:以#显示安装进度,一个#代表2%; --test:测试安装; --nodeps:忽略依赖关系; 如果依赖于其它包: 1)、解决依赖关系; 2)、忽略依赖关系;能安装上,但有可能无法运行; --replacepkgs:重新安装; 如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew -ivh:常用组合安装选项;
2、卸载程序包:
#rpm [option] package_name -e: erase:卸载程序; --nodeps: 如果被其它包所依赖: 1)、将依赖于此包的所有包一并卸载; 2)、忽略依赖关系;能卸载,但依赖于此包程序包可能会运行不正常; 如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留; 例如: #warning:/etc/zprofilesaved as /etc/zprofile.rpmsave
3、升级程序包:
新版本替换老版本:
rpm [option]/path/to/package_file -F:纯升级,需要升级的程序包必须已经安装;-Fvh -U:升级或安装;需要升级的程序包若已安装,则升级;若未安装,则升级;-Uvh --force:强制升级,升级后的版本冲突等;
注意:不应该对内核执行升级操作,而是安装,系统允许多内核并存;
4、查询操作:
1)、查询某包是否安装:
rpm -q package_name...
2)、查询所有已经安装的包:
#rpm -qa 按条件过滤: #rpm -qa | grep 'PATTERN'
3)、查询包的描述信息:
#rpm -qi package_name
4)、查询某包安装生成了哪些文件:
#rpm -ql package_name
(1)、查询某包安装生成了哪些配置文件:
#rpm -qc package_name
(2)、查询某包安装生成了哪些帮助文件:
#rpm -qd package_name
(3)、查询程序包的相关脚本:
#rpm -q --scripts package_name
脚本有四类:
preinstall:安装前脚本;
postinstall:安装后脚本;
preuninstall:卸载前脚本;
postuninstall:年前后脚本;
5)、查询某文件是由哪个包安装生成的:
rpm -qf /path/to/some_file
6)、对尚未安装的包执行查询:
#rpm [option] /path/to/package_file -qpi:描述信息; -qpl:安装生成哪些文件; -qpc:生成哪些配置文件; -qpd:生成哪些帮助文件;
5、校验:
rpm包来源合法性及完整性检验:
包制作者制作完成之后会附加数字签名于包上,可用来验证rpm包的来源合法性和包的完整性;包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面;
验正过程:
前提:必须有可靠机制获取到包制作者的公钥;
1)、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法;
2)、使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征作比对,相同,则意味着完整性没问题;
导入: #rpm --import /path/to/key_file 显示所有已经导入的gpg格式的公钥: #rpm -qa gpg-pubkey* 显示密钥的详细信息: #rpm -qi gpg-pubkey-NAME
检查包:安装过程中会自动执行;
手动检查: #rpm -K /path/to/package_file #rpm --checksig /path/to/package_file 不检查包完整性: #rpm -K --nodigest 不检查来源合法性: #rpm -K �nosignature
检查程序包安装生成的文件属性是否发生变化:
#rpm -V package_name -V:若程序包发生变化显示以下信息;某属性无变化,显示为. 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管理器无法正常使用,可以尝试重建数据库解决;
数据库目录:/var/lib/rpm
重建:
初始化: #rpm --initdb 如果事先没有库,会新建一个;如果有,则不新建; 重建: #rpm --rebuilddb 直接重建,覆盖原有的数据库
本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1670525