广告
返回顶部
首页 > 资讯 > 操作系统 >Linux 入门学习之rpm软件包管理
  • 753
分享到

Linux 入门学习之rpm软件包管理

2024-04-02 19:04:59 753人浏览 独家记忆
摘要

Linux入门之软件包管理在linux有很多类的软件包管理机制,但是在redhat、Centos这类版本的系统中,都会使用一种相同的机制,就是rpm软件包管理机制,当然,还有其它版本的linux使用的不同机

Linux入门之软件包管理

linux有很多类的软件包管理机制,但是在redhat、Centos这类版本的系统中,都会使用一种相同的机制,就是rpm软件包管理机制,当然,还有其它版本的linux使用的不同机制:

debian:使.deb文件,dpkg包管理器

redhat:使用.rpm文件,rpm包管理器

 

软件包在使用中又分类两种(源码包和二进制包):

源码包:一般是提供了一些源码模块和编译脚步组合起来的压缩文件,命令格式如:

name-version.tar.{gz|bz2|xz} 等,这里列举出来一个源码包:

[root@localhost ~]# ls -l tengine-1.4.2.tar.gz

-rw-r--r-- 1 root root 1185902 Aug 15 18:57 tengine-1.4.2.tar.gz

 

二进制rpm包:实现被编译包的,功能模块事先已经被设置好的软件,命令格式如:

rpm包的组成:

主包:

name-version-release.arch.rpm  例如:

bind-9.7.1-1.e15.i586.rpm

    子包:

name-toolname-9.7.1-1.e15.i586.rpm 例如:

bind-libs-9.7.1-1.e15.i586.rpm

bind-utils-9.7.1-1.e15.i586.rpm

包名格式:

name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm  

版本号说明:

主版本号:软件包有重大改进

此版本号:某个子功能发生重大变化

发行号:修正了部分bug,调整了一点功能

 

 

软件管理器的核心功能:

1、制作软件包;

2、安装、卸载、升级、查询、校验;

 

注意:rpm包自身有依赖关系,及安装软件包时需要先安装其依赖的软件包

 

软件包工具分类:

前段工具:yum,apt-get

后端工具:rpm,dpt

 

 

rpm命令:

rpm  rpmduild

rpm数据库:/var/lib/rpm

注意:/var/lib/rpm中的某些文件如果只是被破坏,可以通过命令来创建或初始化数据库,但是文件如果都被删除,其数据库信息将无法恢复,因此,要时常对此做备份

 

rpm命令使用方法:

1、安装:

rpm -i /PATH/TO/PACKAGE_FILE     注意:这里是软件包文件的路径

-h:以#符号显示进度,每个#符号表示2%进度

-v:显示详细过程

-vv:显示更为详细的过程

 

rpm  -ivh /PATH/TO/PACHAGE_FILE  提示:这里一般组合使用显示其安装状态

 --nodeps:忽略依赖关系;

 --replacepkgs:重新安装,替换原有安装;

 --replacefiles:会替换原有文件;

 --force:强行安装,可以实现重装或降级;

 --nosgnature:不检查来源的合法性

 --nodigest:不检查完整性

 --noscripts:不执行程序包脚步

%pre:安装前脚步;--nopre

%post:安装后脚本;--nopost

%preun:卸载前脚步;--nopre

%postun:卸载后脚步;--nopost

注意:有时对于来源不明的软件包,可以使用以上选项来防止软件包里的危险程序

 

2、升级:

rpm  -Uvh  /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级,否则重装

rpm  -Fvh  /PATH/TO/NEW_PACKAGE_FILE:如果有老版本的,则升级,否则退出

--oldpackage:降级

 

注意事项:

1、不要对系统内核进行升级或降级安装,Linux执行多内核并存,因此直接安装新内核即可

2、如果对kernel升级,升级前如果改变了原内核中配置文件,那么升级后,原内核的配置文件将被重命名为filename.rpmnew的文件,而使用新内核的文件

 

3、查询

rpm  -q  PACKAGE_NAME:查询指定包是否已经安装

rpm  -qa:查看已经安装的所有软件包

 

rpm  -qi  PACKAGE_NAME:查询指定包的安装包的说明信息;

rpm  -ql  PACKAGE_NAME:查询指定包安装后生成的文件列表;

rpm  -qc  PACKAGE_NAME:查询指定包安装后生成配置文件;

rpm  -qd  PACKAGE_NAME:查询指定包安装的帮助文件;

 

