zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux基础命令-RPM软件包管理器

Linux基础命令 管理器 RPM 软件包
2023-09-14 09:09:45 时间

目录

前言

一、命令介绍

二、命令的语法及参数

三、命令实战-安装、查询、删除、升级

四、命令参数汇总

五、软件包名称解读

总结


前言

现在的软件,服务都是通过软件包进行下载,这个时候就离不开rpm命令,而rpm的功能繁多,也意味着这个命令的参数不简单,正如此,更应该了解清楚;一般rpm用的是系统自带的光盘镜像,当然可以去一些大厂找rpm的软件源,像阿里云,华为云,清华大学等都有自己的软件镜像站,还可到对应的软件官网查找,例如zabbix网站。

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

 

 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 Zabbix Official Repository

 

一、命令介绍

rpm命令来自于英文"RedHat Package Manager",看这英文不难猜到,这个RPM是由红帽公司推出的,之后被众多Linux发行版本广为所用,是一种数据库记录的方式来讲所需要的软件安装到Linux系统的一套软件管理机制,其功能是用于在linux系统下对软件包进行安装、卸载、查询、验证、升级等工作。

优点:

由于已经编译完成并且打包完毕,所以软件传输与安装上 很方便(不需要再重新编译);
RPM 在被安装之前,会先检查系统的硬盘容量、操作系统 版本等,可避免文件被错误安装; RPM 本身提供软件版本信息、依赖属性检查、软件用途说 明、软件所含文件等信息,便于了解软件;
RPM 管理使用数据库记录RPM文件的相关参数,便于查 询、删除、升级与反安装。

二、命令的语法及参数

2.1 用rpm --help查看rpm的语法和参数

语法: rpm 【选项】

[root@localhost ~]# rpm --help
用法: rpm [选项...]

查询/验证软件包选项:
  -a, --all                        查询/验证所有软件包
  -f, --file                       查询/验证文件属于的软件包
  -g, --group                      查询/验证组中的软件包
  -p, --package                    查询/验证一个软件包
  --pkgid                          query/verify package(s) with package identifier
  --hdrid                          query/verify package(s) with header identifier
  --triggeredby                    query the package(s) triggered by the package
  --whatrequires                   query/verify the package(s) which require a
                                   dependency
  --whatprovides                   查询/验证提供相关依赖的软件包
  --nomanifest                     不把非软件包文件作为清单处理

查询选项(用 -q 或 --query):
  -c, --configfiles                列出所有配置文件
  -d, --docfiles                   列出所有程序文档
  -L, --licensefiles               list all license files
  --dump                           转储基本文件信息
  -l, --list                       列出软件包中的文件
  --queryformat=QUERYFORMAT        使用这种格式打印信息
  -s, --state                      显示列出文件的状态

验证选项(用 -V 或 --verify):
  --nofiledigest                   不验证文件摘要
  --nofiles                        不验证软件包中文件
  --nodeps                         不验证包依赖
  --noscript                       不执行验证脚本

安装/升级/擦除选项:
  --allfiles                       安装全部文件,包含配置文件,否则配置文件会被跳过。
  --allmatches                     移除所有符合 <package> 的软件包(如果
                                   <package>
                                   被指定未多个软件包,常常会导致错误出现)
  --badreloc                       对不可重定位的软件包重新分配文件位置
  -e, --erase=<package>+           清除 (卸载) 软件包
  --excludedocs                    不安装程序文档
  --excludepath=<path>             略过以 <path> 开头的文件
  --force                          --replacepkgs --replacefiles 的缩写
  -F, --freshen=<packagefile>+     如果软件包已经安装,升级软件包
  -h, --hash                       软件包安装的时候列出哈希标记 (和 -v
                                   一起使用效果更好)
  --ignorearch                     不验证软件包架构
  --ignoreos                       不验证软件包操作系统
  --ignoresize                     在安装前不检查磁盘空间
  -i, --install                    安装软件包

可以看到的是,rpm的参数真的超级的多,看的着实眼花缭乱。

2.2 常用参数的结合

-a查询所有的软件包
-d只列出文本文件,本参数需配合”-l”参数使用
-e卸载软件包
-f查询文件或命令属于哪个软件包
-h安装软件包时列出标记
-i安装软件包
-l显示软件包的文件列表
-p查询指定的rpm软件包
-q查询软件包
-R显示软件包的依赖关系
-s显示文件状态,本参数需配合”-l”参数使用
-U升级软件包(Upgrade)
-v显示命令执行过程
-vv详细显示指令执行过程

三、命令实战-安装、查询、删除、升级

1)安装软件包

下载安装(i)软件包,并且显示命令执行过程(v)和进度条标记(h)

[root@localhost ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
准备中...                          ################################# [100%]
	软件包 lrzsz-0.12.20-36.el7.x86_64 已经安装
[root@localhost ~]# 

2)查询软件包

查询(q)全部(a)的软件包,这里会显示下载好的软件包,可以用grep过滤,查找看看有没有需要用到的包

[root@localhost ~]# rpm -qa | grep httpd
httpd-2.4.6-98.el7.centos.6.x86_64
httpd-tools-2.4.6-98.el7.centos.6.x86_64
[root@localhost ~]# 

