程序包的组成
二进制程序 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /usr/local/APP/{bin,sbin} 注意: 有些特殊的应用程序放置于libexec目录中 有些第三方应用默认安装于/opt目录 库文件(开发库、运行库) /lib64, /usr/lib64, /usr/local/lib64, /usr/local/APP/lib 配置文件 /etc, /usr/local/APP/etc或conf目录 帮助文件 /usr/share/man, /usr/local/share/man, /usr/local/APP/man 帮助文件:man, info, doc: README, INSTALL, ChangeLog ldd: ldd /path/to/binary_file
程序包管理
数据库 程序名及版本 依赖关系:X --> Y,Z 功能性说明 安装生成的各文件路径及校验码 程序的组成清单 文件清单 安装卸载时运行的脚本 功能:将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能;
rpm 包管理器
安装程序包
rpm [option] /path/to/package_file
-i: install
-v:
-vv:
-vvv:
-h:
组合选项:-ivh
--test: 仅作测试,有真正执行安装
如果依赖于其它包:
1、解决依赖关系
2、忽略依赖关系
能安装上,但有可能无法运行;
--nodeps
重新安装:
--replacepkgs
如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为 .rpmnew
卸载程序包
rpm [option] package_name
-e: erase
如果被其它包所依赖:
1、将依赖于此包的所有包一并卸载
2、忽略依赖关系
能卸载,但依赖于此包程序包可能会运行不正常;
--nodeps
如果包的配置文件安装后曾被改动过,卸载时,此文件将不会卸载,而是被重命名并保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave
升级程序包
rpm [option] /path/to/package_file
1、升级或安装
-Uvh
2、纯升级
-Fvh
--force: 强制升级
注意:不应该对内核执行升级操作,而是安装。因为系统允许多内核并存。
查询操作
查询某包是否安装
rpm -q package_name...
查询所有已经安装的包
rpm -qa
按条件过滤:rpm -qa | grep 'PATTERN'
查询包的描述信息
rpm -qi package_name
查询某包安装生成了哪些文件
rpm -ql package_name
查询某包安装生成了哪些配置文件
rpm -qc package_name
查询某包安装生成了哪些帮助文件
rpm -qd package_name
查询程序包的相关脚本
rpm -q --scripts package_name
脚本有四类:
preinstall:安装前脚本
postinstall: 安装后脚本
preuninstall: 卸载前脚本
postuninstall: 年前后脚本
查询某文件是由哪个包安装生成的
rpm -qf /path/to/some_file
对尚未安装的包执行查询
rpm [option] /path/to/package_file
-qpi
-qpl
-qpc
-qpd
校验:用于检查包安装生成的文件属性是否发生变化
rpm -V package_name
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
rpm包来源合法性及完整性检验
前提:在当前系统上导入包的制作者的公钥
导入:rpm --import /path/to/key_file
rpm -qa gpg-pubkey* 显示所有已经导入的gpg格式的公钥
rpm -qi gpg-pubkey-NAME 显示密钥的详细信息
检查包:安装过程中会自动执行
手动检查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
不检查包完整性:
rpm -K --nodigest
不检查来源合法性:
rpm -K --nosignature
数据库重建
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建;
rpm --rebuilddb: 重建
直接重建,覆盖原有的数据库