rpm  --scripts PACKAGE_NAME:查询指明包中包含的脚步

rpm  -qf  /PATH/TO/SOMEFILE:查询指定的文件是由哪个rpm包安装以后生成的;

rpm  --whatprovides  CAPABILTTY :查询关键字或命令是由哪个包替换

rpm  --whatrequires  CAPABILTTY:查询指定包或命令是被哪个包所依赖

 

如果包尚未安装,我们需要查询其说明信息、安装以后会生成的文件:

rpm  -qpi  /PATH/TO/PACKAGE_FILES   查看软件包文件信息

rpm  -qpl  /PATH/TO/PACKAGE_FILES   查看软件包安装后生成哪些文件

 

如果安装后的文件有所丢失,而又有配置而不像重装去覆盖文件,可以通过工具处理:

rpm2cpio 包文件|cpio  -itv 预览包文件

rpm2cpio  包文件|cpio  -idv “*.conf” 展开包文件

注意:里面可以是特定路径或者文件通配符

 

rpm  --scripts  /PACKAGE_NAME:查询包生成的脚步文件

 -R:查询指定的程序包所依赖库及软件

 --provides:列出指定程序包提供的工具、命令

 --changelog:查询rpm包的更改信息

 

4、卸载

rpm  -e  PACKAGENAME

rpm  --erase  PACKAGENME

           --nodeps:忽略依赖关系任然卸载

           --test:只是测试卸载过程,并不真正卸载  

           --noscripts:卸载时不运行过程脚步

           --notriggers:不启动触发器

           --allmatches:卸载全部与其相配的文件

 

5、校验

rpm  -V  PACKNAME  PACKAGE_NAME

信息说明:

S  表示软件更改信息

M 显示权限信息

5  显示加密信息

D  显示主次设备号

L  显示链接路径数

U  显示包用户

G  显示包用户组

T  显示更改时间

p  显示更新对比属性

 

6、校验软件包来源合法性,及软件包完整性:

密钥文件:

          /etc/pki/rpm-gpg/目录下:

          RPM-GPG-KEY-readhat-release

          RPM-GPG-KEY-centos-release

检查软件包的完整性:

rpm  -K  /path/to/rpmfile

信息说明:

dsp, gpg:验证来源合法性,也即验证前面字段,可以使用--nosignature略过此项

sha1, md5:验证软件包完整性,可以使用--nodigest,略过此项

 

在此之前需要有公钥的存在,可以使用命令导入公钥:

rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

卸载公钥:

rpm  -qa  gpg-pubkey*  找出公钥名称

rpm  -e   gpg-pubkey......  卸载公钥

 

7、重建数据库

数据库文件路径:/var/lib/rpm/

使用命令重建:

rpm

--rebuilddb:重建数据库,一定会重新建立;

--initdb:初始化数据库,没有才建立,有就不建立;

 

案例:

#挂载CentOS镜像到/mnt/iso文件夹

[root@mzf ~]# mount /dev/cdrom  /mnt/iso/
mount: block device /dev/sr0 is write-protected, mounting read-only

#cd进入/mnt/iso目录

[root@mzf ~]# cd /mnt/iso/
[root@mzf iso]# pwd
/mnt/iso

#查看软件包存放在Packages中

[root@mzf iso]# ls
CentOS_BuildTag  EULA  p_w_picpaths    Packages   repodata RPM-GPG-KEY-CentOS-Debug-6     
RPM-GPG-KEY-CentOS-Testing-6  EFI   GPL   isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL

#cd到此Packages目录中

[root@mzf iso]# cd Packages/

#找出tree软件

[root@mzf Packages]# find ./ -name "tree-1.5.3-3.el6.x86_64.rpm" 
./tree-1.5.3-3.el6.x86_64.rpm

#发现已经安装

