rpm包管理(二)

查询
查询库文件
包查询
[select-options]
[query-options]
licdR
常用的查询用法:
卸载:
二进制文件的恢复
包效验
使用rpm命令导入公钥(KEY文件)
验证rpm包来源(光盘)的来源及完整性
检查包安装后生成的文件,是否发生过变动
RPM包管理器的数据库
如果某个rpm相关内容被删除
如果rpm命令的包被删除了
信息库被删除了
删除/usr/bin下面的passwd命令后,如何恢复?
删除过程:
删除检验:
恢复过程:

查询

查询库文件

  • 查看二进制程序所依赖的库文件名

ldd     /PATH/TO/BINARY/FILE
  • 管理及查看本机装载的库文件:ldconfig

    • 显示本机已经缓存的所有的可用库文件及文件路径映射关系

ldconfig -p
    • 配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf

    • 缓存文件:/etc/ld.so.cache

    • 配置文件和缓存文件的路径/etc/ld.so.* 
      将新的包的安装路径写入这里,使用ldconfig将路径读入内存中,就可以用啦。

包查询

格式:rpm {-q|–query} [select-options] [query-options]

[select-options]
  • -a : 所有包

    • 查询安装在系统上的所有的包

rpm -qa
  • -f : 查看指定的文件由哪个程序包安装生成

  • -p rpmfile(文件包包名) : 针对尚未安装的程序包文件做查询操作; 
    1.png

  • –whatprovides CAPABILITY : 查询指定的CAPABILITY由哪个包所提供 
    rpm包管理(二)1.png

  • –whatrequires CAPABILITY : 查询指定的CAPABILITY被哪个包所依赖 
    rpm包管理(二)1.png

  • –scripts PACKAGE_NAME : 查询某包安装时或卸载时执行的脚本

[query-options]
licdR
  • -c : 查询程序的配置文件

  • -d : 查询程序的文档

  • -i : information

  • -l : 查看指定的程序包安装后生成的所有文件;

  • -R : 查询指定的程序包所依赖的CAPABILITY; 
    rpm包管理(二)1.png

  • –scripts : 程序包自带的脚本片断 
    rpm包管理(二)1.png

  • –provides : 列出指定程序包所提供的CAPABILITY;

  • –changelog : 查询rpm包的changelog

常用的查询用法:
  • -qi PACKAGE,(-i:information)

  • -qf FILE, 查询某文件是由哪个包安装生成的

  • -qc PACKAGE,(-c:configuration)

  • -ql PACKAGE,(-l:list)

  • -qd PACKAGE(-d:document)

  • -qpi PACKAGE_FILE,…

  • -qpl PACKAGE_FILE, …

  • -qa 
    ** notes:** 
    比如一个rpm包,名为make-3.81-23.el6.x86_64,那么这里: 
    1.png

卸载:

rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME … 
rpm包管理(二)1.png其他选项同-i(安装) 
triggers触发器:做一个动作的时候触发另外一个动作

二进制文件的恢复

假如不小心删除了某个二进制文件:

rpm2cpio 包文件 (这里展现的是二进制数据流,直接只运行这个,会扰乱整个终端,使用reset可以恢复 | \
>cpio –itv 预览包内文件 
rpm2cpio 包文件 |  cpio –id “*.conf” (只解压配置文件) 释放包内文件

这种恢复方法,恢复后的文件中,会有原来命令在系统中所需要用的权限。

包效验

开发者:使用单向特征算法,提取包文件的特征码,并使用私钥加密该特征码。对外提供出公钥。(这种是非对称加密)(如果使用对称加密算法的话,加密解密使用同一套密钥) 
使用者:拿到包(内含加密过的特征码)和公钥, 
– 使用公钥解密特征码===>证明来源是正确的 
– 使用与开发者相同的单项特征算法提取包的特征码,与解密的特征码对比,相同,则表示该包未被修改过。===>内容等的正确性

  • 存放公钥的位置 
    rpm包管理(二)rpm包管理(二)1.png2.png

使用rpm命令导入公钥(KEY文件)

  • 导入命令格式 
    rpm –import /path/to/RPM-GPG-KEY-FILE

  • 例如: 
    rpm –import RPM-GPG-KEY-CentOS-6 
    rpm包管理(二)3.png

  • 查询系统中是否有该秘钥:

[root@node4 ~]# rpm -qa gpg*
gpgme-1.1.8-3.el6.x86_64[object Object][object Object]

4.png

  • 卸载导入的公钥(pub key)===使用-e选项

[root@node4 yum.repos.d]# rpm -qa gpg*
gpgme-1.1.8-3.el6.x86_64

[root@node4 yum.repos.d]# rpm -e gpgme-1.1.8-3.el6.x86_64
error: Failed dependencies:    libgpgme-pth.so.11()(64bit) is needed by (installed) kdepimlibs-4.3.4-4.el6.x86_64

//这里想要删除的gpg密钥,系统中与他存在以来关系,所以不能够被删除。

5.png

这时候,虽然安装包依然是合法的,但是因为没有pubkey了,所以就无法检测包的完整性了。 
rpm包管理(二)6.png

NOTE: 
在import后,就可以直接使用光盘了。

验证rpm包来源(光盘)的来源及完整性

rpm {-K|–checksig} PACKAGE_FILE

  • –nosignature:不检查来源合法性

  • –nodigest:不检查完整性 
    NOTES: 
    有时候,直接安装文件,不能够确定文件是完整的。需要使用-K 
    rpm包管理(二)7.png

检查包安装后生成的文件,是否发生过变动

rpm {-V|--verify} [select-options] [verify-options]
S 文件大小改变(file Size differs)
M 文件类型或文件的属性(包括权限和文件类型)( Mode differs (includes permissions and file type))
5 MD5的指纹码( digest (formerly MD5 sum) differs)
D 装置的主/次代码已经发生改变( Device major/minor number mismatch)
L Link路径已经发生改变(readLink(2) path mismatch)
U 文件属主改变( User ownership differs)
G 文件属组改变( Group ownership differs)
T 文件的修改时间发生改变(mTime differs)
P 文件功能发生改变( capabilities differ)
  • 系统安装新的包的时候,是如何知道这个包是否是被篡改过的呢?

  • 安装后,某段时间之后,如何知道现在的包是否是当初安装的那个,是没有被黑客等恶意篡改的呢?

  • 怎么对比呢? 
    因为系统中,在安装包时,将包的很多信息记录了下来。一段时间后对比,就可以知道了 
    使用当前包的状态,和系统中RPM包管理器的数据库中的记录进行对比 
    rpm包管理(二)8.png

RPM包管理器的数据库

RPM包管理器的数据库,主要用来存放记录一些与软件相关的信息。

  • 位置:/var/lib/rpm

  • 命令:

rpm {--initdb|--rebuilddb[-v][--dbpath DIRECTORY}
- initdb:初始化数据库,数据库完全不存在时,可新建之
- rebuilddb:无论当前数据存在与否,都会直接创建词库;构建的数据库存放在、var/lib/rpm当中
- centos7中,使用rpmdb来替换这里的rpm命令。

如果某个rpm相关内容被删除

如果rpm命令的包被删除了

rpm2cpio rpm-4.8.0-55.el6.x86_64.rpm | cpio -tv 
rpm包管理(二)9.png

信息库被删除了

/var/lib/rpm是rpm记录包信息的数据库

  • 删除了该库后:
    rpm包管理(二)10.png

    11.png

    • 删除后,无法完成校验1.png

    • 安装数据库文件,也不能够完成 
      2.png
      rpm包管理(二)
      -如果已经完全删除了,可以使用initdb来初始化数据库,但是这里也只是建立了起来,里面的内容很可能都是空的。 
      rpm包管理(二)1.png

删除/usr/bin下面的passwd命令后,如何恢复?

删除过程:

  • rm /usr/bin/passwd 
    rpm包管理(二)1.png

删除检验:

rpm包管理(二)1.png

恢复过程:

  • 查询passwd命令的安装需要哪些包文件

[root@localhost Packages]# ls | grep passwd-0.79-4.el7.x86_64.rpm 
passwd-0.79-4.el7.x86_64.rpm[object Object][object Object]

1.png

  • 查看这个包当中,包含哪些文件 
    rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv 
    从该查看命令的输出可以看出,每个文件的权限在正常系统中的权限,也都是给好了的。所以直接恢复就可以了,之后不需要再次修改权限了。

[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv
-rw-r--r--   1 root     root          188 Jun 10  2014 ./etc/pam.d/passwd
-rwsr-xr-x   1 root     root        27832 Jun 10  2014 ./usr/bin/passwd
drwxr-xr-x   2 root     root            0 Jun 10  2014 ./usr/share/doc/passwd-0.79
-rw-r--r--   1 root     root          156 Nov 26  2012 ./usr/share/doc/passwd-0.79/AUTHORS
-rw-r--r--   1 root     root        19950 Nov 26  2012 ./usr/share/doc/passwd-0.79/COPYING
.......
864 blocks

这个包中,包含那么多的文件,但是真正恢复需要的文件,只有一个。

[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -itv | grep /usr/bin/passwd
-rwsr-xr-x   1 root     root        27832 Jun 10  2014 ./usr/bin/passwd

rpm包管理(二)1.png

  • 解压这个包中的指定文件 
    rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -id ./usr/bin/passwd

[root@localhost ~]# rpm2cpio passwd-0.79-4.el7.x86_64.rpm | cpio -id ./usr/bin/passwd
864 blocks
[root@localhost ~]# ls
anaconda-ks.cfg  Documents  f.sh                  passwd                        Public     usrbin             
 Downloads  initial-setup-ks.cfg  passwd-0.79-4.el7.x86_64.rpm  sbin       VideosDesktop          etc        
 Music                 Pictures                      Templates

rpm包管理(二)1.png

  • 查看解压后的文件,权限在解压包中就已经给好了,无需修改权限了。

[root@localhost ~]# ll ./usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Aug 22 08:26 ./usr/bin/passwd

rpm包管理(二)1.png

  • 直接恢复文件 
    cp -a 能够拷贝文件的全部及元数据

[root@localhost ~]# cp -a ./usr/bin/passwd /usr/bin/
[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Aug 22 08:26 /usr/bin/passwd

rpm包管理(二)1.png

原创文章,作者:m20-吴清玲,如若转载,请注明出处:http://www.178linux.com/39876

(0)
m20-吴清玲m20-吴清玲
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • ◆战前宣言

    从 今 天 开 始, 到 以 后 的 很 久,我 要 努 力,努 力,努 力 的 用 尽 全 力 地 学 好 Linux。 我 知 道,这 起 码 需 要 很 长 时 间 和 汗 水,但 我 坚 信,付 出 总 是 会 有 回 报 的~ 要记住:比你优秀的人都在努力,你还在彷徨什么? 最后借用一下火影忍者中李…

    Linux干货 2016-10-24
  • N25期第一周作业

    计算机组成及其功能 计算机由硬件和软件组成,硬件是基础,是软件活动的舞台,软件是灵魂,使硬件发挥最大的作用,两者缺一不可。计算机硬件是由物理元器件构成的有形实体,主要是数字逻辑电路。计算机软件是由计算机程序构成的无形的东西,需要存储在有形的硬件(如主存储器、硬盘等)中,可以实现更高层次的逻辑功能。目前大多数计算机是根据冯.诺依曼体系结构的思想来设计的,即具有…

    Linux干货 2016-11-30
  • 配置Nginx作为反向代理服务器

    配置Nginx作为反向代理服务器      一、nginx作为反向代理的工作模型: 1、nginx作为反向代理的工作模型       nginx工作在应用层,其能理解并可以提取出http请求报文中的首部信息中的请求方法、url、http协议版本等信息。   &…

    Linux干货 2016-10-29
  • Shell脚本的编写

    1.什么是Shell脚本 Shell脚本是利用 shell 的功能所写的一个程序 program,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。 Shell 脚本可以简单的被看成是批处理文件, 也可以被说成是一个程序语言,且这个程序语言由于都是利用…

    Linux干货 2017-04-16
  • mysql—MHA原理与实现

    MHA 一:简述MHA 1.1关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方…

    2016-11-27
  • iptables/netfilter基于layer7实现应用层过滤

    前言 做为网络管理员,对P2P、QQ、酷狗等软件是又爱又恨,大多数公司为了提高工作效率,禁止公司员工登陆QQ、看视频等,在市场上买专门的上网行为管理设备,随便一种都是价格不菲,而使用linux来做网关一样可以禁止qq、酷狗等软件,为实现此功能就需要为iptables/netfilter添加layer7模块,而iptables/netfilter是基于内核的,…

    Linux干货 2015-04-27