[华为云在线课程][Linux平台软件包安装与管理][第三章RPM包管理器][学习笔记]

举报
John2021 发表于 2022/03/28 07:32:43 2022/03/28
【摘要】 CentOS系统上使用RPM命令管理程序包功能:安装、卸载、升级、查询、校验、数据库维护 安装NPM包如果CentOS7默认没有安装NPM,首先进行安装#新建node文件夹在/usr/local/mkdir node#获取node压缩包wget https://registry.npmmirror.com/-/binary/node/latest-v4.x/node-v4.9.1-linux...

CentOS系统上使用RPM命令管理程序包
功能:安装、卸载、升级、查询、校验、数据库维护

安装NPM包

如果CentOS7默认没有安装NPM,首先进行安装

#新建node文件夹在/usr/local/
mkdir node
#获取node压缩包
wget https://registry.npmmirror.com/-/binary/node/latest-v4.x/node-v4.9.1-linux-x64.tar.gz
#解压包
tar -zxvf node-v4.9.1-linux-x64.tar.gz
#进入文件夹
cd node-v4.9.1-linux-x64.tar.gz
#创建软连接
[root@localhost node-v4.9.1-linux-x64]# ln -s /usr/local/node/node-v4.9.1-linux-x64/bin/npm /usr/local/bin/npm
[root@localhost node-v4.9.1-linux-x64]# ln -s /usr/local/node/node-v4.9.1-linux-x64/bin/node /usr/local/bin/node
#检验版本
[root@localhost /]# npm -v
2.15.11

安装

格式:

rpm {-i|--install} [install-options] PACKAGE_FILE

选项:

-v:verbose
-vv:
-h:以#显示程序包管理执行进度

常用组合:

rpm -ivh PACKAGE_FILE

RPM包安装[install-optinos]

--test:测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
    %pre:安装前脚本 --nopre
    %post:安装后脚本 --nopost
    %preun:卸载前脚本 --nopreun
    %postun:卸载后脚本 --nopostun

升级和降级

RPM包升级

RPM {-U|--upgrade} [install-options] PACKAGE_FILE
RPM {-F|--freshen} [install-options] PACKAGE_FILE

对应选项:

upgrade:安装有旧版程序包,则升级,如果不存在旧版程序包,则安装
freshen:安装有旧版程序包,则升级,如果不存在旧版程序包,则不执行操作
--oldpackage:降级
--force:强制安装

常用组合

rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE

升级注意项:

  1. 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
  2. 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

包查询

rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装组成
-p rpmfile:针对尚未安装的程序包文件做查询操作

[query-options]
--changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的版本

#和CAPABILITY相关
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
--provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY

常用查询用法

-qa
-q PACKAGE
-qi PACKAGE
-qc PACKAGE
-ql PACKAGE
-qd PACKAGE
-q --scripts PACKAGE
-qf FILE
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE

包卸载

格式:

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

注意:当包卸载时,对应的配置文件不会删除,以FILENAME.rpmsave形式保留
例子:强行删除rpm包,并恢复

rpm -e rpm --nodeps
#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
#reboot

包校验

在安装包时,系统也会检查包的来源是否是合法的
检查包的完整性和签名

rpm -K | --checksig | rpmfile

在检查包的来源和完整性前,必须导入所需要的公钥
例子:

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

例子:CentOS7

[root@localhost /]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost /]# rpm -K /run/media/hello/CentOS\ 7\ x86_64/Packages/httpd-2.4.6-95.el7.centos.x86_64.rpm

例子:校验包文件

[root@localhost ~]$ rpm -K /run/media/hello/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm 
/run/media/hello/CentOS 7 x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@localhost ~]$ cp /run/media/hello/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm /home/hello/Downloads/
[root@localhost Downloads]# ll
total 48
-rw-rw-r--. 1 hello hello 47508 Mar 28 07:08 tree-1.6.0-10.el7.x86_64.rpm
[root@localhost Downloads]# rpm -K tree-1.6.0-10.el7.x86_64.rpm 
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (MD5) PGP MD5 NOT OK

软件在安装时,会将包里的每个文件的元数据,如:大小、权限、所有者、时间等记录至rpm相关的数据库中,可以用来检查包中的文件是否和当初安装时所有变化

rpm {-V|--verify} [select-options] [verify-options]
#示例
[root@localhost ~]# rpm -V centos-release
S  file Size differs
M  Mode differs(includes permissions and file type)
5  digest(formerly MD5 sum) differs
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
.()  表示当前位置代表的字符含义一致
c  所在的位置表示文件类型
C  配置文件
d  文件数据文件
g  该文件不属于某个文件(少数情况)
l  许可证文件(license file)
r  自述文件(README

例子:

[root@localhost ~]# rpm -qf /etc/issue
centos-release-7-9.2009.0.el7.centos.x86_64
[root@localhost rpm]# vim /etc/issue
#修改内容
hello world
\S
Kernel \r on an \m
[root@localhost rpm]# rpm -V centos-release 
S.5....T.  c /etc/issue
[root@localhost rpm]# rpm -ql centos-release 
/etc/centos-release
/etc/centos-release-upstream
/etc/issue
/etc/issue.net
/etc/os-release
/etc/pki/rpm-gpg
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
/etc/redhat-release
/etc/rpm/macros.dist
/etc/system-release
/etc/system-release-cpe
/etc/yum.repos.d/CentOS-Base.repo
/etc/yum.repos.d/CentOS-CR.repo
/etc/yum.repos.d/CentOS-Debuginfo.repo
/etc/yum.repos.d/CentOS-Media.repo
/etc/yum.repos.d/CentOS-Sources.repo
/etc/yum.repos.d/CentOS-Vault.repo
/etc/yum.repos.d/CentOS-fasttrack.repo
/etc/yum.repos.d/CentOS-x86_64-kernel.repo
/etc/yum/vars/contentdir
/etc/yum/vars/infra
/usr/lib/os-release
/usr/lib/systemd/system-preset/85-display-manager.preset
/usr/lib/systemd/system-preset/90-default.preset
/usr/share/centos-release/EULA
/usr/share/doc/centos-release/Contributors
/usr/share/doc/centos-release/GPL
/usr/share/doc/redhat-release
/usr/share/redhat-release

数据库维护

rpm包安装时生成的信息,都放在rpm数据库中,路径如下:

[root@localhost /]# ls /var/lib/rpm
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5

可以重建数据库

rpm {--initdb | --rebuilddb}
initdb:初始化,如果事先不存在数据库,则新建,否则不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。