也可以通过这个命令查看系统一共有多少个软件包

[root@localhost ~]# rpm -qa | wc -l
1324

可以查看(q)命令是哪个软件包(f)

[root@localhost ~]# which chmod 
/usr/bin/chmod
[root@localhost ~]# rpm -qf /usr/bin/chmod
coreutils-8.22-23.el7.x86_64
[root@localhost ~]# 

可以查看这个命令文件是否被改动过()

[root@localhost ~]# echo " " >>  /usr/bin/chmod 
[root@localhost ~]# rpm -Vf !$   #!$的意思是输出上一条命令的最后一段信息
rpm -Vf /usr/bin/chmod
S.5....T.    /usr/bin/chmod
[root@localhost ~]# 

图中显示了S 5 T,说明文件的大小,MD5校验值,修改时间已改变;

如果修改了属主和属组后,图中还出现了U,G,则表示属主和属组都已修改;

[root@localhost ~]# chown roq:roq /usr/bin/chmod
[root@localhost ~]# ll /usr/bin/chmod 
-rwxr-xr-x. 1 roq roq 58658 2月   4 15:17 /usr/bin/chmod
[root@localhost ~]# rpm -Vf !$
rpm -Vf /usr/bin/chmod
S.5..UGT.    /usr/bin/chmod
[root@localhost ~]# 

可以看下图每个字符代表的含义;

字符含义
S文件大小已改变;
M文件的类型或者文件的权限(rwx)已改变;
5文件MD5校验已改变,或者文件里的内容已改变;
D设备的主从代码已改变;
L文件的路径已改变;
U文件的属主(所有者)已改变;
G文件的属组已改变;
T文件的修改时间已改变;
P(caPabilities differ)功能已改变;

查询(q)指定安装包(p)(未安装)的基本信息(i),这里的i指的是信息

[root@localhost ~]# rpm -qpi /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
Name        : lrzsz
Version     : 0.12.20
Release     : 36.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Communications
Size        : 184846
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 11时35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : lrzsz-0.12.20-36.el7.src.rpm
Build Date  : 2014年06月10日 星期二 07时29分11秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.ohse.de/uwe/software/lrzsz.html
Summary     : The lrz and lsz modem communications programs
Description :
Lrzsz (consisting of lrz and lsz) is a cosmetically modified
zmodem/ymodem/xmodem package built from the public-domain version of
the rzsz package. Lrzsz was created to provide a working GNU
copylefted Zmodem solution for Linux systems.

查询(q)程序包的相关信息(已安装)

[root@localhost ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 98.el7.centos.6
Architecture: x86_64
Install Date: 2023年02月04日 星期六 15时39分51秒
Group       : System Environment/Daemons
Size        : 9829272
License     : ASL 2.0
Signature   : RSA/SHA256, 2023年01月28日 星期六 02时02分31秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-98.el7.centos.6.src.rpm
Build Date  : 2023年01月28日 星期六 01时38分14秒
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost ~]# 

查询(q)程序包安装之后产生的文件列表(l ) 

[root@localhost ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
.........
[root@localhost ~]# rpm -ql httpd | wc -l
496

 查询(q)程序包的配置文件(c)

[root@localhost ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
.......

 3)删除软件包

删除(e)软件包,当然也可以加个-vh参数,显示执行的过程和进度条

[root@localhost ~]# rpm -e lrzsz 
[root@localhost ~]# 

[root@localhost ~]# rpm -ev lrzsz 
软件包准备中...
lrzsz-0.12.20-36.el7.x86_64

4)升级软件包

可以升级指定的软件包,这里的升级是U=upgrade,这个过程是不升级系统内核的,只升级对应的安装包

[root@localhost ~]# rpm -Uvh /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:lrzsz-0.12.20-36.el7             ################################# [100%]
[root@localhost ~]# 

四、命令参数汇总

4.1 所有参数的结合使用都在这里,可以多了解看下 

rpm -qa          查询所有的软件包(已安装)

rpm -q lrzsz    查看命令有没有安装软件包

rpm -qi httpd   查看程序包的相关信息

rpm -qpi httpd 查看未安装包的详细信息

rpm -ql httpd   查看程序包安装产生的文件列表

rpm -qc lrzsz   查看程序包的配置文件

rpm -qd lrzsz   查看程序包的文档信息

rpm -qR lrzsz   查看程序包依赖的包

rpm -Vf chmod 查看命令是否被改动过

rpm -Va            检查所有程序包是否被改动过

rpm -ivh            安装软件包

rpm -Uvh           升级软件包

rpm -evh            删除软件包

五、软件包名称解读

[root@localhost ~]# ls /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
/mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm
[root@localhost ~]#

#lrzsz-0.12.20-36.el7.x86_64.rpm

依次代表的意思是:

lrzsz:软件名称

0 :主版本号

12:次版本号

20: 修订版本

36:第几次发版

el7:操作系统

x86_64:软件包是64位的包

总结

rpm命令虽然说功能上都是比较齐全的,但是如果 安装包有依赖的情况下,就需要依次安装对应的依赖包后才能安装需要安装的包,如果依赖的包特别多,在安装的时候就很耽搁时间;后来出现了yum命令,这个命令完美解决了软件包依赖的问题。