linux程序包管理器:
协作用户管理应用程序:安装、升级、查询、校验、卸载等
软件程序包生成过程:
源代码——》目标二进制格式–》组织成为一个或有限几个包文件
源代码:程序员写好的纯文本文档格式的代码
目标二进制:通过编译器编辑成为的二进制代码
程序包管理器:(每一个发行版管理器各有不同)
debian:程序包以“.deb”为后缀
dpt/dpkg:管理工具
redhat:程序包以“ .rpm”为后缀
rpm:管理工具
S.u.SE:程序包以“.rpm”为后缀
rpm:管理工具
源代码命令格式:
name-VERSION-.tar.gz
VERSION:major(主)、minor(次)、release(发行号)
major:重大版本发生改变才会更改此版本号
minor:某一功能增加或减少会更改
release:修复bug等一些小的操作
rpm包命令格式:
name-Version-release.arch.rpm
VERSION:major(主)、minor(次)、release(发行号)
major:重大版本发生改变才会更改此版本号
minor:某一功能增加或减少会更改
release:修复bug等一些小的操作
release.arch:rpm包的发行号(包括release.arch)
arch:表示程序包适合应用在什么平台架构上
#redis-3.0.2-2.el7.i386.rpm
redis:名字
3.0.2:版本号分别一一对应
2:第二次制作
el7:rhel7
i386:适用在架构兼容i386的cpu上
包的依赖关系
在linux系统中,所有应用程序功能都非常单一,简单(linux哲学思想之一,组合小程序完成复杂任务,除hadoop程序外)所以,一个程序包的运行可能会依赖于气筒程序包功能的存在性,所以,程序包和程序包之间存在依赖关系。
比如安装A程序包,而A程序包依赖于B程序包的功能,而B程序包又依赖于D程序包,这就叫做依赖关系
自动解决包依赖关系的前端工具
yum:rpm包管理的前端工具(rhel系列的都用此为前端工具)
apt-get:deb包管理的前端工具(debain,Ubuntu系列)
zyyper:suse的rpm包管理前端工具
dnf:fedora 22以上的系统上的rpm管理前端工具
rpm包程序管理器:
功能:将编译好的应用程序的个组成文件打包成为一个或几个程序包文件,从而更方便的实现程序包的安装,升级,卸载,查询等管理操作
1.程序包的组成清单(每个包都是独立的各自存在的清单)
有安装所需的文件清单、安装及卸载时的脚本等。
2.数据库(公共的存放系统上所有程序包的信息数据库)
用于存储程序包的名称和版本、依赖关系、功能说明、安装生成的个文件的文件路径及校验码信息
Centos系统上rpm命令管理程序包
功能:安装、升级、查询、校验、数据库维护等
rpm命令:
rpm [options][Package_file]
安装:-i –install
升级:-U –update, -F –freshen
卸载:-e –erase
查询:-q –query
校验:-V –verify
数据库维护:–rebulidb、–initdb
通用选项,用于所有功能:
-v:verbose 详细信息
-vv:更详细的信息
1.安装:
rpm {-i|–install} [install-options] Package_file…
在安装时必须使用的选项(i和–install)其中一个,在结合其他安装选项及包文件地址进行安装
[install – options]安装选线:
-h:进度条 --test:测试安装,用于检查安装时所有的依赖关系及错误报告等信息 --nodeps:忽略依赖关系进行安装,(虽能安装成功,但不一定能运行成功) --replacepkgs:覆盖安装,重新安装并覆盖原有文件 --force:强制安装
注:在安装程序包时常用的组合选项:
#rpm -ivh PACKage_file
2.升级(会替换原有的程序包)
rpm {-U|–install} [install-options] Package_file…
rpm {-F|–install} [install-options] Package_file…
-U:表示安装和升级,当时用此升级程序时,如果原本程序不存在,则会安装程序包
-F:表示只升级程序包,如果原程序不存在,则不会进行升级或安装操作)
常用组合选项:
rpm -Uvh Packages_file (会替换原有的文件包)
rpm -Fvh Packages_file
可用于安装选项(如:–test、nodeps、noplacepkgs、–force等)
–oldpackage:降级安装
–force:忽略高版本强行降级到旧版本
注意:
(1)不要对内核做升级操作;linux支持多内核版本并存,因此,直接安装新版本内核
(2)如果某源程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.remnew)
3.卸载:
注意:卸载时、查询时都是package name,安装和升级都是package file
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
–allmatches :卸载所有匹配指定名称的程序包的各版本
–nodeps :忽略依赖关系
–test:测试卸载(会显示依赖关系等信息,但不真正卸载)
4.查询:(有两类选项)***非常重要***
rpm {-q|–query} [select-options] [query-options]
第一类:select-options:选择选项
查询时直接给定包名
#rpm -q package_name //查询指定的程序包是否安装及其版本
-a:查询所有已安装上的所有包
#rpm -qa pachage_name //可使用正则表达式进行匹配
-f:查询某文件是由哪个程序包安装生成:
#rpm -qf /path/to/somefile
-p:查询的未安装的程序包执行查询操作,(配合选项进行查看):
# rpm -qpi package_file //查询指定的程序包的详细信息
–whatprovides CAPABILITY(能力):查询指定的能力由哪个程序包提供:
#rpm -q whatprovides bash //查询bash能力是由谁(那个程序包)提供的
#rpm -q –whatprovides “config(bash)”//查询bash
–whatrequires CAPAbILITY (能力):查询指定的能力被哪个包所依赖
#rpm -q –whatrequires bash //查询指定的bash能力被那些个包所依赖
第二类:query-options:
–changelog :查询rpm包的changelog(包改变日志);(rpm包的,而非源码包的)
#rpm -q –changelog PACKAGE name
-l :查询某包安装生成的文件列表
#rpm -ql P—name
-i : 查询程序包的相关信息(如:版本号,大小、所属的包组等)
#rpm -qi P-name
-c (configfles):查询指定的程序包提供的配置文件;
#rpm -qc bash(P-name)
-d(docfiles):查询指定的程序包提供的文档
#rpm -qd bash (P-name)
–provides :列出指定的程序包提供的所有能力(CAPBILITY)
#rpm -q –provides bash(P-name)//查看bash提供能力
#rpm -q –whatprovides bash
-R:查询指定程序包所依赖的各种资源
#rpm -q -R bash
–scripts:查看程序包自带的脚本片段
#rpm -q –scripts bash
用法:
– qi PACkAGE,-qf FILE,-qc PACkAGE ,-ql PAckage,-qd PACKAGE
-qpi PACKAGE_file, -qpl PACKAGE_file ,-qpc PACHAGE_file
5.校验:“V”
查看程序包安装之后有没有被更改过
可指定只检查指定
# rpm -V zsh
#rpm -V –nofiles bash
用rpm -V P-name 查看出来的结果显示
[root@CentOs6 mnt]# rpm -V tree [root@CentOs6 mnt]# rpm -Va S.5....T. c /etc/bashrc S.5....T. c /etc/profile //如果对应的有显示下面的选项,则改包发生了对应的改变,根据数据来进行查找(数据库地址/var/lib/rpm)
S:文件大小发生改变 (file Size differs)
M:文件权限和类型发生改变(Mode differs (includes permissions and file type)
5:文件内容发生改变MD5这一种指纹的内容已经不同(digest (formerly MD5 sum) differs)
D:设备的主次号发生改变( Device major/minor number mismatch)
L:link路径已经被改变(readLink(2) path mismatch)
U:文件的属主已被改变(User ownership differs)
G:文件的属组已被改变 (Group ownership differs)
T:文件的时间戳(创建时间)发生改变 (mTime differs)
P:文件所提供的能力发生改变 ( caPabilities differ)
包合法性验证和完整性验证:
在软件安装之前我们最好是要对即将安装的软件进行合法验证,这样可以检查出软件是否来源合法,内容合法等,在一定程度上避免不必要的安全因素导致的不安全事件
来源和法性:
由我们信任的制作者提供的依赖于制作者的数字签名,签名是作者使用自己的私钥加密程序包的特性码进行的。
内容合法性:
包未被二次修改;完整性校验成功,依赖于制作者提供的程序特征码
验证方式:
安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的特征码相比较
验证其光盘中程序包的来源及完整性:
先导入合法的KEY文件:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)
列如:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-6 //获取程序包的秘钥
验证:rpm -K Package_file 用光盘中的key与程序包奥的秘钥相对比
–nosignature:不检查来源合法性
–nodigest:不检查完整性
获取并导入信任的包制作者的秘钥:
对于Centos发行版来说:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)
验证:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证:rpm -K Package-FILE
来源合法性验证:
数字签名:用自己的私钥去加密对应数据的特征码,这样来源合法性和数据完整性得到验证
制作者:
1.使用单向加密法提取包的特征码
2.用自己的私钥去加密特征码,然后附加在文件后面
使用者:
拿到包之后,要检验包的来源合法性,拿到制作者的公钥。然后解密特征码,如果能解密则通过。这样包的来源合法性和数据完整性得到验证
6.数据库重建
rpm管理器数据路径:/var/lib/rpm
查询操作:通过此处的数据库进行,
数据库操作查询:
Centos6:man rpm
Centos7:man rpmdb
rpm {–initdb} –rebuliddb
–initdb:初始化数据库,当前完全没有数据库存在时,可自动创建一个新的,如果有则不创建。
–rebuliddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新构建,(无论当前数据库存在与否,都会直接重建此库;构建的数据库存放在/var/lib/rpm中)
原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/37553