千家信息网

linux软件包管理-rpm

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,1.程序包管理功能:将编译好的应用程序的各组件组成文件打包成一个或几个程序包文件,从而更方便快捷实现程序包的安装升级,卸载和查询等管理操作1 程序包的组成清单(每个程序包都单独实现)文件清单安装或卸载
千家信息网最后更新 2025年11月08日linux软件包管理-rpm

1.程序包管理



功能:将编译好的应用程序的各组件组成文件打包成一个或几个程序包文件,从而更方便快捷实现程序包的安装升级,卸载和查询等管理操作

1 程序包的组成清单(每个程序包都单独实现)

文件清单

安装或卸载是运行的脚本

2 数据库部分(公共)

程序包名称和版本

依赖关系

功能说明

安装生成各文件位置路径及校验码信息




程序包我们在哪获取了?

1)系统发行的光盘或官方文件服务器或镜像站点:

最常用的例如像

http://mirrors.aliyun.com

http://mirrors.souhu.com

http://mirrors.163.com

2)程序官方站点下载

3)第三方组织的rpm包

(a)EPEL:红帽站点论坛组织,提供高效的yum原

(b)搜索引擎搜索

pkgs.org

rpmfind.net

rpm.pbone.net

4)自己做

ps:下载时注意其合法性,来源合法




rpm :readhat package manager ;rpm is package manager

2.rpm包命名格式

tree-1.5.3-3.el6.x86_64.rpm

name-version-release.arch.rpm

versiom:是指源代码版本

release.arch:rpm包的发行号

archetecture:架构号:i386,x64(amd64)..

e16适用平台 6




3.rpm 特性

1,rpm分包机制

将一个包的功能拆成n个不同功能支包

主包:name-version-release.arch.rpm

支包:name-function-version-release.arch.rpm

function:功能 例如:devel开发功能

untils工具程序

libs库文件等



2,依赖关系

依赖关系:因为linux程序做到短小精湛,程序彼此之间依赖其他程序提供的功能,然后才能运行,所以导致包和包之间有着复杂的依赖关系



3,解决依赖

前端工具的出现自动解决包之间的依赖关系;

yum :rpm包管理器的前端工具

apt-get(apt-cache)deb包管理器的前端工具 用于debian

zypper :suse的rpm管理器前端工具

dnf:fedora-22+系统上的rpm包管理器的前端工具



4.rpm命令管理程序包:

安装升级、卸载、查询、效验、数据库维护、帮助


使用方法

rpm [OPTION] [PACKAGE_FILE]


安装


rpm     {-i|--install}    [install-options] PACKAGE_FILE ...


 [GENERAL OPTIONS]:通用选项    -v 详细信息输出    -vv 更详细信息输出


[install-options]:安装选项-h 显示以hash标记输出进度条 yum -ivh--test测试安装(不实际安装,仅测试,检查依赖及冲突关系);--nodeps 忽略依赖关系安装;--replacepkgs 重新安装;ps:rpm可以自带脚本 --noscripts四类: prelnstall:安装过程之前运行的脚本%pre --nopre postinstall:安装过程完成之后运行的脚本,%pot --post preuninstall:卸载过程真正开始执行之前运行的脚本 %preun  --nopreun postuninstall:卸载过程完成之后运行脚本 %postun  --nopostun--nosignature:不检查包签名信息,不检查来源合法性;--nodigest:不检查包完整性信息


例如:安装tree包

[root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEYPreparing...                          ################################# [100%]        package tree-1.6.0-10.el7.x86_64 is already installed


升级

 rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ...-U 升级或安装-F升级rpm -Uvh rpm -Fvh--oldpackage:降级;--force:强制升级;升级会影响依赖关系可能#ps:1)不要对内核做升级操作;linux支持多内核,直接安装新版本内核即可;#    2)如果原程序包配置文件安装后被修改过,升级是,新版本程序提供的同一个配置文件不会覆盖原有版本的配置文件,会将新文件重命名后保留;


例如:验证 如果原程序包配置文件安装后被修改过,升级是,新版本程序提供的同一个配置文件不会覆盖原有版本的配置文件,会将新文件重命名后保留;

[root@localhost Packages]# rpm -ivh vsftpd-3.0.2-10.el7.x86_64.rpm warning: vsftpd-3.0.2-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEYPreparing...                          ################################# [100%]Updating / installing...   1:vsftpd-3.0.2-10.el7              ################################# [100%][root@localhost Packages]# #安装vsftp[root@localhost vsftpd]# cat vsftpd.conf|wc -l127[root@localhost vsftpd]# vim vsftpd.conf[root@localhost vsftpd]# cat vsftpd.conf|wc -l27#修改其配置文件(删除文件中100行内容)[root@localhost Packages]# rpm -Uvh vsftpd-3.0.2-10.el7.x86_64.rpm --forcewarning: vsftpd-3.0.2-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEYPreparing...                          ################################# [100%]Updating / installing...   1:vsftpd-3.0.2-10.el7              ################################# [100%]#升级安装vsftpd   [root@localhost vsftpd]# cat vsftpd.conf|wc -l27#配置文件行数与之前安装修改行数一样

卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]           [--notriggers] [--test] PACKAGE_NAME ...--allmatches:删除所有所匹配指定名称的程序包版本--nodeps:忽略依赖关系--test 测试卸载,不真正执行卸载


