linux自学笔记——rpm程序包管理

简介:

         RPM是Redhat PackageManager(RPM程序包管理器)的缩写,这一文件格式名称虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、Suse以及Turbo Linux的分发版本也都有采用。RPM程序包管理器可分为安装、升级、卸载、查询、校验等五种功能,以下我们将会对这五种功能的相应的用法一一说明。

 

RPM程序包:

      源代码:name-VERSION.tar.gz    源代码由RPM自动编译安装;

           VERSION: major.minor.release     主版本号.次版本号.源代码的发行版本号

RPM包的命名格式:

      name-VERSION-release.arch.rpm

           VERSION: major.minor.release

           release.arch: RPM包的发型号,同时release还包含此包适用的os

                 release.os: 2.e17.i386.rpm

                 archetcture:i386,x64,ppc,noarch

           例如:源代码经RPM编译后将会变成如下的包名:

           redis-3.0.2.tar.gz -->redis-3.0.2-1.centos.x64.rpm

RPM包的依赖关系:

      X,Y,Z

           X--? Y,Z  (X依赖于Y,Z)即要想安装X包,必须首先安装Y,Z这两个程序包;

      当然,也有一些前端工具可以自动解决依赖关系:

      yum:rhel系列系统上rpm包管理器的前端工具;

      apt-get(apt-cache):deb包管理器的前段工具;

      zypper:suse的rpm管理器的前段工具;

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

程序包管理器:

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

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

文件清单

安装或卸载时运行的脚本

2.     数据库(公共)

程序包的名称和版本;

依赖关系;

功能说明;

安装生成的各文件的文件路径及校验码信息;

获取程序包的途径:

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

http://mirrors.aliyun.com;

http://mirrors.sohu.com;

http://mirrors.163.com;

(2)            项目的官方站点

(3)            第三方组织

(a)            EPEL

(b)           搜索引擎

http://pkgs.org;

http://rpmfind.net;

http://rpm.phone.net;

      建议:检查其合法性

           来源的合法性;

           程序包的完整性;

Centos系统上rpm命令管理程序包:

      安装、升级、卸载、查询和校验、数据库维护

      rpm命令:rpm - RPM Package Manager

                 rpm [OPTIONS] [PACKAGE_FILE]

           安装:-i,--install;

           升级:-U,--update;-F,--freshen;

           卸载:-e,--erase;

           查询:-q,--query;

           校验: -V,--verify;

           数据库维护: --builddb,--initdb;

 

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

           rpm –ivh PACKAGES_FILE …

           GENERAL OPTIONS:

                 -v:verbose,详细信息;

                 -vv:更详细的输出;

           [install-options]

                 -h: hash marks输出进度条;每个#号表示2%的进度;

                 --test:测试安装,检查并报告依赖关系及冲突消息等;

                 --nodeps:忽略依赖关系,强烈不建议;

                 wKiom1mMH0Ly9tdeAAAT1NDnceM016.png-wh_50

                 --replacepkgs:重新安装

                 wKioL1mMH2bwYVulAAAfF8_IzHo439.png-wh_50

           注意:rpm可以自带脚本:

                 四类:--noscripts

                      preinstall:开始安装之前运行的脚本,%pre,--nopre

                      postinstall:安装过程完成之后运行的脚本,%post,--nopost

                      preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun

                      postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun

                 --nosignature:不检查包签名信息,不检查来源合法性;

                 --nodigest:不检查包完整性信息;

                       wKiom1mMH36DZ5tWAAAjSk7XY5A715.png-wh_50

      我们将通过以下实例对rpm的安装功能的用法进行具体说明:

1.     首先我们把虚拟机的centos6.6的光盘镜像挂载至本地/media/cdrom中,挂载为只读模式,切查看是否挂载成功;

 wKiom1mMIKXAYZZsAAAyPFcKs5A409.png-wh_50

2.     进入/media/cdrom/Packages目录,安装zsh-4.3.10-7.el6.x86_64.rpm;

