linux rpm程序包管理
程序包的组成
二进制程序 /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: 重建 直接重建,覆盖原有的数据库