您的位置:首页 > 运维架构 > Linux

Linux软件安装之RPM包管理--rpm命令管理——rpm包命名原则和依赖性,RPM安装、升级、卸载、RPM的查询方式,RPM的校验和文件提取

2019-07-22 21:19 776 查看

切记:安装和升级需要加包全名,其他的只加包名即可!!!!!

一、RPM包命名原则

1、RPM包命名原则

httpd-2.2.15-15.el6.centos.1.i686.rpm

  • httpd ——> 软件包名
  • 2.2.15 ——> 软件版本
  • 15 ——> 软件发布的次数
  • el6.entos ——> 适合的Linux平台。这个软件能够适合在el6和centos的版本中安装。
  • i686 ——> 适合的硬件平台
  • rpm ——> rpm包扩展名。

关于以上的说明:

  • 在Linux当中其实是没有扩展名这个概念的,扩展名随便命名,比如:***.a、***.abc、***.abbd等,Linux都认为是一个普通文件。但是所有的rpm包都应该注意扩展名,必须写成.rpm,因为这个扩展名是给管理员看的,管理员可以更加清晰的知道这是一个rpm包,否则其他管理员或者时间久了,就搞不清楚了;
  • 几乎所有的rpm包基本上都遵循上面的命名规则;
  • ***.noarch.rpm中的noarch是指所有的硬件平台都可以安装。
  • 如果没有写适合于那个Linux平台,那么它将适合所有的Linux平台。
  • 注意区分包名和包全名:如,httpd是软件包名,httpd-2.2.15-15.el6.centos.1.i686.rpm是包全名。

2、RPM包依赖性

  • 树形依赖 : a —> b —> c
  • 环形依赖 : a —> b —> c —> a
  • 模块依赖 : 模块依赖查询网址:www.rpmfind.net

关于以上依赖关系的说明:

  • 树形依赖:装载的顺序:只能先装c,再装b,最后装a。卸载的顺序:先卸载a,再卸载b,最后卸载c。
  • 环形依赖的解决办法:把软件包a、软件包b、软件包c用同一条命令同时装,就会解决环形依赖问题。
  • 库依赖:只要遇到 ” .so.数字 ” 结尾的包都是库依赖包,这种库依赖包都不是单独独立的包,它是某一个软件包当中的一个软件,也就是说,只要将这个软所在的包按装上,这个软件它就会自动安装,这样依赖性就会解决。通过www.rpmfind.net网站,将需要查询的依赖包在这里进行查询,安装相关的依赖软件包就可以解决了。

  • Linux生产服务器遵循的是最小化原则安装。如果系统特别大把所有的包都装上了,那一定没有依赖性,因为所有的功能都实现了,这样会占用很大的硬盘空间,报错的可能性和攻击的可能性将大幅度增加。

包全名与包名:

  • 包全名:操作的包是没有安装的软件包时,必须使用包全名。而且要注意路径。
  • 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库。

关于包名和保全名的说明:

  • 包全名:一般安装和升级的包,都没有安装,操作的是未安装包,所以用包全名。
  • 包名:这个时候包已经安装过了,告诉系统该包名,系统就可以搜索到这个包,这时不用写包全名。它搜索的地方是/var/lib/rpm/下的数据库,所以就不用写绝对路径,这些目录下的文件都是二进制文件,不能直接使用 vi 命令打开,因为我们是已经安装了的包,它搜索/var/lib/rpm下的数据库,不用写绝对路径,在任何位置下执行搜索命令都可以找到。查询和卸载这些命令操作的都是已经安装过的包,所以只需写包名即可。

二、RPM安装

rpm -ivh 包全名

选项:

  • -i(install) 安装
  • -v (verbose) 显示详细信息
  • -h (hash) 显示进度
  • --nodeps 不检测依赖性

关于以上的说明:

  • 注意:安装一定要写 包全名。
  • -ivh是一个习惯用法,只要是安装一般是三个选项联合应用。
  • --nodeps这个选项只能在做实验的时候使用。依赖性是有原因的,底层包不装上层包即使装上也不能正常使用(或者底层功能缺失)。

三、RPM包升级

rpm -Uvh 包全名

选项:

  • \U(upgrade) 升级(这里的U必须大写)

关于以上说明:

如若要升级,必须有比当前系统中已经装好的这个包更高级的包。它的过程和安装完全一样,甚至我们可以用-Uvh来替代-ivh。

四、卸载

rpm -e 包名

选项:

  • -e(erase) 卸载
  • --nodeps 不检查依赖性

关于以上说明:

  • 卸载后面跟的是包名。原因是它是在后台数据库当中搜索,已经装过的包,所以只能包名系统就嫩能够搜索到。
  • 刚才直接卸载掉,是因为apache依赖其他包。

五、RPM包的查询方式

安装和卸载这种方法用yum方式安装更为简单,因为yum方式为自动解决依赖性。而查询只能通过rmp命令来进行查询,yum是没有一个查询方法的,没有rpm手工查询的内容这么多,查询不论这么多信息。rpm安装可能不是很常用,但是查询是一个非常常用的一个功能,不论是rpm手工安装还是yum安装都经常需要使用rpm包的查询方式。