例如:卸载vsftpd

[root@localhost Packages]# rpm -e --nodeps vsftpd warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave#卸载vsftpd包[root@localhost ~]# ll /etc/vsftpd/total 4-rw-------. 1 root root 1127 Aug 23 21:10 vsftpd.conf.rpmsave[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf.rpmsave |ec -lbash: ec: command not found...[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf.rpmsave |wc -l27#卸载后将配置文件备份成了一个新文件




查询

rpm {-q|--query} [select-options] [query-options]1)select-options:PACKAGE_NAME 直接给出包名查看是否已经安装-a,--all 查询所有已安装的包 rpm -qa[root@localhost ~]# rpm -qa |grep http-f,--file 查询文件的生成安装包[root@localhost ~]# rpm -qf /etc/fstab setup-2.8.71-6.el7.noarch-p --pachage 查寻未安装的包--whatprovides CAPABILITY:查询指定的CAPABILITY安装包 --whatrequires CAPABILITY:查询指定的CAPABILITY安装包有哪些依赖包2)query-options:--changelog 查看rpm改进日志-l, --list 安装生成的文件rpm -ql 查看安装这个程序包后生成了哪些文件-i --info 查询程序包相关的信息(版本,大小,所属的包组)rpm -qi 程序名 -c, --configfiles 查询指定程序包提供的配置文件 -d, --docfiles 查询指定程序包提供的文档 --provides 列出程序提供的CAPABTLITY --scripts 查看指定程序安装后的脚本



查询举例:

#查询某个包是否已经安装的多个方法[root@localhost vsftpd]# rpm -q vsftpdpackage vsftpd is not installed[root@localhost vsftpd]# rpm -qa vsftpd[root@localhost vsftpd]# rpm -qa |grep vsftpd[root@localhost vsftpd]# rpm -q vsftpdvsftpd-3.0.2-10.el7.x86_64[root@localhost vsftpd]# rpm -qa |grep vsftpdvsftpd-3.0.2-10.el7.x86_64

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询某个文件是由哪个安装包生成的[root@localhost vsftpd]# rpm -qf /etc/vsftpd/vsftpd-3.0.2-10.el7.x86_64

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查看某个包安装过后生成的文件[root@localhost vsftpd]# rpm -ql vsftpd /etc/logrotate.d/vsftpd/etc/pam.d/vsftpd/etc/vsftpd/etc/vsftpd/ftpusers/etc/vsftpd/user_list/etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd_conf_migrate.sh/usr/lib/systemd/system-generators/vsftpd-generator/usr/lib/systemd/system/vsftpd.service/usr/lib/systemd/system/vsftpd.target/usr/lib/systemd/system/vsftpd@.service/usr/sbin/vsftpd/usr/share/doc/vsftpd-3.0.2/usr/share/doc/vsftpd-3.0.2/AUDIT/usr/share/doc/vsftpd-3.0.2/BENCHMARKS/usr/share/doc/vsftpd-3.0.2/BUGS/usr/share/doc/vsftpd-3.0.2/COPYING/usr/share/doc/vsftpd-3.0.2/Changelog/usr/share/doc/vsftpd-3.0.2/EXAMPLE/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README/usr/share/doc/vsftpd-3.0.2/FAQ/usr/share/doc/vsftpd-3.0.2/INSTALL/usr/share/doc/vsftpd-3.0.2/LICENSE/usr/share/doc/vsftpd-3.0.2/README/usr/share/doc/vsftpd-3.0.2/README.security/usr/share/doc/vsftpd-3.0.2/REWARD/usr/share/doc/vsftpd-3.0.2/SECURITY/usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN/usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION/usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW/usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST/usr/share/doc/vsftpd-3.0.2/SIZE/usr/share/doc/vsftpd-3.0.2/SPEED/usr/share/doc/vsftpd-3.0.2/TODO/usr/share/doc/vsftpd-3.0.2/TUNING/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd/usr/share/man/man5/vsftpd.conf.5.gz/usr/share/man/man8/vsftpd.8.gz/var/ftp/var/ftp/pub

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询指定程序包包含的配置文件[root@localhost Packages]# rpm -qc vsftpd/etc/logrotate.d/vsftpd/etc/pam.d/vsftpd/etc/vsftpd/ftpusers/etc/vsftpd/user_list/etc/vsftpd/vsftpd.conf

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#查询指定程序包提供的文档[root@localhost Packages]# rpm -qd vsftpd/usr/share/doc/vsftpd-3.0.2/AUDIT/usr/share/doc/vsftpd-3.0.2/BENCHMARKS/usr/share/doc/vsftpd-3.0.2/BUGS/usr/share/doc/vsftpd-3.0.2/COPYING/usr/share/doc/vsftpd-3.0.2/Changelog/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow/usr/share/doc/vsftpd-3.0.2/EXAMPLE/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam/usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README/usr/share/doc/vsftpd-3.0.2/FAQ/usr/share/doc/vsftpd-3.0.2/INSTALL/usr/share/doc/vsftpd-3.0.2/LICENSE/usr/share/doc/vsftpd-3.0.2/README/usr/share/doc/vsftpd-3.0.2/README.security/usr/share/doc/vsftpd-3.0.2/REWARD/usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN/usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION/usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW/usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST/usr/share/doc/vsftpd-3.0.2/SIZE/usr/share/doc/vsftpd-3.0.2/SPEED/usr/share/doc/vsftpd-3.0.2/TODO/usr/share/doc/vsftpd-3.0.2/TUNING/usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd/usr/share/man/man5/vsftpd.conf.5.gz/usr/share/man/man8/vsftpd.8.gz


效验

rpm {-V|--verify} [select-options] [verify-options]  --nodeps              Don't verify dependencies of packages.       --nodigest              Don't verify package or header digests when read              ing.       --nofiles              Don't verify any attributes of package files.       --noscripts              Don't  execute  the  %verifyscript  scriptlet (if              any).          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 -V --nodeps

程序包的合法性验证:

来源合法:由制作者提供,依赖于制作者的数字签名,签名是作者使用自己的私钥加密程序包的特性码进行的;

内容合法:包未被二次修改,依赖于:制作者提供的程序特征码;

验正方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;

举例:

rpm --import /misc/cd/RPM-GPG-KEY-CentOS-6 rpm -K vsftpd-3.0.2-10.el7.x86_64.rpm vsftpd-3.0.2-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


数据库维护

rpm管理器数据库:/var/lib/rpmrpmdb {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]  --initdb: 初始化数据库,数据库不存在,才会新建; --rebuilddb: 无论当前数据库是否存在,都会直接重建此库;

举例:

#删除库[root@localhost rpm]# lsBasenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername[root@localhost rpm]# rm -fr *[root@localhost rpm]# ls#使用查询重新生成库[root@localhost rpm]# rpm -qa vsftpd[root@localhost rpm]# lsBasenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername[root@localhost rpm]##使用命令rpmdb --initdb生成库[root@localhost rpm]# rm -fr *[root@localhost rpm]# lltotal 0[root@localhost rpm]# rpmdb --initdb[root@localhost rpm]# lltotal 388-rw-r--r--. 1 root root   8192 Aug 23 22:19 Basenames-rw-r--r--. 1 root root   8192 Aug 23 22:19 Conflictname-rw-r--r--. 1 root root 270336 Aug 23 22:19 __db.001-rw-r--r--. 1 root root  81920 Aug 23 22:19 __db.002-rw-r--r--. 1 root root 107048 Aug 23 22:19 __db.003-rw-r--r--. 1 root root   8192 Aug 23 22:19 Dirnames-rw-r--r--. 1 root root   8192 Aug 23 22:19 Group-rw-r--r--. 1 root root   8192 Aug 23 22:19 Installtid-rw-r--r--. 1 root root   8192 Aug 23 22:19 Name-rw-r--r--. 1 root root   8192 Aug 23 22:19 Obsoletename-rw-r--r--. 1 root root  12288 Aug 23 22:19 Packages-rw-r--r--. 1 root root   8192 Aug 23 22:19 Providename-rw-r--r--. 1 root root   8192 Aug 23 22:19 Requirename-rw-r--r--. 1 root root   8192 Aug 23 22:19 Sha1header-rw-r--r--. 1 root root   8192 Aug 23 22:19 Sigmd5-rw-r--r--. 1 root root   8192 Aug 23 22:19 Triggername


帮助

1. man rpm




2. man rpmdb




0