[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
package tree-1.5.3-3.el6.x86_64 is already installed

#那就先卸载此文件

[root@mzf Packages]# rpm -e tree

#再次安装,显示进度安装成功

[root@mzf Packages]# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                 ########################################### [100%]
   1:tree             ########################################### [100%]

#安装zsh发现已经被安装过

[root@mzf Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...                 ########################################### [100%]
package zsh-4.3.11-4.el6.centos.2.x86_64 is already installed

#使用--force强制安装并覆盖之前的安装

[root@mzf Packages]# rpm -ivh --force zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
Preparing...         ########################################### [100%]
   1:zsh          ########################################### [100%]


#查询bind是否已经安装,发现只是一些库和工具

[root@mzf Packages]# rpm -qa | grep '^bind'
bind-libs-9.8.2-0.47.rc1.el6.x86_64
bind-utils-9.8.2-0.47.rc1.el6.x86_64

#安装一个服务器配置,显示此包依赖于bind-9.8.2-0.47.rc1.el6 包

[root@mzf Packages]# rpm -ivh bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
error: Failed dependencies:
bind = 32:9.8.2-0.47.rc1.el6 is needed by bind-chroot-32:9.8.2-0.47.rc1.el6.x86_64

#那么可以选择一起安装,也可以忽略、强制安装

[root@mzf Packages]# rpm -ivh --nodeps --force bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
Preparing...           ########################################### [100%]
   1:bind-chroot        warning: group named does not exist - using root
warning: group named does not exist - using root%)
warning: group named does not exist - using root%)
warning: group named does not exist - using root%)

说明:虽然装上了,但是显示一些错误信息,因为没有主配置文件,这里我们还是一起安装

[root@mzf Packages]# rpm -ivh bind-9.8.2-0.47.rc1.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:bind         warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew
########################################### [100%]

 

#卸载刚才安装的软件

[root@mzf Packages]# rpm -e bind-chroot
#没有信息就说明已经安装成功

#检验软件包来源合法性,这里显示正常

[root@mzf Packages]# rpm -K bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm 
bind-chroot-9.8.2-0.47.rc1.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

#而检验是通过公钥文件来处理的,如果没有这些文件,将会检查失效

[root@mzf Packages]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-CentOS-Testing-6

#通过命令导入密钥:

[root@mzf Packages]# rpm --import /mnt/iso/RPM-GPG-KEY-CentOS-6

#查看刚才安装的密钥

[root@mzf Packages]# rpm -qa | grep 'gpg.*key'
gpg-pubkey-c105b9de-4e0fd3a3

#卸载此密钥

[root@mzf Packages]# rpm -e gpg-pubkey


 

如果安装过的软件的某些文件被删除或者破坏,如何只恢复指定文件而不重装?

#查看tree执行文件的路径

[root@mzf Packages]# which tree
/usr/bin/tree

#删除出tree执行文件

[root@mzf Packages]# rm -f /usr/bin/tree

#再次执行已经找不到此命令

[root@mzf Packages]# tree
-bash: tree: command not found

#通过rpm2cpio将rpm包生成的文件列表写成数据流传给cpio查看

[root@mzf Packages]# rpm2cpio ./tree-1.5.3-3.el6.x86_64.rpm | cpio -tv
-rwxr-xr-x   1 root   root   41136 Jan 14  2015 ./usr/bin/tree
drwxr-xr-x   2 root   root   0 Jan 14  2015 ./usr/share/doc/tree-1.5.3
-rw-r--r--   1 root   root   18009 Aug 13  2004 ./usr/share/doc/tree-1.5.3/LICENSE
-rw-r--r--   1 root   root   4167 Oct 20  2009 ./usr/share/doc/tree-1.5.3/README
-rw-r--r--   1 root   root   3375 Jan 14  2015 ./usr/share/man/man1/tree.1.gz

#根据上面显示时说明展开默认在当前当文件夹

#那么我们切换到家目录

[root@mzf Packages]# cd

#只展开出tree命令

[root@mzf~]#rpm2cpio /mnt/iso/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -idv ./usr/bin/tree
./usr/bin/tree
132 blocks

#拷贝这个命令到原来tree命令所在的目录

[root@mzf ~]# cp usr/bin/tree /usr/bin/tree

#发现tree命令又可以使用了

[root@mzf ~]# tree
.
├── anaconda-ks.cfg
├── checkdisk.sh


重建库文件

#查询库文件

[root@mzf ~]# ls /var/lib/rpm/
Basenames     __db.001  __db.003  Dirnames     Group       Name          Packages     Provideversion  Requirename     Sha1header  Triggername
Conflictname  __db.002  __db.004  Filedigests  Installtid  Obsoletename  Providename  Pubkeys         Requireversion  Sigmd5

#备份移动库文件

[root@mzf ~]# mkdir backup
[root@mzf ~]# mv /var/lib/rpm/* backup/

#已经没有任何库文件

[root@mzf ~]# ls /var/lib/rpm/

#初始化库文件

