Linux——RPM软件管理程序:rpm

xiaoxiao2025-10-17  9

1、RPM默认安装路径

若环境检查合格,那么RPM文件就开始被安装到Linux系统,安装完毕后,该软件的相关信息就会被写入到/var/lib/rpm,目录下的数据库文件中。

2、RPM安装(install)

 

[root@study ~]# rpm -ivh package_name 选项与参数: -i :install 的意思 -v :察看更细部的安装信息画面 -h :以安装信息列显示安装进度 范例一:安装原版光盘上的 rp-pppoe 软件 [root@study ~]# rpm -ivh /mnt/Packages/rp-pppoe-3.11-5.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing...  1:rp-pppoe-3.11-5.el7 ################################# [100%] 范例二、一口气安装两个以上的软件时: [root@study ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm # 后面直接接上许多的软件文件! 范例三、直接由网络上面的某个文件安装,以网址来安装: [root@study ~]# rpm -ivh http://website.name/path/pkgname.rpm

rpm 安装时常用的选项与参数说明

可下达的选项 代表意义--nodeps 使用时机:当发生软件属性相依问题而无法安装,但你执意安装时 危险性: 软件会有相依性的原因是因为彼此会使用到对方的机制或功能,如果强制安装而不 考虑软件的属性相依, 则可能会造成该软件的无法正常使用!--replacefiles使用时机: 如果在安装的过程当中出现了『某个文件已经被安装在你的系统上面』的信息, 又或许出现版本不合的讯息 (confilcting files) 时,可以使用这个参数来直接覆盖文件。 危险性: 覆盖的动作是无法复原的!所以,你必须要很清楚的知道被覆盖的文件是真的可以 被覆盖喔!否则会欲哭无泪!--replacepkgs使用时机: 重新安装某个已经安装过的软件!如果你要安装一堆 RPM 软件文件时,可以使 用 rpm -ivh *.rpm ,但若某些软件已经安装过了, 此时系统会出现『某软件已安装』的信息, 导致无法继续安装。此时可使用这个选项来重复安装喔!--force使用时机:这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体!--test使用时机:想要测试一下该软件是否可以被安装到使用者的 Linux 环境当中,可找出是否有 属性相依的问题。范例为:rpm -ivh pkgname.i386.rpm --testjustdb 使用时机: 由于 RPM 数据库破损或者是某些缘故产生错误时,可使用这个选项来更新软件 在数据库内的相关信息。--nosignature 使用时机: 想要略过数字签名的检查时,可以使用这个选项。--prefix 新路径 使用时机:要将软件安装到其他非正规目录时。举例来说,你想要将某软件安装到 /usr/local  而非正规的 /bin, /etc 等目录, 就可以使用『 --prefix /usr/local 』来处理了。--noscripts使用时机:不想让该软件在安装过程中自行执行某些系统指令。 说明: RPM 的优点除了可以将文件放置到定位之外,还可以自动执行一些前置作业的指令, 例如数据库的初始化。 如果你不想要让 RPM 帮你自动执行这一类型的指令,就加上他吧!

3、RPM升级与更新(upgrade/freshen)

以 -Uvh 或 -Fvh 来升级即可,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样的。不过, -U 与 -F 的意义还是不太一样的,基本的差别是这样的: -Uvh   后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动更新至新版; -Fvh   如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只有已安装至你 Linux 系统内的软件会被               『升级』! 由上面的说明来看,如果你想要大量的升级系统旧版本的软件时,使用 -Fvh 则是比较好的作法,因为没有安装的软件才不会被不小心安装进系统中。但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的机器上尚无这一个软件,那么很抱歉,该软件并不会被安装在你的 Linux 主机上面,所以请重新以 ivh 来安装吧!

4、RPM查询(query)

