linux的程序包管理
API: 兼容,意味开发库兼容,因此,源代码可跨平台
ABI: 兼容,编译后的程序可以跨平台;
库:可执行程序,本身不能作为程序执行入口,但可以被调用编译好的二进制格式
程序源代码:预编译,编译,汇编,链接
静态.a
动态:.so(shared object)
注意: 1OS平台:应用程序必须为特定平台所支持的版本
—————————————————————————————————————————–
软件包的组成部分
二进制应用程序的组成部分
二进制程序: /bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件: /lib,/usr/lib,/lib64,/usr/lib64,/usr/local/lib,/usr/local/lib64,
配置文件 /etc
帮助文件 man文件,info文件,README,INSTALL,Changelog
总结
二进制程序:bin,sbin
库:lib
头文件:include
帮助文件:man
配置文件:etc/conf
—————————————————————————————————————————–程序包管理器:
debian: deb文件,dpkg包管理器
redhat: rpm文件,rpm包管理器
rpm:Redhat Package Manager
RPM Package Manager
应用程序管理器:
1数据库
软件名和版本
安装生成的各文件路径及校验码
依赖关系
提供功能性说明
2提供程序组成格式
文件清单
安装卸载时运行的脚本
依赖关系:x –> y
循环依赖
版本依赖
包管理器的基本功能
打包
安装
查询
升级
卸载
校验
数据库管理
依赖关系 X,Y,M,N,L,I,K
前端管理工具
yum rpm包管理器的前端工具
apt-get deb包管理器的前端工具
zypper suse上的rpm前端管理工具
dnf Fedora 18+ rpm包管理器前端管理工具
总结:应用的安装方式
使用包管理器:便捷,易用
包管理器的前端工具
源代码编译:
简单打包的二进制格式:
—————————————————————————————————————————–
库文件
查看二进制程序所依赖的库文件
idd/PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
ldconfig 加载库文件
/sbin/ldconfig -p 显示本机已经缓存的所有可用库文件名及文件路径
映射关系
配置文件 /etc/ld.so.conf /etc/ld/so/conf.d/*.conf
缓存文件 /etc/ld.so.cache
rpm包命名格式:
源程序:name-version.tar.{gz|bz2|xz}
version: major,minor,release
rpm包: name-varsion-release.arch.rpm
release:通常包含rpm的制作发行号,还包含适用的OS
OS平台
bash-4.3.2-2.e16.x86_64.rpm
e16: redhat enterprise linux 6
e15:CentOS5
CentOS6
suse11
arch:
x86_64
i386,i586,i686
ppc
noarch
比如:一个源码,有10个功能
大多数用户只用其6个功能,余下的4个呢
分包:把一个大的程序打包制作成多个包
主包: bash-4.3.2-2.e16.x86_64.rpm
子包 bash-4.3.2-2.e16.x86_64.rpm1
bash-hello-4.3.0-2.e16.x86_64.rpm
DNS: bind,bind-devel,bind-libs,bind-utils
来源合法性验证:
源程序;通过md5或sha1校验码验证
rpm包,发行商提供的合法性是可信的
验证包完整性:校验码
验证来源合法:公钥
注意:
1,发行商,发行光盘中的包,需要升级时,官方释放出升级包;
—————————————————————————————————————————–
rpm包管理:安装
语法
#rpm -i /run/media/root/CentOS 7 x86_64
参数
-v:
-vv:
-vvv:
-h:hash 以#的个数显示安装进度.一个#表示2%的进度
-test: 仅测试;不真正执行安装过程
–nodeps 如果存在依赖,解决依赖关系,忽略依赖关系:
–noscripts 不执行程序包脚本
-ivh –replacepkgs 重新安装:
原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
rpm包管理:检查来源合法性和软件包完整性
包完整性;通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg,pgp
导入制作者的公钥,ContOS发行版的公钥在iso文件中
导入命令 rpm –import /path/to/gpg-key-file
检查 rpm -K /path/to/package_file
–nosignature:不检查来源合法性
–nodigest: 不检查包完整性
查询包相关的脚本
rpm -q –scripts package_name
脚本有四类:
–nopre %pre(preinstall):安装前脚t6
–nopost %post(postinstall)安装后脚本
–nopreun %preun(preuninstall):卸载前脚本
–nopostun %postun(postuninstall):卸载后脚本
rpm包管理:卸载
语法
rpm -e , –erase
rpm -e , package_name
注:如果卸载被其他程序所依赖的包
1把依赖着一同卸载
2忽略依赖关系
–nodeps
3不再卸载
rpm包管理:查询
语法
rpm -q
参数
rpm -q package_name 查询某单个包是否安装
rpm -qa 查询所有已经安装的包
例如:常用rpm -qa |grep “httpd”
rpm -qi package_name 查询包的描述信息
rpm -ql package_name 查询包安装之后在当前系统生成的文件列表
rpm -qf package_name 查询某文件是哪个包安装生成的
rpm -qd package_name 查询包安装后生成的帮助文档
rpm -qc package_name 查询包安装后生成的配置文件
rpm -q –whatrequires 查询由哪个包所提供
rpm -q –whatprovides 查询由哪个包所依赖
–scripts 程序包自带的脚本
–provides 列出指定程序包所提供的CAPABILITY
-R 查询指定的程序包所依赖的CAPABILITY
查询尚未安装的rpm包文件的相关信息:
查询安装后会生成的文件列表:
rpm -qpl /path/to/package_file
查询其简单描述信息
rpm -qpi /path/to/package_file
rpm包之升级:
rpm -U: 安装有旧版程序包,则升级,如果不存在旧版程序包,则安装
rpm -F:安装有旧版程序包,则升级,如果不存在旧版程序包,不执行升级操作
rpm {-Uvh| -Fvh} /path/to/package_file
–oldpackage 降级
–nodeps 忽略依赖关系
–force 强行安装
①注意:不要对内核执行升级操作
多版本内核可并存,因此,建议执行安装操作;
②如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件
并不会直接覆盖老版本的配置文件,而把新版本的文件重命名
(filename.rpmnew)后保留
rpm包管理:校验
检查包安装后生成的文件是否被修改过:
rpm -V package_name
rpm包管理:数据库重建
数据库: /var/lib/rpm/
重建:
rpm –initdb:初始化
如果事先不存在一个数据库,则新建之;
rpm –rebuilddb;重建
直接重建数据库,会覆盖原有的库
常用组合
-ivh,-e.-qi,qf,qp,ql,q –scripts
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96635