1、查询是否安装

(1)[root@localhost ~]# rpm -q 包名

#查询包是否安装

选项:

  • -q ——> 查询(query)

(2)[root@localhost ~]# rpm -qa

#查询所有已经安装的RPM包

选项:

  • -a ——> 所有(all)

关于以上命令的说明:

以上的查询命令是不一定在特定 [root@localhost Packages] 的目录当中才能执行的。操作的是未安装包为了让系统找到这个包,必须进到[root@localhost Packages]这个目录当中,或者需要这个绝对路径。而查询是在我们这个后台的数据库当中寻找的,所以在任何目录中执行这个查询命令都可以执行的,而不需要进入到这个光盘Packages目录当中。

示例(1)如下:

[root@root rpm]# rpm -q httpd
httpd-2.2.15-29.el6_4.x86_64
#而这个命令只能查询apach这一个包

[root@root rpm]# rpm -q httpdsss
package httpdsss is not installed
#未安装包的显示信息
[root@root rpm]# rpm -qa
krb5-libs-1.10.3-10.el6_4.6.x86_64
gzip-1.3.12-19.el6_4.x86_64
gdm-libs-2.30.4-52.el6.x86_64
... ...
#所查询所有已经安装的R
3ff7
PM包

示例(2)如下:

[root@root rpm]# rpm -qa | grep httpd
httpd-tools-2.2.15-29.el6_4.x86_64
httpd-2.2.15-29.el6_4.x86_64
#通过管道符和grep命令,可以列出所有的相关关键字的包
#而“ [root@root rpm]# rpm -q ”命令只能查询apach这一个包

2、查询软件包详细信息

[root@localhost ~]# rpm -qi 包名

选项:

  • -i ——>查询软件信息(information)
  • -p ——> 查询未安装包信息(package)

关于以上命令的说明:

  • 这个命令当中的包信息是组件这个包或者写这个包的时候就已经写好了,保存在这个软件包当中,就直接可以通过 [ rpm -qi 包名 ]命令来查看这个信息。

示例如下:

[root@root rpm]# rpm -qi httpd
Name        : httpd                        Relocations: (not relocatable)
Version     : 2.2.15                            Vendor: Red Hat, Inc.
Release     : 29.el6_4                      Build Date: 2013年08月02日 星期五 20时03分06秒
Install Date: 2019年06月22日 星期六 19时19分53秒      Build Host: x86-002.bui
... ...

3、查询包中文件安装位置

[root@localhost ~]# rpm -ql 包名

选项:

  • -l ——> 列表(list)
  • -p ——> 查询未安装包信息(package)

关于以上命令的说明:

  • rpm包的安装位置是默认的。不推荐rpm包手工指定位置,还是使用默认安装位置。
  • 包的安装位置是组建这个包的时候决定。因此,我们-p这个选项,虽然这个包没有安装,但是知道这个歌包打算安装什么位置。

示例如下:

[root@root rpm]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
... ...

4、查询系统文件属于哪个RPM包

[root@localhost ~]# rpm -qf 系统文件名

选项:

  • -f ——> 查询系统文件属于哪个软件包(file)

关于该命令的说明:

  • 通过这个命令可以查询:通过文件名可以追寻属于哪个包。后面不能跟包名,也不能跟保全名,只能跟系统文件名。
  • 切记:这个系统文件名必须是包装出来的,才能反向追查它是属于哪个包。但是,如果这个文件不是包装出来的,比如人为创建的、或者系统自动生成一些临时文件(如,日志文件),这些文件都不是通过包装出来,因此通过这个文件是不能追查到包的。

示例如下:

[root@root rpm]# rpm -qf /var/www/icons/up.gif
httpd-2.2.15-29.el6_4.x86_64
#后面加文件的绝对路径

[root@root rpm]# cd /etc
[root@root etc]# rpm -qf yum.conf
yum-3.2.29-40.el6.noarch

5、查询软件包的依赖性

[root@localhost ~]# rpm -qR 包名

选项:

  • -R ——> 查询软件包的依赖性(requires)
  • -p ——> 查询未安装包信息(package)。
  • -p因为按查询查询的是未安装的包,后面需要加包全名或者用绝对路径

示例如下:

[root@root etc]# rpm -qR httpd
#如果这个包已经安装,就不需要在package目录下查询,可以在任何的目录下都可以查询
vte-0.25.1-8.el6_4.x86_64
strace-4.5.19-1.17.el6.x86_64
qt-4.6.2-26.el6_4.x86_64
... ...
#可以发现要安装apach的包,需要依赖以上这么多包,这些包只有正常安装后,才能安装apach的包

[root@root etc]# rpm -qRp zip-3.0-1.el6.i686.rmp
#未安装包依赖性查询

六、RPM包校验

[root@localhost ~]# rpm -V 已经安装的包名

选项:

  • -V ——> 校验指定RPM包中的文件(verify)

关于命令的说明:

RPM包校验的目的是判断系统文件是否被人修改。我们将rpm包装完之后,先将它的特征记录下来,当需要的时候,将现在的文件与原先的文件进行比较,看这两个文件是否有什么变化,从而判断现在的文件是否被人做了更改。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: