首页 > 系统相关 >Linux提取RPM包文件

Linux提取RPM包文件

时间:2023-11-12 21:06:49浏览次数:30  
标签:文件 提取 root cpio 命令 ls Linux RPM localhost

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。

Linux提取RPM包文件_数据

归档包,也可称为文件库,其实就是 cpio 或 tar 格式的文件,该文件中包含其他文件以及一些相关信息(文件名、访问权限等)。归档包既可以是磁盘中的文件,也可以是磁带或管道。

cpio 命令可以看做是备份或还原命令,因为它可以将数据(文件)备份到 cpio 归档库,也可以利用 cpio 文档库对数据进行恢复。使用 cpio 命令备份或恢复数据,需注意以下几点:

  • 使用 cpio 备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。
  • cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与 find 命令配合使用。
  • cpio 命令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。

cpio 命令主要有以下 3 种基本模式:

"-o" 模式:指的是 copy-out 模式,就是把数据备份到文件库中,命令格式如下:

[root@localhost ~]# cpio -o[vcB] > [文件丨设备]

各选项含义如下:

Linux提取RPM包文件_数据_02

  • -o:copy-out模式,备份;
  • -v:显示备份过程;
  • -c:使用较新的portable format存储方式;
  • -B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;

比如,使用 cpio 备份数据的命令如下:

[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio
#利用find命令指定要备份/etc/目录,使用>导出到etc.cpio文件
[root@localhost ~]# II -h etc.cpio
-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio
#etc.cpio文件生成

"-i" 模式:指的是 copy-in 模式,就是把数据从文件库中恢复,命令格式如下:

[root@localhost ~]# cpio -i[vcdu] < [文件|设备]

各选项的含义为:

  • -i:copy-in 模式,还原;
  • -v:显示还原过程;
  • -c:较新的 portable format 存储方式;
  • -d:还原时自动新建目录;
  • -u:自动使用较新的文件覆盖较旧的文件;

比如,使用 cpio 恢复之前备份的数据,命令如下:

[root@localhost ~]# cpio -idvcu < /root/etc.cpio
#还原etc的备份
#如果大家査看一下当前目录/root/,就会发现没有生成/etc/目录。这是因为备份时/etc/目录使用的是绝对路径,所以数据直接恢复到/etc/系统目录中,而没有生成在/root/etc/目录中

"-p" 模式:指的是复制模式,使用 -p 模式可以从某个目录读取所有文件,但并不将其备份到 cpio 库中,而是直接复制为其他文件。

例如,使用 -p 将 /boot/ 复制到 /test/boot 目录中可以执行如下命令:

[root@localhost ~]# cd /tmp/
#进入/tmp/目录
[root@localhost tmp]#rm -rf*
#删除/tmp/目录中的所有数据
[root@localhost tmp]# mkdir test
#建立备份目录
[root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test
#备份/boot/目录到/tmp/test/目录中
[root@localhost tmp]# ls test/boot
#在/tmp/test/目录中备份出了/boot/目录

Linux提取RPM包文件_数据_03

使用 cpio 命令提取 RPM 包中指定文件

在服务器使用过程,如果系统文件被误修改或误删除,可以考虑使用 cpio 命令提取出原 RPM 包中所需的系统文件,从而修复被误操作的源文件。

RPM 包允许逐个提取包中文件,使用的命令格式如下:

[root@localhost ~]# rpm2cpio 包全名|cpio -idv .文件绝对路径

该命令中,rpm2cpio 就是将 RPM 包转换为 cpio 格式的命令,通过 cpio 命令即可从 cpio 文件库中提取出指定文件。

举个例子,假设我们不小心把 /bin/ls 命令删除了,通常有以下 2 种方式修复:

  1. 将 coreutils-8.4-19.el6.i686 包(包含 ls 命令的 RPM 包)通过 -force 选项再安装一遍;
  2. 使用 cpio 命令从 coreutils-8.4-19.el6.i686 包中提取出 /bin/ls 文件,然后将其复制到相应位置;

这里我们选择第 2 种方式。有读者可能会问,如何知道 ls 命令隶属于那个 RPM 包呢?很简单,使用 rpm -qf 命令即可,如下所示:

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686
#查看ls文件属于哪个软件包

在此基础上,我们只需从此 RPM 包使用 cpio 命令提取出 ls 命令文件,然后将其复制到对应位置即可,实现命令如下:

[root@localhost ~]# mv /bin/ls /root/
#把/bin/ls命令移动到/root/目录下,造成误删除的假象
[root@localhost ~]# ls
-bash: ls: command not found
#这时执行ls命令,系统会报"命令没有找到"错误
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm
|cpio -idv ./bin/ls
#提取ls命令文件到当前目录下
[root@localhost ~]# cp /root/bin/ls /bin/
#把提取出来的ls命令文件复制到/bin/目录下
[root@localhost ~]#ls
anaconda-ks.cfg bin inittab install.log install.log.syslog ls
#可以看到,ls命令又可以正常使用了

标签:文件,提取,root,cpio,命令,ls,Linux,RPM,localhost
From: https://blog.51cto.com/u_15641375/8330686

相关文章

  • linux系统配置固定地址
    登录虚拟机Linux系统,输入账户密码登录root权限。输入ipadd***查看IP命令***ens33是网卡,网卡下的192.168.124.***就是IP地址。如果没有ens33网卡的话就是安装的时候获取的那步出错了。这时候点击编辑-虚拟网络编辑器vmnet看一下nat和网段地址是否正确重启网络服务命令:systemctlr......
  • linux下安装mysql
    Linux下安装MySQL概述简单介绍MySQL是什么,运用场景。在Linux操作系统(默认64位)下安装MySQL需要注意的点,以及通过navicate16连接本地MySQL实现图形化操作。注意:需要root权限,或者您能正常使用sudo提权。MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于......
  • linux安装svn
    1.yum安装软件: yuminstallsubversion 2.创建版本库 svnadmin create/svn/xxx 3.编辑配置文件1).vi/svn/xxx/conf/svnserve.confanon-access=noneauth-access=write  password-db=password #密码配置文件authz-db=authz    #权限配......
  • Linux学习网站汇总
    推荐linux的几个学习网站,有了这些网站,基本涵盖linux学习的所有需求。https://metacpan.org/#linux命令详解的网站https://www.kancloud.cn/thinkphp/linux-command-line/39431#linux命令学习https://www.linuxcool.com/......
  • Linux第6章学习笔记
    第六章学习笔记信号和信号处理本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了......
  • linux 基础
    linux基础一、教学目标1、了解Linux的简介与安装2、掌握Linux常用的命令二、Linux的简介1.Linux的概述Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境。Linux是由LinusTorvalds(林纳斯·托瓦兹)起初开发的,由于源代码的开......
  • Linux基础命令(二)
    >命令:重定向把ls命令返回的结果输出到1.txt文件中,会覆盖文件内容(默认情况下ls命令返回显示在屏幕上):ls>1.txt把ls命令返回的结果输出到1.txt文件中,追加内容(默认情况下ls命令返回显示在屏幕上):ls>1.txtcat命令:查看文件内容查看1.txt,2.txt的内容:cat1.txt2.txt将1.txt,2.......
  • 如何在 Linux 中分割和重组文件!
    我们将学习如何使用csplit,split和cat来重新整理文件,然后再将文件合并在一起。这些操作在任何文件类型下都有用:文本、图片、音频文件、ISO镜像文件等。使用csplit分割文件csplit是这些有趣的小命令中的一个,它永远伴你左右,一旦开始用它就离不开了。csplit将单个文件分割......
  • linux安装mysql
    linux安装mysql概述:mysql是关系型数据库,可运行在linux、windows、macOS等各个操作系统。由于体积小、速度快、低成本等优点,大多数企业在软件开发都选择MYSQL作为软件数据库。本次linux安装mysql使用的是5.7版本,其他版本也是大同小异,思路步骤都一致。第一步:下载mysql下载地址:ht......
  • Linux读取文件的简单字符驱动程序
    Linux读取文件的简单字符驱动程序设备驱动程序作为沟通外部硬件与Linux内核的纽带,属于嵌入式开发中不可避免的一环。Linux内核程序的开发和用户空间中开发的不同之处在于两点,一是内核程序由内核进行调用,基本没有一个类似于用户空间程序中的main函数,二是内核代码无法调用很多我们......