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)
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • Nginx/httpd 代理两个Tomcat

    Nginx 前端代理服务器172.16.71.1 从ftp下载Nginx 安装 vim /etc/nginx/nginx.confhttp {…# 添加以下内容upstream tcsrvs {         server 172.16.71.4:8080;        …

    Linux干货 2017-02-12
  • LNMP编译安装-week16

    1、源码编译安装LNMP架构环境; 系统: CentOS 7.2IP: 172.16.0.11版本: nginx-1.10.3 php-5.6.30 mysql-5.6.30 一.安装开发包组 ~]# yum -y groupinstall “Development Tools” “Server Platform Development” 二.编译安装ngi…

    2017-05-11
  • 逻辑卷管理

    1.相关命令:lsblk、fdisk、gdisk、parted、mkfs、mke2fs、blkid、e2label、findfs、tune2fs、dumpe2fs、fsck、e2fsck、mount、swapon、swapoff、mkisofs、wodim、free、df、du、dd。 2.列出块设备:lsblk    &nbs…

    Linux干货 2016-09-01
  • 包管理及源码安装Apache

    一,概述 yum 仓库的安装 在/etc/yum.repos.d/目录下创建后缀名为repo的配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 配置文件基本包含的四个要求 安装及升级本地程序包: * localinstall rpmfile1 [rpmfile2] […] (用install替代) …

    Linux干货 2016-09-01
  • 设计模式(二)单件模式Singleton(创建型)

      几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例…

    Linux干货 2015-06-24
  • awk

    文本处理工具 文本处理三工具:grep,sed,awk grep,egrep,fgrep:文本过滤工具 sed:行编辑器 awk:报告生成器,格式化文本输出; awk gawk – pattern scanning and processing language lrwxrwxrwx. 1 root root 4 May 17 19:23 /bi…

    Linux干货 2017-05-21