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基础命令及应用     shutdown:关机命令         -r:重启         -h:关机    &nb…

    Linux干货 2016-08-02
  • CentOS下获取帮助

    CentOS中获取帮助 在使用和学习CentOS系统时,我们可能会遇上不熟悉的命令,需要获取帮助。在很多情况下,我们无法通过网络获取帮助,这个时候我们就需要自己通过查看系统帮助文档来解决问题。下面就来介绍获取帮助的方法: 1、 获取简单的帮助信息:whatis COMMAND   2、获取比较详细的命令帮助信息:help COMMAND;COMMA…

    2017-07-15
  • 三剑客之一sed命令

    sed sed ‘2p’ /etc/passwd  打印paswwd的第二行 这样执行结果看能看出第二行显示两次 sed -n ‘2p’ /etc/passwd -n 执行后 会取出当前行显示. n是关闭打印  例如[root@cent7 ~]#ifconfig ens33|sed -n &…

    Linux干货 2017-08-13
  • N21天天第十周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) CentOS主机按以下顺序启动 1、POST加电自检 2、BIOS读取CMOS中的BIOS设置的参数来识别基础硬件,寻找到启动设备 3、MBR 1)读取启动设备MBR中前446字节的bootloader 2)读取MBR后的扇区用来识别grub以及内核kernel所在的区域 3)启动g…

    Linux干货 2016-09-26
  • 简述开源协议

    简述开源协议 现在一说到智能手机,相信很容易就会想到苹果和安卓。安卓搭载的Android是一种基于Linux的自由及开源的操作系统,苹果手机搭载OS X是苹果公司为Mac系列产品开发的专属操作系统。    安卓手机凭借其开源的特性达到与苹果系统分庭伉礼的地位,又凭借其开源的价格优势,牢牢把控手机设备的中低端市场,其市场占有率远远…

    Linux干货 2017-03-26
  • N25_第二周作业

    前言 我们这次使用HAProxy作为负载均衡调度器来实现后端httpd服务的负载均衡和动静分离,实现将来自用户的80端口的http请求转发只后端8080端口的server服务 HAProxy介绍 HAProxy的是一个免费的,非常快速和可靠的解决方案,提供高可用性,负载均衡和代理对TCP和HTTP的应用程序。它特别适用于非常高流量网站。多年来,它已成为标准的…

    Linux干货 2016-12-12