root@study ~]# rpm -qa <==已安装软件 [root@study ~]# rpm -q[licdR] 已安装的软件名称 <==已安装软件 [root@study ~]# rpm -qf 存在于系统上面的某个文件名 <==已安装软件 [root@study ~]# rpm -qp[licdR] 未安装的某个文件名 <==查阅 RPM 文件 选项与参数: 查询已安装软件的信息: -q :仅查询,后面接的软件名称是否有安装; -qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称; -qi :列出该软件的详细信息 (information),包含开发商、版本与说明等; -ql :列出该软件所有的文件与目录所在完整文件名 (list); -qc :列出该软件的所有配置文件 (找出在 /etc/ 底下的檔名而已) -qd :列出该软件的所有说明文件 (找出与 man 有关的文件而已) -qR :列出与该软件有关的相依软件所含的文件 (Required 的意思) -qf :由后面接的文件名,找出该文件属于哪一个已安装的软件; -q --scripts:列出是否含有安装后需要执行的脚本档,可用以 debug 喔! 查询某个 RPM 文件内含有的信息: -qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM 文件内的信息,而非已安装的软件信息!注意

在查询的部分,所有的参数之前都需要加上 -q 才是所谓的查询!查询主要分为两部分, 一个是查 已安装到系统上面的的软件信息,这部份的信息都是由 /var/lib/rpm/ 所提供。另一个则是查某个 rpm  文件内容,等于是由 RPM 文件内找出一些要写入数据库内的信息就是了,这部份就得要使用 -qp (p  是 package 的意思)。 那就来看看几个简单的范例吧!

范例一:找出你的 Linux 是否有安装 logrotate 这个软件? [root@study ~]# rpm -q logrotate                                                                                                                                                 logrotate-3.8.6-4.el7.x86_64 [root@study ~]# rpm -q logrotating package logrotating is not installed # 注意到,系统会去找是否有安装后面接的软件名称。注意,不必要加上版本喔! # 至于显示的结果,一看就知道有没有安装啦! 范例二:列出上题当中,属于该软件所提供的所有目录与文件: [root@study ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf ....(以下省略).... # 可以看出该软件到底提供了多少的文件与目录,也可以追踪软件的数据。 范例三:列出 logrotate 这个软件的相关说明数据: [root@study ~]# rpm -qi logrotate Name : logrotate # 软件名称 Version : 3.8.6 # 软件的版本 Release : 4.el7 # 释出的版本 Architecture: x86_64 # 编译时所针对的硬件等级 Install Date: Mon 04 May 2015 05:52:36 PM CST # 这个软件安装到本系统的时间 Group : System Environment/Base # 软件是放再哪一个软件群组中 Size : 102451 # 软件的大小 License : GPL+ # 释出的授权方式 Signature : RSA/SHA256, Fri 04 Jul 2014 11:34:56 AM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : logrotate-3.8.6-4.el7.src.rpm # 这就是 SRPM 的檔名 Build Date : Tue 10 Jun 2014 05:58:02 AM CST # 软件编译打包的时间 Build Host : worker1.bsys.centos.org # 在哪一部主机上面编译的 Relocations : (not relocatable)  Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : https://fedorahosted.org/logrotate/ Summary : Rotates, compresses, removes and mails system log files Description : # 这个是详细的描述! The logrotate utility is designed to simplify the administration oflog files on a system which generates a lot of log files. Logrotateallows for the automatic rotation compression, removal and mailing oflog files. Logrotate can be set to handle a log file daily, weekly,monthly or when the log file gets to a certain size. Normally,logrotate runs as a daily cron job.Install the logrotate package if you need a utility to deal with the log files on your system. # 列出该软件的 information (信息),里面的信息可多着呢,包括了软件名称、 # 版本、开发商、SRPM 文件名、打包次数、简单说明信息、软件打包者、

5、RPM验证与数字签名(verify/signature)

