在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。

cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。

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

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

使用 cpio 命令备份或恢复数据,需注意以下几点:

使用 cpio 备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。

cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与 find 命令配合使用。

cpio 命令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。

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

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

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

各选项含义如下:

-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/目录

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

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

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

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

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

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

将 coreutils-8.4-19.el6.i686 包(包含 ls 命令的 RPM 包)通过 -force 选项再安装一遍;

使用 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命令又可以正常使用了

example:

先使用命令显示rpm包含的文件列表

rpm2cpio your.rpm | cpio -t

然后再显示的列表中找到你需要的文件,执行如下命令:

rpm2cpio your.rpm | cpio -id your-file

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解相关推荐

  1. linux 提取cpio_Linux提取RPM包文件(cpio命令)详解

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

  2. linux常用pwd和ls区别,linux实战技能100讲---初识pwd和ls命令详解

    1. pwd  显示当前文件的路径 2.cd cd   /path/to  绝对路径 cd   ./path/to  相对路径 cd  ../path/to  相对路径 绝对路径和相对路径 3.ls  ...

  3. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解

    Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...

  4. linux命令打包文件,Linux系统中打包文件的命令详解

    linux系统中遇到要打包文件的时候我们该使用什么命令呢?下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux系统中打包文件的命令详解的相关知识,希望对大家有帮助! linux系统 ...

  5. 制作可执行的JAR文件包及jar命令详解

    制作可执行的JAR文件包及jar命令详解zt http://www.chinaunix.net 作者:郝君  发表于:2003-08-12 14:32:38 常常在网上看到有人询问:如何把 java  ...

  6. linux shell 脚本攻略学习11--mkdir和touch命令详解

    一.创建目录(mkdir命令详解) amosli@amosli-pc:~/learn$ mkdir dir amosli@amosli-pc:~/learn/dir$ mkdir folder amo ...

  7. python删除文件夹命令_linux删除文件夹(命令详解)

    linux删除文件夹 Linux删除文件,文件夹主要用的命令是rm,下面将对linuxrm命令做一个简单的介绍. 语法: rm[选项]DirName 该命令中的[选项]常用的有以下几种: -i删除前逐 ...

  8. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  9. linux中怎么卸载tree,Liunx系统命令中tree命令详解

    介绍 tree 命令英文理解为树的意思,其功能是是创建文件列表,将目录所有文件以树状的形式列出来.是一款在颜值上优先于ls的命令. linux中的tree命令默认并不会安装,下面来先看看tree安装 ...

最新文章

  1. linux 故障注入_libfiu
  2. Linux添加文件命令
  3. Spring 事务与脏读、不可重复读、幻读
  4. 软件工程教学博客 (备份)
  5. redis 用户订单缓存_Redis实战(12)-基于Key失效和定时任务实现订单支付超时自动失效...
  6. GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路
  7. vue.js能美化界面吗_美牙真的能变美吗?刘涛花百万美化牙齿,容貌大变样,网友:太神奇了吧...
  8. 聚合矩阵+中心化处理
  9. DirectX SDK 2010 , DXSDK_Jun10.exe, 下载地址
  10. js实现简单pdf打印功能
  11. K-means聚类攻击类型
  12. 用C实现OOP面向对象编程(1)
  13. 【庄碰辉】物质与精神的对垒中选择
  14. R语言中的Wilcoxon符号秩检验与配对学生t检验
  15. 等保2.0的自动代码审计及开源治理解决方案
  16. 语音端点检测c语言,语音端点检测的方法.ppt
  17. 光纤收发器工作原理及技术详解
  18. c语言创建临时文件,5.19 创建临时文件和文件夹
  19. ruby 中叹号问号的作用
  20. 感谢腾讯,百度,网易云的朋友给我这份339页,98346个字的“杀手锏”,让我成功挤进了阿里!

热门文章

  1. 程序无法启动ALL_BUILD 拒绝访问
  2. 邻值查找—算法进阶指南
  3. 上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力
  4. [ZJOI2007]矩阵游戏
  5. T183637-变异距离(2021 CoE III C)【单调栈】
  6. 中山纪念中学培训15天总结
  7. 【做题记录】DP 杂题
  8. 泰勒及洛朗展开学习笔记
  9. AtCoder Regular Contest 105 部分 NIM游戏
  10. 动态规划训练9 [Brackets POJ - 2955 ]