CentOS Linux 安装命令之 rpm 详解
文章
林里克斯
实验平台:
CentOS Linux release 7.6.1810
RPM 版本:
RPM version 4.11.3
一、rpm 参数详解
$ rpm --help
#查询或验证包选择 options:
-a, --all #查询或验证所有 rpm 包
-f, --file #查询/验证 rpm 包所属文件
-g, --group #查询/验证组内的 rpm 包
-p, --package #查询/验证 rpm 包文件
--pkgid #查询/验证 rpm 包的标识符
--hdrid #查询/验证 rpm 包头部标识符
--triggeredby #查询由 rpm 包触发的包
--whatrequires #查询/验证需要依赖项的 rpm 包
--whatprovides #查询/验证提供依赖项的 rpm 包
--nomanifest #不将非 rpm 包文件作为清单处理
#查询 options (使用 -q 或 --query):
-c, --configfiles #列出所有配置文件
-d, --docfiles #只显示文档文件
-L, --licensefiles #只显示许可证文件
--dump #转储文件下列信息
-l, --list #显示 rpm 包的文件
--queryformat=QUERYFORMAT #使用下面的查询格式
:armor 以 ASCII 形式编码的公钥
:arraysize 在数组标记中显示单元数目
:base64 使用 base64 编码二进制数据
:date 使用 strftime(3) 的 "%c" 格式
:day 使用 strftime(3) 的 "%a %b %d %Y" 格式
:depflags 格式化依赖比较操作符
:deptype 格式化依赖类型
:expand 对宏进行展开
:fflags 格式化文件标记
:fstate 格式化文件状态
:fstatus 格式化文件校验状态
:hex 以16进制格式化
:octal 以八进制格式化
:perms 格式化文件权限
:pgpsig 显示签名指纹和时间
:shescape 对单引号进行转义(为了可以在脚本中使用)
:triggertype 显示触发器后缀
:vflags 文件校验标记
:xml 以 XML 格式编码数据
-s, --state #显示软件包中文件的状态
[normal(正常,表明文件未被其他软件包修改过)|not installed(未安装,表明文件未安装)|replaced(已替换,表明文件已被其他软件包修改替换过,不再是原先的文件)|net shared(网络共享,表明文件处于网络共享状态)]
#验证 options (使用 -V 或 --verify):
--nofiledigest #不验证文件摘要
--nofiles #不校验文件的任何属性
--nodeps #不校验软件包的依赖关系
--noscript #不执行 %verifyscript 脚本
#安装/升级/卸载 options:
--allfiles #安装或升级软件包中所有文件,即使它们可能应该被跳过
--allmatches #移除所有匹配的包(如果指定了多个包,通常会产生一个错误)
--badreloc #允许重新定位所有文件的路径,而不仅仅是二进制包中重定位提示(hint)包含的那些 OLDPATH,与 --relocate 搭配使用
-e, --erase=<package>+ #卸载指定的 rpm 包
--excludedocs #不安装任何被标记为文档的文件,包含手册或 textinfo
--excludepath=<path> #跳过安装 <path> 的文件
--force #与 --replacepkgs 和 --replacefiles 一样的效果
-F, --freshen=<packagefile>+ #若已经安装了就升级版本
-h, --hash #在包被解压时,输出 50 个井号(#),与 -v|--verbose 配合使用,得到漂亮一点的输出
--ignorearch #不验证 rpm 包架构
--ignoreos #安装前不验证操作系统
--ignoresize #安装前不检查磁盘空间是否够用
-i, --install #安装 rpm 包,后接 rpm 包文件
--justdb #只更新数据库,而不更新文件系统
--nodeps #不验证 rpm 包的依赖关系
--nofiledigest #不验证文件摘要
--nocontexts #不安装文件安全上下文
--noorder #不安装重排序。通常软件包列表会被重排序,以满足依赖关系
--noscripts #不执行对应脚本
--notriggers #不执行任何对应的触发脚本
--nocollections #不执行任何收集操作
--oldpackage #允许用旧软件包替换新软件包 (--force 会自动带上这个参数)
--percent #打印从软件包中解压文件的百分比。这是为了使 rpm 在其他工具中运行时更简单一些
--prefix=<dir> #对于可重定位的包,将把软件包重定位提示中所有以安装前缀(prefix)开头的文件路径转换为以 <dir> 目录
--relocate=<old>=<new> #对于可重定位的二进制包,将软件包重定位提示中所有以 <old> 开头的文件路径转换为以 <new> 开头
--replacefiles #忽略包之间的文件冲突,强制安装软件包,即使它将覆盖其他已安装软件包的文件
--replacepkgs #如果已经安装了包,再重新覆盖安装
--test #不安装软件包,仅仅检测并报告可能的冲突
-U, --upgrade=<packagefile>+ #升级 rpm 包
--reinstall=<packagefile>+ #重新安装
#所有 rpm 模式和可执行文件的通用 options:
-D, --define='MACRO EXPR' #将 MACRO 宏的值定义为 EXPR
--undefine=MACRO #撤销 MACRO 宏
-E, --eval='EXPR' #打印出值 EXPR 对应的宏
--macros=<FILE:...> #指定 <FILE:...> 来替代 macros 配置文件
--noplugins #不启用任何插件
--nodigest #读取时不校验包或头部的摘要信息
--nosignature #读取时不校验软件包或头部签名
--rcfile=<FILE:...> <FILE:...>中冒号分隔的每个文件都被 rpm 按顺序读取,从中获得配置信息
-r, --root=ROOT 以 ROOT 作为根文件系统进行操作 (默认是: "/")
--dbpath=DIRECTORY #使用 DIRECTORY 中的数据库,而不是默认的 /var/lib/rpm
--querytags #显示已知的查询标签
--showrc #显示 rpmrc 和 macros 配置文件中定义的选项的值
--quiet #输出尽可能少的信息,通常只有错误信息才会显示出来
-v, --verbose #提供更详细的输出
--version #打印版本信息
Options implemented via popt alias/exec:
--scripts #列出软件包自定义的脚本,他们是安装和卸载等过程的一部分
--setperms #设置 rpm 包中的文件权限
--setugids ##设置 rpm 包中属主/属组
--conflicts #显示此软件包与哪些功能有冲突
--obsoletes #列出被此软件包废弃的软件包
--provides #列出软件包提供的功能
--requires #列出此软件包所依赖的功能(通常是一个软件包)
--info #显示软件包信息,包括名称、版本、描述
--changelog #显示软件包的变更信息
--xml #用 xml 列出元数据
--triggers #显示软件包中包含的触发脚本
--last #列出软件包时以安装时间排序,最新的在上面
--dupes #列出重复的包
--filesbypkg #列出每个所选软件包中的文件
--fileclass #以类列出文件名
--filecolor #以颜色列出文件名
--fscontext #以安全上下文列出文件名
--fileprovide #以 provides 了的列出文件名
--filerequire #以 required 列出文件名
--filecaps #以 POSIX1.e capabilities 列出文件名
帮助信息 options:
-?, --help #打印帮助信息
--usage #查看简要的常用的选项信息
二、使用案例
1.查询所有已安装的 rpm
包
$ rpm -qa "httpd*" ; rpm -qa | grep httpd
2.不安装查看 httpd
包里的内容
$ rpm -qlp mysql-community-client-5.7.10-1.el7.x86_64.rpm
3.查看一个文件属于哪个 rpm
包
$ rpm -qf `which vim`
vim-enhanced-7.4.160-5.el7.x86_64
4.查看最近安装的 10
个包
$ rpm -qa --last | head
5.查看已安装 rpm
包的信息
$ rpm -qi bash
Name : bash
Version : 4.2.46
Release : 31.el7
Architecture: x86_64
Install Date: Tue 18 Dec 2018 05:34:17 PM CST
Group : System Environment/Shells
Size : 3667773
License : GPLv3+
Signature : RSA/SHA256, Mon 12 Nov 2018 10:21:49 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : bash-4.2.46-31.el7.src.rpm
Build Date : Wed 31 Oct 2018 01:09:33 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.gnu.org/software/bash
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
6.查看已安装的 rpm
包的配置文件
$ rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
7.查看已安装的 rpm
包的文档文件
$ rpm -qd bash
/usr/share/doc/bash-4.2.46/COPYING
/usr/share/info/bash.info.gz
/usr/share/man/man1/..1.gz
/usr/share/man/man1/:.1.gz
/usr/share/man/man1/[.1.gz
/usr/share/man/man1/alias.1.gz
/usr/share/man/man1/bash.1.gz
8.查看已安装的 rpm
包的文件状态
$ rpm -qs lrzsz
normal /usr/bin/rb
normal /usr/bin/rx
normal /usr/bin/rz
normal /usr/bin/sb
normal /usr/bin/sx
normal /usr/bin/sz
normal /usr/share/locale/de/LC_MESSAGES/lrzsz.mo
normal /usr/share/man/man1/rz.1.gz
normal /usr/share/man/man1/sz.1.gz
#参数可参考 -s, --state 参数
9.查看已安装的 rpm
包的所有文件
$ rpm -ql lrzsz
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz
10.查看 rpm
包安装、卸载前后的脚本
$ rpm -q --scripts mysql-server
preinstall scriptlet (using /bin/sh):
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s /bin/bash \
-c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :
postinstall scriptlet (using /bin/sh):
if [ $1 = 1 ]; then
/sbin/chkconfig --add mysqld
fi
/bin/chmod 0755 /var/lib/mysql
/bin/touch /var/log/mysqld.log
preuninstall scriptlet (using /bin/sh):
if [ $1 = 0 ]; then
/sbin/service mysqld stop >/dev/null 2>&1
/sbin/chkconfig --del mysqld
fi
postuninstall scriptlet (using /bin/sh):
if [ $1 -ge 1 ]; then
/sbin/service mysqld condrestart >/dev/null 2>&1 || :
11.验证 rpm
包的状态
$ rpm -Va
#验证已安装的所有 rpm 包状态
missing /usr/local/cloudSafed/nylib/libthriftnb-0.9.3.so
S.5....T. /usr/local/cloudSafed/secure
..5....T. /usr/local/cloudSafed/verserv
S.5....T. c /etc/sysconfig/authconfig
.....UG.. /etc/supervisord.d
.M....... /var/run/supervisor
S.5....T. c /etc/yum.repos.d/CentOS-Base.repo
代码 | 含义 |
---|---|
S | 表示文件大小 |
M | 表示文件权限 |
5 | 表示 MD5 校验和 |
D | 表示主从设备号 |
L | 表示符号链接 |
U | 表示属主 |
G | 表示属组 |
T | 表示最后修改时间 |
三、RPM 的文件详解
1.rpmrc
配置文件
/usr/lib/rpm/rpmrc
/usr/lib/rpm/redhat/rpmrc
/etc/rpmrc
~/.rpmrc
2.Macro
配置文件
/usr/lib/rpm/macros
/usr/lib/rpm/redhat/macros
/etc/rpm/macros
~/.rpmmacros
3.数据库
/var/lib/rpm/Basenames
/var/lib/rpm/Conflictname
/var/lib/rpm/Dirnames
/var/lib/rpm/Group
/var/lib/rpm/Installtid
/var/lib/rpm/Name
/var/lib/rpm/Obsoletename
/var/lib/rpm/Packages
/var/lib/rpm/Providename
/var/lib/rpm/Requirename
/var/lib/rpm/Sha1header
/var/lib/rpm/Sigmd5
/var/lib/rpm/Triggername
4.临时文件
/var/tmp/rpm*
四、RPM Database 的备份与恢复
1.RPM Database
基本结构
$ file /var/lib/rpm/*
/var/lib/rpm/Basenames: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Conflictname: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/__db.001: Applesoft BASIC program data
/var/lib/rpm/__db.002: 386 pure executable
/var/lib/rpm/__db.003: 386 pure executable not stripped
/var/lib/rpm/Dirnames: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Group: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Installtid: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Name: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Obsoletename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Packages: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Providename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Requirename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Sha1header: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Sigmd5: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Triggername: Berkeley DB (Btree, version 9, native byte-order)
#默认情况下,RPM 存放在 /var/lib/rpm 目录,除了 __db.00* 是数据文件外,其他文件都属于 Berkeley DB 格式
#包名查询命令 rpm -q package_name就是通过 /var/lib/rpm/Name文件得到的。如果这个文件受到损坏或缺失,则 rpm -q package_name命令无法正常工作
2.RPM Database
备份
$ tar cf rpm_backup.tar /var/lib/rpm
3.恢复
$ rpm --rebuild
- 通常,恢复方法有下面三种:
- 只移除
/var/lib/rpm/__db*
文件,然后执行rpm --rebuilddb
命令 - 当上面的方法没能恢复数据库时,转移
/var/lib/rpm
文件夹,然后执行rpm --rebuilddb
命令 - 当前面两个方法都没奏效时,则表示情况比较严重,需要重新创建
RPM
数据库,再进行重建数据库操作。
首先,选择一个目录创建新的数据库,执行rpm --initdb --dbpath new_db_path
;然后,执行重构数据库命令:rpm --rebuilddb
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1460 0 2020-12-23
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
10-10
端口转发之 SSH 转发
09-26
CentOS7 开启 IPv6
09-06
Python3安装PyMySQL驱动
01-29
Apache配置账号密码验证
07-06
Linux安全加固的建议
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353452 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...