验证的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是使用/var/lib/rpm底下的数据库内容来比对目前Linux系统环境下所有的软件文件。当数据不小心遗失,或者是误杀某个软件时,或者不小心不知道修改某个软件内容时,就可以用此俩验证原本的文件系统

 

[root@study ~]# rpm -Va [root@study ~]# rpm -V 已安装的软件名称 [root@study ~]# rpm -Vp 某个 RPM 文件的档名 [root@study ~]# rpm -Vf 在系统上面的某个文件 选项与参数: -V :后面加的是软件名称,若该软件所含的文件被更动过,才会列出来; -Va :列出目前系统上面所有可能被更动过的文件; -Vp :后面加的是文件名,列出该软件内可能被更动过的文件; -Vf :列出某个文件是否被更动过~ 范例一:列出你的 Linux 内的 logrotate 这个软件是否被更动过? [root@study ~]# rpm -V logrotate # 如果没有出现任何讯息,恭喜你,该软件所提供的文件没有被更动过。 # 如果有出现任何讯息,才是有出现状况啊! 范例二:查询一下,你的 /etc/crontab 是否有被更动过? [root@study ~]# rpm -Vf /etc/crontab .......T. c /etc/crontab # 瞧!因为有被更动过,所以会列出被更动过的信息类型!

好了,那么我怎么知道到底我的文件被更动过的内容是什么?例如上面的范例二。呵呵!简单的说明 一下吧! 例如,我们检查一下 logrotate 这个软件:

[root@study ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf /etc/logrotate.d /usr/sbin/logrotate /usr/share/doc/logrotate-3.8.6 /usr/share/doc/logrotate-3.8.6/CHANGES /usr/share/doc/logrotate-3.8.6/COPYING /usr/share/man/man5/logrotate.conf.5.gz /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate.status # 呵呵!共有 10 个文件啊!请修改 /etc/logrotate.conf 内的 rotate 变成 5 [root@study ~]# rpm -V logrotate ..5....T. c /etc/logrotate.conf

你会发现在档名之前有个 c ,然后就是一堆奇怪的文字了。那个 c 代表的是 configuration , 就是配置文件的意思。至于最前面的几个信息是: · S :(file Size differs) 文件的容量大小是否被改变 · M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变 · 5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同 · D :(Device major/minor number mis-match) 装置的主/次代码已经改变 · L :(readLink(2) path mis-match) Link 路径已被改变 · U :(User ownership differs) 文件的所属人已被改变 · G :(Group ownership differs) 文件的所属群组已被改变 · T :(mTime differs) 文件的建立时间已被改变 · P :(caPabilities differ) 功能已经被改变 所以,如果当一个配置文件所有的信息都被更动过,那么他的显示就会是:SM5DLUGTP c filename 至于那个 c 代表的是『 Config file 』的意思,也就是文件的类型,文件类型有底下这几类: · c :配置文件 (config file) · d :文件数据文件 (documentation) · g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file) · l :许可证文件 (license file) · r :自述文件 (read me)<>

<1>数字签名(digital signature)

软件开发商原厂所推出的软件会有一个厂商自己的签章系统,该签章被数字化,厂商可以数字签名系统产生一个专属与该软件的签章,并将公钥放出,当安装一个RPM文件时:

(1)安装原厂释放出的公钥文件

(2)rpm指令会去读取RPM文件的签章信息,与文件系统内的签章信息比对

(3)若签章相同予以安装,找不到相关的签章信息时,予以警告并且停止安装。

 

 CentOS 使用的数字签名系统为 GNU 计划的 GnuPG (GNU Privacy Guard, GPG)(注 1)。 GPG可以透过哈希运算,算出独一无二的专属密钥系统或者是数字签名系统首先必须要安装原厂释出的 GPG 数字签名的公钥文件,CentOS 的数字签名位于:

[root@study ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 -rw-r--r--. 1 root root 1690 Apr 1 06:27 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@study ~]# cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.5 (GNU/Linux) mQINBFOn/0sBEADLDyZ+DQHkcTHDQSE0a0B2iYAEXwpPvs67cJ4tmhe/iMOyVMh9 ....(中间省略).... -----END PGP PUBLIC KEY BLOCK-----

从上面的输出,你会知道该数字签名码其实仅是一个随机数而已,这个随机数对于数字签名有意义而已, 我们看不懂啦!那么这个文件如何安装呢?透过底下的方式来安装即可喔

[root@study ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

由于不同版本 GPG 密钥文件放置的位置可能不同,不过档名大多是以 GPG-KEY 来说明的, 因此你可以简单的使用 locate 或 find 来找寻,如以下的方式来搜寻即可:

[root@study ~]# locate GPG-KEY [root@study ~]# find /etc -name '*GPG-KEY*'

那安装完成之后,基本上都是使用 pubkey 作为软件的名称呈现,那我们先列出密钥软件名称后,再以 -qi 的方式来查询看看该软件的信息:

[root@study ~]# rpm -qa | grep pubkey gpg-pubkey-f4a80eb5-53a7ff4b [root@study ~]# rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b Name : gpg-pubkey Version : f4a80eb5 Release : 53a7ff4b Architecture: (none) Install Date: Fri 04 Sep 2015 11:30:46 AM CST Group : Public Keys Size : 0 License : pubkey Signature : (none) Source RPM : (none) Build Date : Mon 23 Jun 2014 06:19:55 PM CST Build Host : localhost Relocations : (not relocatable) Packager : CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org> Summary : gpg(CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>) Description : -----BEGIN PGP PUBLIC KEY BLOCK----- Version: rpm-4.11.1 (NSS-3) ....(底下省略)....

重点就是最后面出现的那一串乱码啦!那可是作为数字签名非常重要的一环哩! 如果你忘记加上数字签名,很可能很多原版软件就不能让你安装啰~除非你利用 rpm 时选择略过数字签名的选项。

6、RPM反安装与重建数据库(erase/rebuilddb)

反安装就是软件卸载,解安装的过程一定是由最上层往下解除,以rp-pppoe为例,该软件主要依据ppp这个软件来安装,当解除ppp时,就必须要先解除rp-pppoe。

#找出与 pam 有关的软件名称,并尝试移除 pam 这个软件: [root@study ~]# rpm -qa | grep pam fprintd-pam-0.5.0-4.0.el7_0.x86_64 pam-1.1.8-12.el7.x86_64 gnome-keyring-pam-3.8.2-10.el7.x86_64 pam-devel-1.1.8-12.el7.x86_64 pam_krb5-2.4.8-4.el7.x86_64 [root@study ~]# rpm -e pam error: Failed dependencies: <==这里提到的是相依性的问题  libpam.so.0()(64bit) is needed by (installed) systemd-libs-208-20.el7.x86_64  libpam.so.0()(64bit) is needed by (installed) libpwquality-1.2.3-4.el7.x86_64 ....(以下省略).... # 2. 若仅移除 pam-devel 这个之前范例安装上的软件呢? [root@study ~]# rpm -e pam-devel <==不会出现任何讯息! [root@study ~]# rpm -q pam-devel package pam-devel is not installed

从范例一我们知道 pam 所提供的函式库是让非常多其他软件使用的,因此你不能移除 pam ,除非将其他相依软件一口气也全部移除!你当然也能加 --nodeps 来强制移除, 不过,如此一来所有会用到 pam 函式库的软件,都将成为无法运作的程序,我想,你的主机也只好准备停机休假了吧! 由于 RPM 文件常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的文件破损。果真如此的话,那你该如何是好?别担心,我们可以使用 --rebuilddb 这个选项来重建一下数据库喔! 作法如下:

[root@study ~]# rpm --rebuilddb <==重建数据库

 

转载请注明原文地址: https://www.6miu.com/read-5038106.html

最新回复(0)