wKiom1mMH7qApFdHAAAYXpvhRS8310.png-wh_50

     

      查询:

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

           [select-options]

                 PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;

                 -a,--all:查询所有的已经安装过的包;

                 -f   FILE:查询指定的文件由那个程序包安装生成;

                 -p,--packagePACKAGE_FILE:用于实现对未安装的程序包执行查询操作

                 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;

                 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

 

           [query-options]

                 --changelog:查询rpm包的changelog;

                 -l,--list:程序安装生成的所有文件列表;

                 -i,--info:程序包的相关信息,版本号,大小,所属的组,等;

                 -c,--configfiles:查询指定的程序包提供的配置文件;

                 -d,--docfiles:查询指定的程序包提供的文档;

                 --provides:列出指定的程序包提供的所有的CAPABILITY;

                 -R,--requires:查询指定的程序包的依赖关系;

                 --scripts:查看程序包自带的脚本片段;

           用法:

                 -qi PACKAGE: 程序包的相关信息,版本号,大小,所属的组,等;

                 wKiom1mMH9zhzFkgAACBVH9HWc8269.png-wh_50

                 -qf FILE:查询指定的文件由那个程序包安装生成;

                 wKiom1mMH-nyIJ5ZAAAKXANMEeo597.png-wh_50

                 -qc PACKAGE:查询指定的程序包提供的配置文件;

                 wKiom1mMH_OSO_35AAAQAoczxTY130.png-wh_50

                 -ql PACKAGE:程序安装生成的所有文件列表;

                  wKiom1mMIMfCQTaVAAAcyfTT-u4615.png-wh_50

                 -qd PACKAGE:查询指定的程序包提供的文档;

                 wKioL1mMIBfiI4ajAACBC_zS_2E938.png-wh_50

                 -qpi  PACKAGE_FILE:对未安装的程序包的信息,版本等等进行查询操作;

                 wKiom1mMICThZD2KAABzbHfb3do064.png-wh_50

                 -qpl PACKAGE_FILE

                 -qpc PACKAGE_FILE

                 -qlf  FILE:查询指定的文件所在的安装包中文件分别被安装到哪个目录下;

                 wKiom1mMIDnyQkRdAABK7alsYPA187.png-wh_50

      升级:

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

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

                 -U:升级或安装;

                 -F:升级

           rpm -Uvh PACKAGE_FILE ...

           rpm -Fvh PACKAGE_FILE ...

                 --oldpackage:降级;

                 --force:强制升级;

           wKiom1mMIEfhvlh6AAAeALjDNHg133.png-wh_50

           可以看出,rpm –U 选项既可以升级也可以安装,而-F选项只能升级。

      卸载:                    

           rpm {-e|--erase} [--allmatches][--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

                 --allmatches:卸载所有匹配指定名称的程序包的各版本;

                 --nodeps:忽略依赖关系

                 --test:测试卸载,dry run模式

      校验:

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

 

           S file Size differs  #文件大小

           M Mode differs (includes permissionsand file type)  #模式

           5 digest (formerly MD5 sum) differs  #MD5校验码

           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           #性能

      例:

           wKiom1mMIFXDRMNHAAAqac7OQwA441.png-wh_50

      包来源合法性验证和完整性验证:

           来源合法性验证:

           完整性验证:

           获取并导入信任的包制作者的秘钥:

                 对于centos发行版来说:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

           验正:

                 (1) 安装此组织签名的程序时,会自动执行验正;

                 (2) 手动验正:rpm -KPACKAGE_FILE

      数据库的重建:

           rpm管理器数据库路径:/var/lib/rpm/

           wKiom1mMIGHBmxPrAAAlJ-i3cfg724.png-wh_50

                 查询操作:通过此处的数据库进行;

           获取帮助:

                 Centos6:man rpm

                 Centos7:man rpmdb

           rpm {--initdb|--rebuilddb} [--dbpathDIRECTORY] [--root DIRECTORY]

                 --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当时有时不执行任何操作                --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

          




本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1955188,如需转载请自行联系原作者
相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
126 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
2月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
180 6
|
3月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
653 2
|
3月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
69 2
|
27天前
|
Kubernetes Linux 测试技术
|
8天前
|
存储 缓存 Linux
【Linux】另一种基于rpm安装yum的方式
通过本文的方法,您可以在离线环境中使用RPM包安装YUM并进行必要的配置。这种方法适用于无法直接访问互联网的服务器或需要严格控制软件源的环境。通过配置本地YUM仓库,确保了软件包的安装和更新可以顺利进行。希望本文能够为您在特定环境中部署YUM提供实用的指导。
50 0
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
84 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
38 1
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
43 5
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。