首先我们需要了解什么是程序包管理:
程序包管理:
程序包管理:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包 的安装、卸载、查询、升级和校验等管理操作;
1、程序的组成组成清单 (每个包独有)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包名称及版本
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息;
程序包管理方式分为两种(这里我们只讲解RPM):
使用包管理器:rpm
使用前端工具:yum, dnf
RPM是一款好用的软件包安装和管理程序。使用RPM,用户可以自行安装和管理 Linux上的应用程序和系统工具。RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程 序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库, 用户可以进行软件包的查询。
rpm包命名方式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release.arch
release:release.OS
例子:zlib-1.2.7-13.el7.i686.rpm, yum-3.4.3-125.el7.centos.noarch.rpm---noarch指与平台无关
rpm包有主包和支包,主包提供软件的主要功能,而支包提供扩展功能
testapp: 拆包
testapp-VERSION-ARCH.rpm: 主包
testapp-devel-VERSION-ARCH.rpm:支包
testapp-testing-VERSION-ARHC.rpm
下图中第一个yum包就是主包,下面提供了其外围的子包以及子包的子包
打印应用程序依赖的各个共享库使用ldd命令
第一个列出的是访问其他库文件的接口
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系;
配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
1.安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v: verbose显示详细安装过程
-vv: 显示更为详细的安装过程
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
[install-options]
--test: 测试安装,但不真正执行安装过程;dry run模式;
--nodeps:忽略依赖关系;
--replacepkgs: 重新安装;
--nosignature: 不检查来源合法性;
--nodigest:不检查包完整性;
--noscipts:不执行程序包脚本片断;
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
使用rpm安装软件:
重装软件包:
不检测来源合法性和包完整性安装:发现没有了像上面安装时出现的警告信息
2.升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force: 强行升级;
3.查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changlog
-c: 查询程序的配置文件
-d: 查询程序的文档
-i: information
-l: 查看指定的程序包安装后生成的所有文件;
--scripts:程序包自带的脚本片断
-R: 查询指定的程序包所依赖的CAPABILITY;
--provides: 列出指定程序包所提供的CAPABILITY;
查询所有已经安装的以z开头的程序包
查看指定的文件由哪个程序包安装生成
查询程序包安装时生成的文件
查询未安装的程序包需要使用-p选项组合以上说到的选项
rpm -qpR 查询某rpm包的依赖
4.卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
5.校验:检测安装后是否修改过程序的某文件 使用-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 --import /PATH/FROM/GPG-PUBKEY-FILE
CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
7. 数据库重建:rpm数据库文件发生损坏时
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建
无论当前存在与否,直接重新创建数据库;