软件包管理器

把二进制程序,库文件,配置文件,帮助文件打包成一个文件,但我们需要这些文件时,软件包管理器能按需自动展开。生成数据库,追踪所安装的每一个文件。

 

软件包管理器的核心功能:

1  制作软件包

2  安装 , 卸载,升级,查询,校验

发行版:Redhat,SUSE,Debian   理解软件包的格式:Redhat和SUSE:RPM     Debian:dpt

软件包具有依赖关系:解决依赖关系的工具:   yum能手动管理RPM的依赖关系,yum不能说脱离了RPM,而是在ROM上提供了一个更高级的工具。

前端工具:yum,apt-get

后端工具:RPM,dpt

 

rpm命令

   rpm:

      数据库:/var/lib/rpm

   rpmbuild:

 安装,查询,卸载,升级,校验,数据库的重建,验证数据包等工作

rpm命名:
包:组成部分
主包:
blind-9.7.1-1.el5.i586.rpm
子包:
blind-libs-9.7.1-1.el5.i586.rpm
blind-utils-9.7.1-1.el5.i586.rpm
包名格式:
name-version-release.arch.rpm
blind-major.minor.release-release.arch.rpm
主版本号:重大改进
次版本号:某个子功能发生了重大变化
发行号:修正了部分bug,调整了一点功能   rpm命令说白了就是一个软件包管理器。
rpm安装:
rpm -i /PATH/TO/PACKAGE_FILE
-h:以#显示进度;每个#表示2%
-v:显示详细的过程
-vv:更详细的过程
一般来说,我们常把-i,-h,-v合起来用,也就是:
rpm -ivh /PATH/TO/PACKAGE_FILE
没有包时,我们可以去ftp上下载,方法是:lftp后面加上ftp地址;进入交互式模式;去Server里面去找包;下载到本地用get命令;然后指定软件包路径安装:

有依赖关系: --nodeps:忽略依赖关系
--replacepkgs:重新安装,替换原有安装
--force:强行安装,可以实现重装或降级
--test:测试能否安装
查询:
rpm -q PACKAGE_NAME:查询指定的包是否已经安装   
注意:查询时-q直接跟包名就可以了,千万不要跟包的路径;例如:
rpm -q zsh即可然后会显示软件包的名称及版本;
rpm -qa:查询已经安装的所有包
rpm -qi PACKAGE_NAME:查询指定包的说明信息
rpm -ql PACKAGE_NAME:查询指定包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件
例如:我们查询zsh的说明信息:
先输入rpm -qi zsh

-ql -qc -qd与-qi的用法相同;
rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
rpm -qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成的
如果某rpm包尚未安装,我们需要查询其说明信息、安装以后会生成的文件;
rpm -qpi /PATH/TO/PACKAGE_FILE     
rpm -qpl
例如:我们要查看/etc/fstab文件下是由哪个rpm包安装生成的;
输入:rpm -qf /etc/fstab
升级:
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级。否则,则安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级。否则,退出
俩种用法一样
例如:以nano为例:先安装:然后输入: rpm -Uvh nano -1.3.12-1.1.1.gls.i386.rpm

当需要降级时:  --oldpackage:降级
卸载:
注意:卸载时,这个软件不能被其他软件包依赖。   rpm -e PACKAGE_NAME
--nodeps:强行卸载
校验:rpm -V PACKAGE_NAME
校验能够查询软件包安装后有没有改动过。
重建数据库:
rpm   --rebuilddb:重建数据库
--initdb:初始化数据库,没有才建立,有就不用建立。
检验来源合法性,及软件包完整性
加密类型:
对称:加密解密使用同一个密钥
公钥:一对密钥,公钥,私钥;公钥隐含于私钥中,可以取出来,并公开出去
单向:
其用法为:
# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
rpm -K /PATH/TO/PACKAGE_FILE
dsa,gpg:验证来源合法性,也即验证签名;可以使用--nosignature,略过此项
sha1,md5:验证软件包完整性;可以使用--nodigest,略过此项