linux程序包管理命令rpm使用

时间:2023-02-14 20:00:17

目录

1、linux程序包的介绍
2、rpm的使用

一、linux程序包的介绍

1、程序包的功能:

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

2、程序包的组成:

    (1)RPM包内的文件
(2)RPM的元数据,如名称,版本,依赖性,描述等
(3)安装或卸载时运行的脚本

3、数据库:

    对于rpm包来说,/var/lib/rpm这个文件是非常重要的。如果删除这个文件,rpm的命令都不能正常的使用。可以进入救援模式修复。不过重新运行rpm可以自动生成其中的文件。但是与此前安装的不兼容。所以说这个文件非常重要。
程序包名称及版本
依赖关系
功能说明
包安装后声称的各文件路径及校验码信息
二进制应用程序的组成部分:库文件、配置文件、二进制文件、帮助文件。

4、获取程序包的途径

    (1)系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)项目官方站点
(3) 第三方组织:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:如果第三方程序包要检查其的安全性,并且判断其的完整性。如果恶意添加脚本,可以使用命令rpm --test 检查。建议;以后生产环境中药安装一个程序包是先检查其的合法性,避免不必要的损失。

二、rpm

1、rpm的介绍

    rpm(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器。RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager)。最早由Red Hat研制,现在也由开源社区开发。RPM通常随附于Linux发行版,但也有单独将RPM作为应用软件发行的发行版(例如Gentoo)。RPM仅适用于安装用RPM来打包的软件,目前是GNU/Linux下软件包资源最丰富的软件包类型之一。

2、rpm包的命令规则

    NAME-VERSION-RELEASE.arch.rpm
VERSION:major.minor.release
常见的arc:x86: i386, i486, i586, i686,x86_64: x64, x86_64, amd64
noarch跟架构无任何联系;
示例:zziplib - utils - 0.13.62 - 5.el7.x86_64.rpm

3、rpm包的类型说明

    Application-VERSION-ARCH.rpm:           主包 
Application-devel-VERSION-ARCH.rpm 开发包
Application-utils-VERSION-ARHC.rpm 工具包
Application-libs-VERSION-ARHC.rpm 库包

4、 rpm命令的使用

(1)安装:

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

-i ,–install :安装
-v ,–verbose:显示安装过程;
-vv:显示更详细的信息;利用这个选项可以查看安装过程出现错误的地方。
-h:以#显示程序包管理执行进度;

示例:
[root@centos7 ~]#rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
warning: /run/media/root/CentOS 7 x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]

[install-options]选项:

    --test :测试安装,不真正的安装程序包。
--nodeps:忽略依赖关系;
--nosignature:忽略签名;
--replacepkgs:替代安装,如果安装过后误删除此包中的某个文件可以使用这个命令修复。
--nodigest:不检查包的完整性;
--noscripts:不运行程序包中的脚本;
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun

(2)升级:在linux中不建议升级;

rpm {-U|–upgrade} [install-options] PACKAGE_FILE …

update:安装有旧的程序包,则升级;如果没有旧的程序包,则安装;

rpm {-F|–freshen} [install-options] PACKAGE_FILE…

freshen:安装有旧的程序包,则升级;如果没有安装,则不执行操作;
–oldpackage:降级;
–force:强制安装;

注意:
1、不要对内核执行升级操作;linux内核中支持多内核并存,因此对内核直接安装先的内核即可;
2、如果原来程序包文件安装后被修改,升级时,新版本并不会覆盖原文件,而是直接创建新文件命名为.rpmnew。

(3)查询:

rpm {-q|–query} [select-options] [query-options]

-a:列出所有的包
-f:查看指定的文件由哪些程序包安装声称;
注意:查询的内容是数据库中的内容,与路径删除无关。

示例:
[root@centos7 ~]#rpm -qf /usr/bin/tree #查询这个文件是由哪个包声称;
tree-1.6.0-10.el7.x86_64

-p:针对尚未安装的程序包文件做查询 ;后面跟完整路径;
–whatrequires CAPABLITY:查询指定的XAPABILTY由哪个包所提供;

示例:
[root@centos7 ~]#rpm -q --whatprovides bash #后面跟能力
bash-4.2.46-20.el7_2.x86_64

–whatrequires CAPABLITY :查询执行的CAPABILTY被哪个包所依赖;

示例:
[root@centos7 ~]#rpm -q --whatrequires bash
jline-1.0-8.el7.noarch
dracut-033-463.el7.x86_64
initscripts-9.49.37-1.el7.x86_64
lvm2-2.02.166-1.el7.x86_64
rsyslog-7.4.7-16.el7.x86_64
PackageKit-command-not-found-1.0.7-6.el7.centos.x86_64
kpatch-0.3.2-1.el7.noarch
bash-completion-2.1-6.el7.noarch

[query-options]
–chagelog:查询rpm包的修改的日志信息;
-c :查询程序的配置文件;
-d:查询程序的配置文档;

示例:
[root@centos7 ~]#rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

-i:查看程序包的信息;
-l:查看指定的程序包安正后生成的所有文件;
–scripts:程序包自带脚本;
–provides:列出执行程序包所提供的CAPABLTIY;

示例:
` [root@centos7 ~]#rpm -qp –provides /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
warning: /run/media/root/CentOS 7 x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
tree = 1.6.0-10.el7

-R:查询指定的程序包所依赖的包(capability);

(4)卸载:

-e,–erase:卸载

示例
[root@centos7 ~]#rpm -e tree 直接加包名

(5)检验:

rpm {-V|–verify} [select-options] [verify-options]

出现的情况如下;
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 differ
T mTime differs
P capabilities differ

示例:
[root@centos7 ~]#chown wang /usr/bin/tree
[root@centos7 ~]#ll /usr/bin/tree
-rwxr-xr-x. 1 wang root 62768 Jun 10 2014 /usr/bin/tree
[root@centos7 ~]#rpm -V tree
.....U... /usr/bin/tree

安装时rpm会自动检测是否程序包合法。它工作是根据一个秘钥实现的。RPM-GPG-KEY-CentOS-NUMBER
如果没有导入秘钥会出现,下面情况:
[root@centos7 ~]#rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
warning: /run/media/root/CentOS 7 x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY #显示没有密钥,警告!
Preparing... ################################# [100%]
Updating / installing...1:tree-1.6.0-10.el7 ################################# [100%]
导入公钥:
[root@centos7 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 或
[root@centos7 CentOS 7 x86_64]#ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@centos7 CentOS 7 x86_64]#rpm --import RPM-GPG-KEY-CentOS-7

-K |checksig :检测包的完整性和签名;

示例:
[root@centos7 ~]#rpm -K /run/media/root/CentOS\ 7\ x86_64/Packages/zziplib-utils-0.13.62-5.el7.x86_64.rpm
/run/media/root/CentOS 7 x86_64/Packages/zziplib-utils-0.13.62-5.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

(6)rpm数据库 /var/lib/rpm

–initdb 如果实现不存在数据库,则新建,否则,不执行;
–rebuilddb 重建已经安装的包头的数据库索引目录;

5、 rpm2cpio 包文件|cpio –itv 预览包内文件

rpm2cpio 包名  |cpio -iv 指定路径
这种安装有问题,可能所有主、所属组、权限不一样。
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件