1、RPM包中文件的提取

为什么要做这个事呢?

在操作Linux系统的时候误删除一个文件,可以通过强制覆盖的方法可以把删除的文件还原。如果不是误删除,我只是修改了文件中的内容,但是我忘记源文件内容是什么,我修改不回来了。这个时候强制安装覆盖(--force选项)就解决不了问题了。因为强制安装覆盖,并不会对现已存在的文件做修改。Linux系统怕软件的强制安装覆盖把你现有的配置清空了。

像上面的情况,我想得到文件原来的状态,靠强制安装覆盖是行不通的。但你可以把文件删除了,在进行强制安装覆盖不就还原了,这样是可以的,但是我们还可以用一种方式来恢复,就是下面讲的RPM包中文件的提取。

提示:

其实在修改重要系统文件之前,应该先把文件做一下备份处理。

[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak

然而你忘记了备份,然后文件你修改错误了,无法还原了,而且这个文件还不能删除。这种情况下,就需要使用RPM包的文件提取了。

RPM包中文件的提取,其实就是直接从RPM包中提取一个或者几个我需要的文件。

2、在RPM包中提取文件的操作

(1)cpio命令介绍

cpio命令主要有三种基本模式:

  • -o模式:指的是copy-out模式,就是把数据备份到文件库中;
  • -i模式:指的是copy-in模式,就是把数据从文件库中恢复;
  • -p模式:指的是复制模式,就是不把数据备份到cpio库中,而是直接复制为其他文件。

说明:

  • cpio命令本来是做备份和还原的,但是这个命令的备份和还原极其不方便。(不推荐用cpio命令做备份和还原),了解一下即可,具体例子也不用说了。
  • 如果需要从RPM包中提取文件,只能使用cpio命令,因为RPM是二进制包,需要用到特殊的格式来处理二进制包,而cpio命令就符合。
  • 换句话总结就是:不推荐用cpio命令做备份和还原,还有其他更好的方式。但是可以用来做在RPM包中提取文件的事情。

注:cpio命令做备份和还原例子就不总结了,需要的自己扩展,本文直接介绍运用cpio命令在RPM包中提取文件的使用。

(2)提取RPM包中文件

提示:上边介绍了cpio命令,现在就用cpio命令来提取RPM包中需要的文件。

[root@localhost ~]# rpm2cpio 包全名|cpio-idv .文件绝对路径
rpm2cpio <— 将rpm包转换为cpio格式的命令
cpio <— 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

注意:

上边命令中的.,是表示当前目录,把提取出来的文件放入当前目录。如果不写.,提取出来的文件,会直接提取到文件的安装目录中,覆盖掉原有的配置文件。

这不符合我们的操作习惯,我们的习惯是,把现有的文件和提取出来的文件进行比对,看看有什么不同,然后在确定是否替换,或者修改现有文件。

1)首先要确定文件属于哪个软件包

还记得-qf选项嘛,我们就需要这两个选项,命令如下:

[root@localhost ~]# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.2.15-53.e16.centosx86-_64.rpm

2)从RPM中提取文件

[root@localhost ~]# rpm2cpio /mnt/cdrom/packages/httpd-2.2.15-53.e16.centosx86-_64.rpm | cpio -idv ./etc/httpd/conf/httpd.conf

3)注意一下几点:

  • /mnt/cdrom/packages/httpd-2.2.15-53.e16.centosx86-_64.rpm表示RPM包路径。
  • RPM包中文件的路径和文件绝对路径(系统中的文件路径)是相等的,一样的。
  • ./etc/httpd/conf/httpd.conf表示,当前目录下有一个/etc/httpd/conf/httpd.conf文件。到时候比对httpd.conf文件和现有文件,在决定下一步的操作。

    如下图所示:



    可以看到只从RPM包中提取了一个httpd.conf文件。

提示:只是知道有这个功能即可,需不需要用看你自己的实际情况。

最新文章

  1. 解决:MIUI 8应用商店下载不了软件 APP
  2. bootstrap multiselect两大组件
  3. HDU 2082 母函数模板题
  4. Spring事务的传播特性和隔离级别
  5. BNUOJ-26474 Bread Sorting 逆序对
  6. Andoird - SQLite 数据库 基础教程
  7. Python 函数简介 之二
  8. 使用traceview进行Android性能测试(转)
  9. GitHub 入门教程
  10. 【Java】泛型学习笔记
  11. 安装coreseek cannot find input file: src/Makefile.in 错误解决方法
  12. 认识uWSGI、uwsgi、wsgi
  13. LeetCode链表解题模板
  14. Confluence 6 修改站点的标识图片
  15. H/s:哈希率单位转换
  16. 内建函数之:reduce()使用
  17. MySQL 基础 简单操作
  18. js实现表单提交 onsubmit
  19. Linux - awk 文本处理工具四
  20. perl 信号

热门文章

  1. Python isinstance() 函数 Python 内置函数 Python 内置函数
  2. RuntimeError: DataLoader worker (pid 18255) is killed by signal: Killed.
  3. Java-爬虫-小项目
  4. 基础篇——Pycharm的安装与使用 初学者此篇够用
  5. 无法解析的外部符号之_cvLoadImage,_cvCreateMat,_cvReleaseImage之类
  6. python中return的返回和执行
  7. C 输入输出函数
  8. Longhorn 云原生容器分布式存储 - 故障排除指南
  9. Oracle-绑定执行计划
  10. 反调试——11——检测TF标志寄存器