[root@mzf ~]# rpm --initdb
[root@mzf ~]# ls /var/lib/rpm/
__db.001  __db.002  __db.003  __db.004  Packages

#重建库文件

[root@mzf ~]# rpm --rebuilddb
[root@mzf ~]# ls /var/lib/rpm/
Packages

#查询已经失效

[root@mzf ~]# rpm -qa
说明:这里的重建只是重新生成库文件,但以前的记录已经没有了,这时我们还原

#将刚才的文件再次移动到/var/lib/rpm下

[root@mzf ~]# mv -f backup/* /var/lib/rpm/

#查询之前安装的软件,发现可以查看了

[root@mzf ~]# rpm -qa | grep '^bind.*'
bind-libs-9.8.2-0.47.rc1.el6.x86_64
bind-9.8.2-0.47.rc1.el6.x86_64

bind-utils-9.8.2-0.47.rc1.el6.x86_64

注意:这里如果只是一点文件或者锁文件破坏,还可以使用重建数据库拯救,但是如果/var/lib/rpm里的文件都被删除了,就算重建了,记录是找不回来的,这时就需要对库文件进行备份了

 

 

 


--结束END--

本文标题: Linux 入门学习之rpm软件包管理

本文链接: https://www.lsjlt.com/news/40471.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux 入门学习之rpm软件包管理
    Linux入门之软件包管理在linux有很多类的软件包管理机制,但是在redhat、centos这类版本的系统中,都会使用一种相同的机制,就是rpm软件包管理机制,当然,还有其它版本的linux使用的不同机...
    99+
    2022-10-18
  • 软件包管理之rpm
    一、前言在没有软件包管理器前,用户都是通过源代码的方式来安装软件。但是我们很容易发现,在每次安装软件时都必须对操作系统的境、编译的参数进行对应的编译,并且操作过程很是复杂,这对于不熟悉操作系统的朋友来说真心...
    99+
    2022-10-18
  • linux软件包管理-rpm
    1.程序包管理功能:将编译好的应用程序的各组件组成文件打包成一个或几个程序包文件,从而更方便快捷实现程序包的安装升级,卸载和查询等管理操作  1 程序包的组成清单(每个程序包都单独实现)...
    99+
    2022-10-18
  • linux命令:rpm软件包管理
       rpm命令简介:     rpm:软件管理器         数据库:/var/lib/rpm &n...
    99+
    2022-10-18
  • Linux软件包管理器rpm与yum
    在我们的运维工作,总是避免不了安装某些软件,或者编译安装某些软件,我们知道操作系统当中的程序都是有程序员通过开发工具开发的来,程序员直接编写的纯文本的文档我们称之为源代码,但我们的计算机只能识别二进制程序,...
    99+
    2022-10-18
  • Linux学习笔记:rpm程序包管理
    以CentOS为例,rpm程序包管理器的相关内容如下:CentOS的程序包管理器:    程序包的命名规则:       &n...
    99+
    2022-10-18
  • VUE入门学习之事件处理
    目录1.函数绑定2.带参数和$event 3.多个函数绑定一个事件4.事件修饰符5.按键修饰符 6. 系统修饰键 .exact 修饰...
    99+
    2022-11-12
  • Linux 第11天: (08月17日) Linux软件包管理rpm
    Linux 第11天: (08月17日) Linux软件包管理rpm     软件运行环境API:Application Programming Inter...
    99+
    2022-10-18
  • Linux软件包管理的基本入门操作有哪些
    本篇文章给大家分享的是有关Linux软件包管理的基本入门操作有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。大多数现代类 Unix 的操作系统都提供了一个集中的软件包管理机...
    99+
    2023-06-16
  • 菜鸟学Linux 第029篇笔记 软件管理,rpm命令
    菜鸟学Linux 第029篇笔记 软件管理,rpm命令应用程序: 程序:底层Architecture密切相关 C语言: 源代码-->(编译)二进制格式脚 本: 解释器(二进制程序)源代码-->编...
    99+
    2022-10-18
  • 云计算教程学习入门视频课件:云计算管理工具有哪些?
    虚拟机要运行在虚拟机软件里,而虚拟机软件运行在物理机上。一台物理机通过虚拟机软件可以虚拟出多个虚拟机,虚拟机里再安装 Windows 或者 Linux 操作系统及各种应用软件,然后用户通过远程桌面等方式连接到虚拟机并使用虚拟机中的应用软件。...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作